Дописи з тегом #rust
-
Загартовуємо 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: нативна вбудована функція вищого порядку повторно входила б в обчислювач на стеку хоста й могла б переповнитися.
-
Чому risp, Lisp із нативною компіляцією, програє CPython на map/fold: алокації, а не кодогенерація
risp — Rust Lisp без залежностей — обходить CPython у 9–40× на цілих, але програє 3× на map+fold: ~400 000 алокацій cons-комірок, не диспетчеризація.
-
Лексична область видимості в 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, і яка дисципліна диференційного тестування тримає системний код, написаний ШІ, чесним.
-
Додаємо Cranelift JIT, який працює у 10–23× швидше за CPython
Заглиблення у вмикуваний Cranelift JIT для risp на Rust: перевірник типів за принципом «відхиляй, не вгадуй», зведення if/cond/let до Cranelift IR, вбудоване виявлення знакового переповнення, хвостові виклики як зворотні ребра циклу та охоронець деоптимізації, що випереджає CPython у 10–42 рази.
-
Як байткодова VM на Rust обігнала CPython 3.14
Одинадцять кроків за даними профілювання на справжньому Rust: лексично-адресовані локальні змінні, розпакована арифметика i64, небезпечний гарячий цикл і самохвостові виклики на місці — від 1682 мс до 95 мс на fib(30) для деревообхідного Lisp, з обгоном CPython на кожному циклі.
-
Проєктування інтерпретатора Lisp на Rust без переповнень стеку
Глибоке занурення в ітеративне ядро risp: enum Value, написаний вручну ітеративний Drop та обчислювач CEK з явним стеком, які читають, друкують, порівнюють, звільняють і обчислюють структуру глибиною в мільйон без переповнення стеку Rust.