Repository navigation
QLISP v2.7.7 — part-time HLO: программа владеет своими артефактами
QLISP 2.7.7 — Release Notes
Тег: v2.7.7 · Платформы: Linux x86_64, Windows x86_64
Бинарники — сборка CI, коммит 3ae37e1 ветки main компиляторного репозитория (CI run 36772578415, зелёный). Состав: qlisp, qlisp-lsp, qvalent.
| Файл | Платформа | Состав |
|---|---|---|
qlisp-linux-x86_64 |
Linux x86_64 | REPL/интерпретатор + JIT |
qlisp-lsp-linux-x86_64 |
Linux x86_64 | Language Server |
qvalent-linux-x86_64 |
Linux x86_64 | пакетный менеджер |
qlisp-windows-x86_64.zip |
Windows x86_64 | qlisp.exe, qlisp-lsp.exe, qvalent.exe |
SHA256SUMS — контрольные суммы всех файлов.
Что нового — part-time HLO: программа владеет своими артефактами (FIXED)
Тестер (долгие компилирующие сессии): «утечка за вызов» — каждый HLO-COMPILE клонировал константы графа в бессмертный stable (даже при cache-hit), оставлял introspection-клон без владельца и никогда не освобождал W^X-страницу (ASan: 1120/752/1872 Б на тест, все из HloGraph::clone_into).
Причина: одноразовые артефакты компиляции жили в stable без владельца и без события смерти.
- HloProgram владеет артефактами: storage-scope с sealed-константами (
seal_graph_constants), introspection-клон графа, W^X-страница (page_free). - Якорь смерти =
track_dtorв scratch на эпохе компиляции: программа умирает на первом restore, пересекающем эпоху (итерация объемлющегоwhileили граница формы) — как любой scratch-объект. - Явное сохранение = привязка имени:
clone_toв stable (defvar/setqчерез promote) помечает payload rooted — программа бессмертна до переписи. Спец-паттерн(setq *x* (HLO-COMPILE ...))иdefvar— явная просьба о бессмертии, всё прочее умирает само. - Кэш стенсила — non-owning дедупликация: drop стирает запись перед освобождением, мёртвая программа не возвращается из кэша; rooted-программы дедуплицируются между собой.
GRAPH-FROM-DATA: константы загруженного графа тоже seal-ятся в storage программы — закрыт кросс-форменный UAF.
Production-check (RSS): discard-loop ×20: 22548 → 3088 КБ (остаток — разовая high-water, наклон нулевой). distinct-loop ×20: 20632 → 20 КБ (идеально плоско). Корпус зелёный; ASan: утечки clone_into исчезли (memory_soak/arena_stress: 0).