OK, then why isn C– a subset of C?
For efficient compilation of modern languages, we need features that C just doesn’t provide efficiently: • Ability to return multiple values in registers • Optimized tail calls to any procedure • Global variables bound to registers • Ways to tie garbage-collection information to particular program points • Support for exceptions • Support for lightweight concurrency The latter three are the real killers: C– provides a run-time interface that allows the state of a suspended C– computation to be inspected and modified at runtime. C has no equivalent for this.