Skip to content

QLISP v2.7.0 — JIT copy-and-patch, образы, стенсил-эмиттер (без LLVM)

Choose a tag to compare

@FQingLars FQingLars released this 22 Sep 19:41
· 7 commits to main since this release

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 и образы обновляются отдельно.