Песочница

Контракт Core IR

Канонический контракт lispex.core-ir/v1 записывает разрешённый смысл всего текущего профиля в одном строго проверяемом представлении объёмом до 16 МиБ.

Фиксированные идентификаторы

ОсьИдентификатор
схема артефактаlispex.core-ir/v1
семантический профильlispex-profile-1.5
реестр примитивовlispex.primitive-registry/v1
модель стоимостиlispex.core-ir-cost/v1
семейство производителяlispex-rust-core-ir/v1
домен хэша артефактаlispex/core-ir-hash/v1
домен хэша реестраlispex/primitive-registry-hash/v1

Реестр назначает каждому из 205 исполняемых встроенных имён стабильный числовой ID. Скрытый intrinsic нормализатора ссылается прямо на ID примитива. Видимый в исходнике builtin остаётся обычной изменяемой глобальной ячейкой, изначально содержащей этот ID, поэтому затенение и переопределение верхнего уровня сохраняют нынешний смысл.

От исходника к разрешённому смыслу

точные байты исходника
  → reader
  → гигиенически нормализованный Core
  → разрешение bindings и closures
  → канонические байты Core IR

Артефакт удаляет сокращённую запись и записывает перечисленное ниже.

  • идентификаторы лексических и глобальных ячеек вместо поиска по имени
  • фиксированные и rest-параметры, let, letrec, внутренние определения и forwarding-ячейки, активируемые динамическим определением
  • общие изменяемые захваты замыканий, включая транзитивные
  • обычные и хвостовые вызовы без повторного вывода хвостовой позиции
  • контексты нуля, одного и нескольких значений
  • границы guard, исключений, продолжений и dynamic-wind
  • канонические literal datum и позиции исходника с единицы
  • явные требования к входам среды
  • идентификаторы реестра примитивов и модели стоимости

Аудиторская проекция точно восстанавливает байты нормализованного Canonical Core до lowering и записывает сохранение внутри линии Rust. Отдельные backend добавляют собственные идентификаторы реализации и наблюдения исполнения.

Одно допустимое кодирование

Артефакт представляет собой канонический UTF-8 JSON с фиксированным порядком полей, тегированными массивами, минимальными неотрицательными десятичными числами, точными строками Unicode и ровно одним завершающим LF. Globals, requirements, captures, bindings и functions подчиняются детерминированному порядку и непрерывности.

Строгий считыватель отклоняет повторные, отсутствующие, неожиданные или переставленные поля. Он также отклоняет альтернативную запись чисел и datum, неизвестные теги и ID, повреждённые ссылки, захваты и хвостовые позиции, неверные координаты, лишние байты и любой артефакт, который не перекодируется побайтно.

Пределы проверяются до чтения таблиц и выделения памяти.

ПределМаксимум
входной исходник4 MiB
артефакт Core IR16 MiB
узлы выражений100 000
bindings100 000
functions100 000
globals100 000
структурная глубина1 024

Поле source_sha256 содержит существующий разделённый доменом идентификатор точных байтов исходника. Поле core_ir_sha256 содержит разделённый доменом идентификатор полного канонического артефакта. Потребители используют эти контрактные поля для идентификации исходника и артефакта.

Отчёты команд Native

  • core-ir build при записи именованного артефакта выдаёт lispex.core-ir-build/v1, а с --out - выдаются только байты артефакта.
  • core-ir validate после строгого чтения и повторного кодирования выдаёт lispex.core-ir-validation/v1.
  • core-ir inspect выдаёт lispex.core-ir-inspection/v1 с идентификаторами, счётчиками, globals, requirements и читаемыми нормализованными корнями.
  • Ошибка использования завершается кодом 2, ошибка исходника или проверки завершается кодом 1, а достижение объявленного предела ресурсов либо ошибка ввода-вывода и публикации завершается кодом 3.

Этими тремя командами артефактов владеет Native. npm, открытый WebAssembly и Песочница владеют выполнением исходника через эталонный runtime.

Сосуществование с Meaning Graph

Core IR владеет разрешением имён, захватами замыканий, хвостовыми позициями и нормализованным полным профилем. lower без параметра версии и все вызовы diff-receipt сохраняют контракт v0. Явный lower --graph-version v1 проецирует проверенный Core IR в csk.meaning-graph/v1, eval-graph выбирает путь по тегу графа, а meaning-diff пишет отдельный отчёт Meaning. В v1.19 этими командами владеет Native. Ваучер повторно получает Core IR из точного исходника, прошедшего аутентификацию.

Роль продукта

Core IR является материалом компиляции класса integrity-only. Канонические байты, строгое чтение, inspection и разделённый доменом идентификатор создают разрешённый артефакт для Meaning Graph, компиляции байткода, VM и связанного с исходником compiled-процесса Ваучера. Политика получателя и текущее повторное выполнение добавляют аутентификацию и контекст решения.

Куда дальше

Короткий процесс команд описан в руководстве, а места, где Лиспекс работает, сравниваются на странице сред выполнения.

Сборка и проверка Core IR · Среды выполнения и интерпретаторы

Контракт Core IR · Лиспекс