3 ms·
I saw Zach Tellman's excellent talk at Papers We Love / Strange Loop this year[1]. In it, he talks about the Ship of Theseus [2] thought experiment as it applie
by munificent 4y ago
I saw Zach Tellman's excellent talk at Papers We Love / Strange Loop this year[1]. In it, he talks about the Ship of Theseus [2] thought experiment as it applies to software.
His very insightful observation is that you can replace every plank in the ship one at a time and the resulting ship still looks the same. That's because each time you replace one plank, it must fit with the surrounding existing ones. So while the components are replaced, the interface between them is unchanging. If you believe the result of the thought experience is that it is the same boat, then it's because the set of interfaces define the boat.
This applies very much to C as the universal ABI. It's common to see programs written in a combination of languages who interface with each other using a C ABI even though none of those languages is itself C. And, for better worse, it's really hard to change this because while components are easily swapped out, moving an interface is hard because you have to simultaneously fix every component that uses that interface.
[1]: https://www.youtube.com/watch?v=tHThXQr7wwA https://www.youtube.com/watch?v=tHThXQr7wwA
[2]: https://en.wikipedia.org/wiki/Ship_of_Theseus https://en.wikipedia.org/wiki/Ship_of_Theseus
- simplotek 4y ago> This applies very much to C as the universal ABI. It's common to see programs written in a combination of languages who interface with each other using a C ABI even though none of those languages is itself C. And, for better worse, it's really hard to change this because while components are easily swapped out, moving an interface is hard because you have to simultaneously fix every component that uses that interface. I'd go with the glass half full point of view. This has to do with fixing stuff that ain't broken. This has everything to do with developers not wanting to go the Java route and reinvent the wheel and have to reimplements all basic functionalities under the sun. They just target C in particular or in some cases POSIX and they are up and running in no time, reusing everything under the sun with minimal work.