99 строк C — и у вас работающий интерпретатор Lisp со сборщиком мусора.
Роберт ван Энгелен создал TinyLisp, в котором уместились:
- 21 встроенный примитив;
- лексическая область видимости;
- числа с плавающей точкой двойной точности;
- простой сборщик мусора;
- REPL — вводите выражение и сразу получаете результат.
Компактность достигается за счёт NaN boxing: числа и другие значения упаковываются в одно представление с использованием особенностей формата floating point.
Есть и версия для карманного компьютера Sharp PC-G850VS. Она компилируется прямо на устройстве его встроенным компилятором C и использует BCD boxing.
Самое полезное — вместе с исходниками автор опубликовал подробную статью с разбором реализации и примерами расширения языка. В репозитории также есть более читаемая версия с комментариями и варианты с оптимизацией хвостовых вызовов.
Хороший проект, чтобы разобраться, как устроен интерпретатор: от чтения выражений до вычисления и управления памятью.
https://github.com/Robert-van-Engelen/tinylisp