Команды Core IR из этого руководства предоставляет Native CLI. Core IR представляет собой промежуточное представление с разрешёнными ссылками имён. Оно записывает, на какую переменную ссылается каждое имя, до выполнения программы.
Сохраните исходник
Сохраните всю программу в heading-core.lspx.
(define (место-заголовка осталось-строк)
(if (< осталось-строк 2) 'следующая-страница 'оставить))
(место-заголовка input)Правило возвращает следующая-страница, если под заголовком осталось меньше двух строк, и оставить в остальных случаях. Вызывающая сторона передаёт число строк через input. Сборка Core IR записывает это требование без выполнения правила.
Соберите файл Core IR
lispex core-ir build --source heading-core.lspx --out heading-core.lpxirКоманда создаёт heading-core.lpxir, печатает JSON-отчёт сборки и завершается с кодом 0.
Файл по указанному пути должен отсутствовать.
Если такой файл уже есть, команда завершается с кодом 3 и не изменяет его.
Ниже приведены отдельные поля отчёта.
{
"authority": "integrity-only",
"core_ir_build": "lispex.core-ir-build/v1",
"execution": "not-run"
}Отчёт также содержит идентификаторы исходника и файла, профиль языка и размеры таблиц.
Компилятор сохраняет файл lispex.core-ir/v1 отдельно от отчёта.
Прочитайте имена и позиции в исходнике
lispex core-ir inspect --ir heading-core.lpxirКоманда завершается с кодом 0 и печатает отчёт просмотра. В этом фрагменте показаны имена и два выражения верхнего уровня.
{
"execution": "not-run",
"globals": [
{
"id": 0,
"initial_primitive": {
"id": 6,
"name": "<"
},
"name": "<"
},
{
"id": 1,
"initial_primitive": null,
"name": "input"
},
{
"id": 2,
"initial_primitive": null,
"name": "место-заголовка"
}
],
"requirements": [
"explicit-input"
],
"roots": [
{
"column": 1,
"index": 0,
"line": 1,
"normalized_core": "(define место-заголовка (lambda (осталось-строк) (if (< осталось-строк (quote 2)) (quote следующая-страница) (quote оставить))))"
},
{
"column": 1,
"index": 1,
"line": 4,
"normalized_core": "(место-заголовка input)"
}
]
}место-заголовка ссылается на глобальную ячейку 2. Ячейка < начинается со встроенной процедуры ID 6. input использует ячейку 1 и добавляет требование explicit-input.
Первое выражение превращается в определение с lambda.
Второе остаётся вызовом (место-заголовка input) в строке 4, столбце 1.
Корень обозначает одно выражение верхнего уровня.
Отчёт насчитывает 2 корня, 12 узлов выражений, 1 привязку параметра и 1 функцию.
Полный отчёт содержит artifact.source_sha256 и artifact.core_ir_sha256.
Они идентифицируют точные байты исходника и весь файл Core IR.
Изменение пробелов в исходнике может изменить идентификаторы, даже если результат правила остался прежним.
Проверьте сохранённый файл
lispex core-ir validate --ir heading-core.lpxirКоманда завершается с кодом 0. Отчёт содержит следующие поля.
{
"core_ir_validation": "lispex.core-ir-validation/v1",
"valid": true
}Проверка охватывает пределы размера и количества, структуру JSON и идентификаторы схемы, профиля и реестра встроенных процедур. Также проверяются позиции в исходнике, ссылки и позиции хвостовых вызовов. Проверяются и захваты, то есть внешние ячейки переменных, которые использует функция. Считыватель принимает только единственное установленное байтовое представление. Файл с изменённым порядком полей или пробелами отклоняется.
Передайте файл компилятору
Передайте heading-core.lpxir команде bytecode build.
Руководство по байткоду продолжает тот же пример, добавляет request.lspx и запускает результат.
| Объект | Назначение |
|---|---|
heading-core.lspx | Исходная программа |
heading-core.lpxir | Программа с разрешёнными ссылками для компилятора |
| Отчёты сборки, просмотра и проверки | JSON для чтения человеком и средствами автоматизации |
heading-core.lpxbc | Скомпилированные инструкции для виртуальной машины |
Для стандартных потоков укажите --source - или --out -.
С --out - stdout содержит только байты Core IR, а диагностика идёт в stderr.
Сохраняйте эти байты напрямую, без добавления отчёта и изменения кодировки.
Связанные форматы
Native также может создать из Core IR граф Meaning Graph. Справочник Core IR описывает команды и форматы v0 и v1.
Ваучер Лиспекса создаёт собственный скомпилированный контейнер из точного исходника. Проверка Ваучера также использует аутентификацию издателя, политику получателя, точный ввод и текущий результат выполнения. Правила исходника и команды для этого контейнера описаны в справочнике байткода.