The Things I don’t like about Scheme

Scheme is my favorite language so this list is very short.
  1. (set! car 0)
  2. lack of efficient access to native arithmetic, including the carry logic. (Not even C provides carry logic.)
  3. Lack of efficient synergy
  4. Continuations are reusable. Despite this trick
  5. dynamic-wind
  6. multiple values
I am aware that some implementations have managed somehow to prevent (set! car 0) but only for the primitive values. I have a proposal to solve the problem but perhaps Jonathan Rees’ Scheme48 is a better fix.

These common language extensions provide most of what I want for access to binary arithmetic foundations.

For the last three features I would like to see a program that uses them that cannot be improved by removing the feature.

Here are a few harmless constructs that I find no need for:

This is not exactly a complaint but the following problem might be fixed by language design. As I develop Scheme code I define many values at the top level. This is the only way I know to explore interactively. This style is presumably convenient to those who would like to explore my programs. This style of program is contrary to another pattern of which I am fond—limiting the scope of definition to those areas where it is needed. I can imagine a primitive function which when invoked establishes an interactive terminal session where the identifiers in scope at the point of the function invocation are in the name space of the REPL. Perhaps arguments to the function are bound to parameters a0, a1, … an, and the continuation is bound to ret. Perhaps all this is merely a C library function.

Multiple values breaks code such as once. Furthermore I don’t know how to fix that code in the new language.

Scheme language features that I need.