Repository navigation
QLISP v2.7.4 — память: эвикция пула, cons-блоки, guard глубины
QLISP 2.7.4 — Release Notes
Тег: v2.7.4 · Платформы: Linux x86_64, Windows x86_64
Бинарники — сборка CI (Linux: GCC/Ninja/OpenBLAS/OpenMP; Windows: MSYS2 MinGW64), коммит 5e054ca ветки main компиляторного репозитория (CI run 36332096385, зелёный). Состав: qlisp (REPL/интерпретатор + JIT), 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 — контрольные суммы всех файлов.
Что нового — память под давлением
Пул тензоров: эвикция
- Дефолтный лимит пула буферов 1 ГБ → 256 МБ; при промахе точного размера на 3/4 лимита эвиктируется крупнейшая корзина free-list. Production-check: 120k тензоров разных размеров — плато RSS 1.13 ГБ (при нулевых живых данных) → пик 52 МБ.
ConsCellPool: мелкие блоки
- Блоки 1 М ячеек (24 МБ) → 64k ячеек (1.5 МБ) — ретеншн пика ограничен, ОС отдаёт блоки естественно. 20k cons setq: пик 34.7 МБ (без регресса против 2.7.3).
Guard глубины рекурсии
- Лимит 10 000 eval-кадров (~3 400 QLisp-кадров; 8 МБ стек физически падает на ~12 000). Превышение — ловимая ошибка:
eval: recursion depth exceeded 10000 (raise the limit with EVAL-MAX-DEPTH). (EVAL-MAX-DEPTH n)поднимает лимит и возвращает старый,(EVAL-MAX-DEPTH)читает; счётчик RAII — после пойманной ошибки eval полностью жив. Windows-бинарник резервирует 8 МБ стека (-Wl,--stack=0x800000); безопасный потолок ручного лимита ~11 000.
Итеративное ядро
equalпо cdr-цепочкам и stdliblength/reverse/member/last/butlast/nthпереписаны итеративно — рекурсивный length сжигал кадр на элемент и упирался бы в guard на списках ~3.5k+.
Попутно исправлено
- Вложенный
whileстирал записи loop_setq_ внешних циклов (zombie-nullptr → SIGSEGV);finish_loop_bindings(base)продвигает и обрезает только свои записи. - Sandbox alloc-бюджет теперь считает кумулятивно (
cells_allocated_total()): не откатывается restore'омwhile, циклы ловятся.
Тесты: 67 сюит зелёных; новый tests/memory_pools.qlsp (7). Регресс 75/75.