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