Skip to content

QLISP v2.8.0 — лесное правило бессмертной зоны, аудитор, интерактив

Choose a tag to compare

@FQingLars FQingLars released this 02 Oct 06:03
· 4 commits to main since this release

QLISP 2.8.0 — Release Notes

Тег: v2.8.0 · Платформы: Linux x86_64, Windows x86_64
Бинарники — сборка CI, коммит 7c9ec55 ветки main компиляторного репозитория (CI run 36871109705, зелёный). Состав: 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 — контрольные суммы всех файлов.

Что нового — якоря-владельцы, аудитор, интерактив (FIXED)

Лесное правило бессмертной зоны: бессмертная зона — несвязный лес, каждое имя якорит своё поддерево; перепись имени (defvar/setq глобала/defun/defclass) выпускает старое поддерево. Критичный порядок rebind (выведен ASan): take_anchors (снапшот) → anchor_subtree → release_anchors (снапшота) → release_shadowed_pairs → prepend; нарушение = UAF.

  • Release-on-rebind работает для тензоров (буфер в пул) и HLO-программ (cache-erase → page_free → delete graph/storage/prog). Тензоры леса несвязны (deep copy), HLOPROG-программы шарят payload ⇒ «якорное множество»: release, когда множество пусто. Tape-held тензоры: release откладывается до опустошения ленты (расписание, не отмена).
  • Аудитор контрактов смерти (Interpreter::audit_death_contracts, флаг QLISP_AUDIT=1, вызов на границе формы после seal ленты): фатальны «второе бессмертие» (rooted payload без якоря) и сирота реестра (якорь без живого биндинга). Корпус 82 скрипта под аудитом: 0 падений. CI: шаг leak_watch гоняет весь корпус под QLISP_AUDIT=1.
  • Интерактив: (clear sym...) / (drop-model m) — специальные формы (имена не вычисляются), отвязывают имена и выпускают payload'ы; (mem-report) — alist якорного реестра + rooted count + байты арен.
  • LOAD-IMAGE по лесному правилу: adopt_world_bindings применяет take → anchor → release к каждому image-биндингу (иначе якорь IMG-T-ONE оставался сиротой); part-time drop образ-программы отменяется на обеих аренах.

Замеры (RSS, наклон): rebind тензоров 512×512 ×20 → 0 КБ; rebind программ ×8 → 0 КБ; bind/clear циклы → 1024 КБ разогрева, наклон 0.