(これからLISPやSchemeの処理系作ろうと思ってる人向け)
・gcがらみのバグ対策
基本的な事かもしれないですが、良く引っかったバグなので。
CなどのLISP実装言語側でcons演算+セル生成を何も考えずに行なおうとすると、
その処理が終了するまでに空きセルが尽きてしまい、gcが発動してしまう
恐れがあります。その事態が起きると、操作中のconsの値が変化している、
もしくは無効になっている可能性があるので、あらかじめ処理中に生成する
consの数を数えておいて、空きセルがそれよりも少なかったら処理を行なう
前にgcを強制起動させた方がいいです。この方法は必要セルを数える事で、
2重管理になってしまい面倒ですが、プログラムが複雑になる事がありません。
または、ポインタのポインタを使い、演算を行なうconsを参照している
ポインタを全てフックしておいて、gc時に一緒に値を書き換えます。
余計なロジックが入りますが、一度に生成するconsがそんなに無いならば
こちらが楽かもしれません。
また当然ですが、gc起動後にセルが必要量存在していなければこの対策を
行なっても意味が無いので、満たなかったら新たにメモリを割り当てます。
・・というわけで演算中のgc起動は、不具合の元になるのでご注意を。