| > It's rare for a modern language to not be able to do all the things that C does. I agree with the general gist of this, but: • Java has no unions • Java has no rectangular multidimensional arrays, although of course C arrays decay to pointers when passed anyway • Java has no unsigned integer types, I imagine this is generally easily handled though • Java has no const modifier, you'd need to keep track of that manually • Java has no preprocessor, although of course this happens at the API level not the ABI level • Java lacks bitfields but they're generally avoided in C APIs anyway, for good reason • Probably worst of all, Java references are importantly different from C pointers You're absolutely right though that the C ABI is a pretty good lingua franca ABI largely due to C being a pretty minimal language. No overloading, templates, garbage collector, or object model to worry about. |