4 ms·
Ideology disguised as logic. Basically NIH. Apple engineers could have made C++ RTTI, and other other native features, suit their requirements. Instead they cre
by comesee 8y ago
Ideology disguised as logic. Basically NIH. Apple engineers could have made C++ RTTI, and other other native features, suit their requirements. Instead they created a bastardized dialect of C++ which requires new domain knowledge to use effectively.
- saagarjha 8y agoI believe the dialect of C++ that Apple uses for IOKit is based on a dialect called Embedded C++, which was created an industry standard: https://en.wikipedia.org/wiki/Embedded_C%2B%2B https://en.wikipedia.org/wiki/Embedded_C%2B%2B
- comesee 8y agoI was talking about their custom runtime system that provides them type information, as well as generic container types and other features.
- frabert 8y agoBanning the use of namespaces and templates for embedded programming seems arbitrary at best, since they are both completely compile-time features
- veli_joza 8y agoI don't know what their reasoning was, but it might have not been technical one. Embedded development positions are not your typical developer positions, they require more intimate knowledge of system, of possible states and transitions, and of hardware internals. This results in less focus on actual coding skills. Even if you are highly skilled, you won't be doing your company a favor if you're writing code that only 5% people can understand and contribute to. My understanding is that every team that writes C++ will restrict it to some subset to make the codebase more manageable. OTOH I think namespaces can only lead to better and more modular architecture, I'm not sure where they should be avoided.
- frabert 8y agoThat would make sense if it wasn't for the fact that many embedded systems are programmed in assembly language, which is not the most easy to follow for people not acquainted with code.
- berti 8y agoIf you're a hardware guy, assembly is a lot more intelligible than many of the things you can do in C++...
- veli_joza 8y agoI haven't heard of any professional project using assembly in last couple of years. Maybe bits and pieces, like startup code to set up C/C++ environment, things that a single person can write and maintain. It doesn't work at all for large teams.
- pilif 8y agoa reason for banning namespaces is that they didn't want to add namespace support to their stripped-down RTTI solution and a reason for banning templates would likely be code-size concerns. I mean - I'm just guessing here, but I can at least see some technical reasons for these decisions.
- senozhatsky 8y agoMy guess would be: banning of namespaces and templates greatly simplifies name resolution and so on. For instance, look at https://en.cppreference.com/w/cpp/language/lookup https://en.cppreference.com/w/cpp/language/lookup and then remove namepsaces and templates from the picture. Or maybe they just wanted developers to be "less creative". -ss
- bnastic 8y agoIOKit predates anything resembling wide adoption of those C++ features. Exceptions are a particularly thorny subject when mixed with multithreading and (non-existent) memory model. And not to mention RTTI, which was always just a patch job.
- frabert 8y agoI think choosing to exclude exceptions is a totally fine decision, and I actually think it's the right thing to do in embedded systems where you _cant't_ afford to let an uncaught exception bubble up