Дописи з тегом #interpreters
-
Чому стандартна бібліотека risp написана на risp, а не на Rust
Глибоке занурення в межу native/Lisp у risp — пласка таблиця std-only вбудованих функцій, числова вежа зі збереженням цілих, і чому map/filter/fold визначені в прелюдії risp, а не на Rust: нативна вбудована функція вищого порядку повторно входила б в обчислювач на стеку хоста й могла б переповнитися.
-
Лексична область видимості в Lisp на Rust: середовища, замикання та drop із двома шляхами
Глибоке занурення в модель областей видимості risp — ланцюжок Rc<RefCell<Environment>>, ітеративні lookup і set!, замикання, що захоплюють кадри за посиланням, та drop із швидким/повільним шляхом, що звільняє ланцюжок областей глибиною в мільйон без рекурсії та без виділення пам'яті на гарячому шляху.
-
Проєктування інтерпретатора Lisp на Rust без переповнень стеку
Глибоке занурення в ітеративне ядро risp: enum Value, написаний вручну ітеративний Drop та обчислювач CEK з явним стеком, які читають, друкують, порівнюють, звільняють і обчислюють структуру глибиною в мільйон без переповнення стеку Rust.
-
Макроси та quasiquote: код, що пише код у risp
Детальний розбір системи макросів risp на Rust: як defmacro, розгортання за вимогою, рушій quasiquote та gensym дають Lisp вирощувати керівні конструкції на кшталт while та unless, які не виразити жодною функцією.