In Pika:
- Forgetting an UNGCPRO corrupts the GC's data structures, and may
fail only intermittently. Irregular exits (return; goto; break;
continue) require attention. longjmp is even harder.
- Functions may only return Scheme values by reference; they may not
provide them as their (syntactic) return values. Instead of writing
"f (g (x))", you must write:
g (&frame.x, &frame.temp);
f (&frame.temp, &frame.temp2);
In other words, you must write your code as linear series of
operations which work by side-effects.
- Since the API functions all expect pointers to t_scm_word values,
this discourages people from passing them around directly, but it
can still be done --- e.g. "frame.x = frame.y;" --- and doing so
will usually work. But doing so is a bug.
- Variable declarations are cluttered with enclosing structs and GCPRO
/ UNGCPRO calls.