Дописи з тегом #lisp
-
Зливаємо конвеєр risp, щоб обігнати CPython: вбити 400 000 виділень виявилося замало
У risp, Lisp на Rust без залежностей, злиття map/filter/fold скорочує 400 000 виділень до O(1), але CPython обганяє лише мономорфний цикл i64: 4 мс проти 24 мс.
-
Загартовуємо HTTP-стек risp: TLS за прапорцем, try/catch як вбудована функція на 30 рядків
Як risp — Lisp на Rust без залежностей — отримав HTTP: TLS за прапорцем Cargo, try/catch вбудована на 30 рядків і квадратичний цикл читання замінено лінійним.
-
HTTP/1.1 клієнт і сервер на risp — Lisp на Rust без жодної залежності
risp — Lisp на Rust без жодних залежностей, не туторіал 2019 — отримує HTTP/1.1 клієнт і сервер, написаний майже повністю на Lisp, без зовнішніх крейтів.
-
Вивчай Rust, читаючи risp — справжній інтерпретатор Lisp (не черговий іграшковий проєкт)
risp, Lisp-інтерпретатор Rust без залежностей, постачає learn/: порядок читання (error.rs→eval.rs) і 19 уроків, кожен прив'язаний до реального файлу та рядка.
-
Чому стандартна бібліотека 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: від тексту до дерева Value
Глибоке занурення в читач risp — Lisp-агностичний токенізатор, ітеративний парсер з явним стеком, який не може переповнитися на глибокій вкладеності, розцукрування reader-макросів, обробка крапкових пар та класифікатор атомів, що відмовляється від неоднозначних чисел замість того, щоб вгадувати.
-
Як я писав інтерпретатор Lisp на Rust разом із Claude Code
Як я побудував risp — Lisp на Rust без жодних залежностей, з деревообхідним інтерпретатором, байткодовою віртуальною машиною та Cranelift JIT — у парі з Claude Code, і яка дисципліна диференційного тестування тримає системний код, написаний ШІ, чесним.
-
Проєктування інтерпретатора Lisp на Rust без переповнень стеку
Глибоке занурення в ітеративне ядро risp: enum Value, написаний вручну ітеративний Drop та обчислювач CEK з явним стеком, які читають, друкують, порівнюють, звільняють і обчислюють структуру глибиною в мільйон без переповнення стеку Rust.
-
Макроси та quasiquote: код, що пише код у risp
Детальний розбір системи макросів risp на Rust: як defmacro, розгортання за вимогою, рушій quasiquote та gensym дають Lisp вирощувати керівні конструкції на кшталт while та unless, які не виразити жодною функцією.