Песочница

Контракт Core IR

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

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

ОсьИдентификатор
схема артефакта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, а не независимая реализация и не доказательство эквивалентности.

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

Артефакт представляет собой канонический 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 содержит разделённый доменом идентификатор полного канонического артефакта. Их нельзя заменять обычным хэшем файла или хэшем удобного для чтения inspection JSON.

Отчёты команд 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 и Песочница не предоставляют ни считыватель Core IR, ни команду, которая его заменяла бы.

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

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

Граница полномочий

Core IR остаётся материалом компиляции класса integrity-only, то есть говорит лишь о целости байтов и ни о чём сверх этого. Канонические байты, успешное чтение, inspection-отчёт или совпавший хэш не устанавливают авторство, происхождение, доверие, свежесть, намерение запроса, выполнение, правильность или разрешение решения. Команды Core IR не входят в Ваучер, а их отчёты не могут стать свидетельством Ваучера или полномочием проверки допуска.

Куда дальше

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

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