QLISP v2.7.0 — JIT copy-and-patch, образы, стенсил-эмиттер (без LLVM)
QLISP 2.7.0 — Release Notes (серия v2.4.0 → v2.7.0)
Тег: v2.7.0 · Платформы: Linux x86_64, Windows x86_64
Бинарники — сборка CI (Linux: GCC/Ninja/OpenBLAS/OpenMP; Windows: MSYS2 MinGW64), коммит c9033db ветки main (CI run 35773244751 — единственный полностью зелёный после серии слайсов; включает v2.7.0 single-emitter и mingw-фиксы). Состав: qlisp (REPL/интерпретатор + JIT), qlisp-lsp (Language Server), qvalent (пакетный менеджер). Цель qlispc удалена (v2.4.0).
| Файл | Платформа | Состав |
|---|---|---|
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 — контрольные суммы всех файлов. Рантайм без LLVM: ldd qlisp — только OpenBLAS, GOMP, libstdc++ (зависимость libLLVM.so.22.1 из релизов 2.3.x больше не нужна).
Что нового
v2.4.0 — инвариант одной формы
- Легаси AOT-путь (
qlispc, whole-program LLVM → ELF) и мирqvalueзахоронены: у программы ровно одно представление — S-выражение. Нативный код отныне — выбрасываемый кэш, выводимый из S-выражений, а не вторая форма программы. Цельqlispcудалена из сборки.
v2.5.0–v2.5.5 — JIT copy-and-patch
- Вертикальное ядро (v2.5.0):
(JIT f)компилирует тело замыкания в RX-страницу напрямую из S-выражения (без промежуточного IR);(UNJIT f),(DISCARD-JIT),(JIT-STALE-P f),(JIT-SIG f); новый тегJITPROGс master-замыканием. Контракт звукности прямо в коде: «DISCARD-JIT: drop every native page. Behavior must not change». - Макро-инвалидация (v2.5.1): переопределение
defmacroинвалидирует JIT-страницы; fixes байтов стенсилов. - Счётчик вызовов и авторекомпиляция устаревших обёрток (v2.5.2).
- Типизированные слоты и unboxed скалярные операции (v2.5.3) + parity-тесты (section K) и точный int64
prim_sub. - while / setq над локальными слотами (v2.5.4).
- Специализация по наблюдаемым типам параметров (v2.5.5).
v2.6.0 — образы: мир как данные
(SAVE-IMAGE path)/(LOAD-IMAGE path): весь S-мир (глобальные биндинги, замыкания с общими захватами, макросы, master-копии JIT, тензоры, инстансы, классы, plist) сериализуется в один файл.qimg(магияQLSI: S-манифест + бинарные тензорные блобы через QSRD). Нативное состояние (JIT-страницы, HLO .so, счётчики вызовов, наблюдения типов) не сериализуется — восстанавливается лениво после загрузки (heal ≤ 64 вызовов).
v2.6.1–v2.6.3 — стенсилы HLO
- Element-wise AVX2-стенсилы (v2.6.1), range-фасад + range-кёрнелы (v2.6.2),
trefпадает громко на не-fixnum индексе (v2.6.3).
v2.7.0 — single stencil emitter
- LLVM-путь codegen удалён полностью: язык и HLO-кёрнелы компилируются единственным стенсил-эмиттером.
ARCHITECTURE.mdи CI синхронизированы.
v2.7.1 (HEAD c9033db) — mingw portability
- Коллизия enum OUT/CONST устранена, guard BLAS-линковки и native DOT — первый полностью зелёный CI после серии слайсов.
Лицензия
Компилятор QLISP переехал с MIT на GPLv3 (LICENSE.md); книга — MIT.
Проверка релиза (на выложенных бинарях)
- Smoke:
(+ 1 2)→ 3;EVAL,FUNCTION-BODYвозвращают исходные S-выражения. - JIT:
(JIT sq)→(sq 7)= 49; после(DISCARD-JIT)— снова 49 (поведение не меняется). - Образы:
(SAVE-IMAGE)→ мутация →(LOAD-IMAGE)восстанавливает значения. - Полный сюит
tests/зелёный в CI (run 35773244751).
Книга
Книга этого репозитория описывает архитектуру v2.3.x (в т.ч. гл. 19 — прежний in-process LLD-пайплайн). Главы про JIT и образы обновляются отдельно.