3 ms·
Thanks for taking the time to respond, compilers are always interesting to learn about! Point 7 was (finally!) addressed by C11. Points 6, 8, 9, 10, & 11 are
by Reelin 7y ago
Thanks for taking the time to respond, compilers are always interesting to learn about!
Point 7 was (finally!) addressed by C11.
Points 6, 8, 9, 10, & 11 are all good ones that hadn't occurred to me.
It seems like points 1, 4, & 5 could be worked around, but I can see where the added complexity would be unwelcome.
On the whole, I can see why you made the decision you did. However, I don't buy points 2 (exception handling) and 3 (type support). Certainly C doesn't have these things built in, but appropriate code transformations seem to suffice in practice. For example, the CHICKEN Scheme to C compiler employs continuation-passing style [1] and Embeddable Common Lisp [2] manages to compile to C without (to my knowledge) breaking either its type system or its condition and restart [3] system.
[1] https://wiki.call-cc.org/chicken-compilation-process https://wiki.call-cc.org/chicken-compilation-process
[2] https://www.cliki.net/ECL https://www.cliki.net/ECL
[3] http://www.gigamonkeys.com/book/beyond-exception-handling-conditions-and-restarts.html http://www.gigamonkeys.com/book/beyond-exception-handling-co...
- WalterBright 7y ago2. yes, it can be done with setjmp/longjmp, but that's a terrible solution 3. if the C compiler doesn't support 80 bit reals (and D does), you're out of luck. I looked at the C code generated by C++ cfront. No thanks. The worst is, the C compiler vendor owns you, and they couldn't care less about you.