1. Instead of the ability to directly call and be called by C/C++, include a really kick-ass Foreign Function Interface that can JIT the hookups and wrappers. And more important than call compatibility IMO is C++ object ABI compatibility. (I realize there is no universal C++ ABI; just pick one and be compatible with it.) If you can declare a struct or class in the language and make its layout match a C or C++ class/s…
I think exceptions are an important language advance, but
I can't dispute that they can cause a mess of problems
when it comes to cross-language (or cross-thread)
boundaries.
Exceptions are not completely problem-free, but there is no alternative. If you don't have exceptions, every single line of code: doSomething();
Becomes: int result = doSomething();
if (result != OK) return result;
... and that is the simple case, without memory management, an actual result to return, unfortunate interactions with your other control flow statements, and so on. And you still end up with your application helpfully saying "ERR: -1923876".This is simply doesn't work. And few people programming C/C++ appear do it correctly; I'd imagine that many security flaws come from improperly proceeding code that should have checked a return code.