Текущий язык
Лиспекс предоставляет детерминированные числа, изменение лексических
связываний, правильные хвостовые вызовы, несколько значений, ошибки и guard,
одноразовый выход вверх, неизменяемые агрегаты, изменяемые векторы и
документированную библиотеку процедур.
Многоразовые продолжения и повторный вход, порты и общий I/O, трансцендентные функции, изменяемые пары, строки и байтовые векторы, полное Unicode-свёртывание регистра и пользовательские макросы находятся вне профиля. Наличие в другой реализации Scheme ничего не добавляет.
Реестр области
| Область | Сейчас | Отложено или исключено |
|---|---|---|
| управление | одноразовый выход вверх через call/cc, dynamic-wind, обработчики, guard | многоразовые продолжения и динамический повторный вход |
| числа | целые произвольной точности, сокращённые рациональные, конечные вещественные, точные целочисленные степень и корень | комплексные и платформенные трансцендентные функции |
| изменение | лексические ячейки и векторы | изменяемые пары, строки и байтовые векторы |
| эффекты | канонический вывод и явные границы вызова | порты, файлы, сеть, время и случайность |
| инструменты исходника | Native fmt с сохранением текста, тихая проверка, безопасная запись и делегирование редактора установленному CLI | форматирование npm/браузера, структурный перенос строк, LSP, автодополнение или диагностика |
| метапрограммирование | встроенная гигиеническая нормализация производных форм | пользовательские макросы и define-syntax |
| исполнители | Rust 205/205, LIL 205/205, LIT 84/205 | 121 неподдерживаемая строка LIT и неограниченное равенство всего языка |
| компилируемое выполнение | inspection канонического Core IR в Native, lispex.bytecode/v1, строгий verifier, явные Rust и точная установленная Topaz VM, а в macOS ARM64 — source-free correctness-first AOT-продукт через точный Topaz 5.11 и неперезаписываемая квитанция tree/Rust VM/Topaz VM/AOT; все маршруты явные и без fallback | полномочия из произвольного артефакта или отчёта сравнения, compiled Vouch через Topaz, VM/AOT в npm и браузере, доказательство независимой эквивалентности, прямой WASM, кросс-компиляция, обещания оптимизации или стабильного ABI, новый синтаксис и неявные возможности |
| точные изображения | создание, проверка, восстановление и явный запуск PNG/ZIP общим Rust; ограниченный вход исходника в Vouch | OCR, камера, допустимые преобразования, секретность, подпись, происхождение и полномочия |
| открытые идентификаторы | key-id, engine-id, source-id, input-id в Native и npm | происхождение, доверие, одобрение входа, аутентификация, свежесть и полномочия |
| политика | создание и проверка политики v1 из проверенных открытого ключа, хэша движка и точного исходника | закрытый ключ, автоматическая регистрация, доверие из артефакта и корректность политики |
| разрешение исходника | точный список исходников для каждого ключа в политике v1 | одобрение входа или запроса, корректность правила, защита от повторов и внешнее действие |
| переносимый вход | канонический пакет envelope/source/input до 16 МиБ и исходный режим | языковая возможность, новый знаменатель квитанции, свежесть или полномочия |
Почему соседние продукты не расширяют язык
Core IR и байткод разрешают и компилируют существующий
lispex-profile-1.5. Rust VM выполняет этот профиль с другой явной структурой
управления, но не добавляет синтаксис, datum, примитивы, файлы, сеть, часы или
случайность. Tree и VM разделяют Rust-значения и листья примитивов, поэтому VM
не становится новым независимым семейством.
Topaz VM выполняет тот же проверенный байткод как точный отдельно установленный продукт. Лиспекс проверяет identity продукта, запроса и результата, полноразрядные счётчики ресурсов и нулевой fallback, но этот маршрут не входит в Vouch и не доказывает независимую эквивалентность всего языка.
LIL поддерживает все 205 строк текущих возможностей; LIT поддерживает 84 и отвергает 121. Допуск бэкенда не скрывает эти числа и не переопределяет профиль Rust. Историческая квитанция трёх семейств фиксирует лишь 59 общих совпадений на своих 144 случаях.
Сейчас LIL поддерживает всё семейство составных селекторов пар от caar до
cddddr. Буквы читаются справа налево: (caddr x) равнозначно
(car (cdr (cdr x))). Это расширяет покрытие LIL, но не сам языковой профиль.
Внутри LIL также составлены семь небольших процедур: abs, square, zero?,
positive?, negative?, boolean=? и symbol=?. Они повторно используют
операции текущего профиля, не добавляя возможностей host или строк в
знаменатель языка.
Текущая граница LIL также включает предикаты конечных вещественных complex?,
rational? и real?, структурный != и семейство поиска
memv/assoc/assq/assv. Правила сравнения не смешиваются: assoc
использует структурное равенство, остальные три поиска — текущую идентичность
eq?/eqv?.
В LIL также доступны чувствительные к регистру порядковые сравнения:
char<?, char<=?, char>?, char>=?, string<?, string<=?,
string>? и string>=?. Они раскрывают существующий порядок Unicode scalar,
не добавляя case folding или locale-aware collation.
В текущую границу LIL также входят list-copy, list-ref/nth, list-tail,
make-list, make-string, string->vector и vector->string. Копия списка
получает новый каркас пар, хвост сохраняет общую структуру с исходным списком,
значения заполнения по умолчанию детерминированы, а срезы строк и векторов
считают символы Unicode, не байты UTF-8. Это реализация существующих строк
профиля, а не новая семантика языка.
Классификация, преобразование и порядок без учёта регистра для символов и
строк также входят в текущую границу LIL через объявленное Unicode-ядро host:
char-ci<? и семейство string-ci<?, char-whitespace?, char-foldcase,
string-upcase, string-downcase и string-foldcase.
Для символа применяется simple mapping с одним результатом, для строки —
full mapping, способный менять длину. foldcase v1 остаётся документированным
приближением через lowercase, а не полной Unicode CaseFolding. Зависимость от
ядра host не является независимой реализацией или скрытым fallback.
В текущую границу LIL также входят floor, ceiling, round, truncate,
exact, inexact, inexact->exact, exact->inexact, even?, odd?,
min и max. Округление сохраняет exactness, а round направляет точную
половину к ближайшему чётному. (exact 0.5) восстанавливает точное двоичное
dyadic-значение 1/2, а не разбирает десятичный текст. Предикаты чётности
требуют целое; min и max точно сравнивают смешанную числовую башню и
возвращают inexact-результат при наличии любого inexact-входа. Проверка
аргументов и обе свёртки принадлежат LIL, скалярная арифметика — объявленному
числовому ядру host.
LIL также реализует modulo, quotient, remainder, floor-quotient,
floor-remainder, floor/, truncate-quotient, truncate-remainder,
truncate/, gcd и lcm через точные целочисленные промежуточные значения
и опубликованное правило contagion для inexact. Семейства floor и truncate
сохраняют разные правила знака, а формы со слешем возвращают два значения.
Детерминированный expt ограничен точным целым показателем;
exact-integer-sqrt возвращает корень и остаток. Только эти две расширенные
операции используют объявленное числовое ядро host; общее трансцендентное
возведение в степень остаётся вне текущего языкового профиля.
LIL теперь сам выполняет все двенадцать строк процедур высшего порядка для
коллекций: all?, any?, filter, fold-left, fold-right, for-each,
map, reduce, string-for-each, string-map, vector-for-each и
vector-map. Явные кадры продолжения сохраняют порядок callback, короткое
замыкание, число значений, ошибки и выходы без callback среды. Строки и
векторы копируются до обхода.
LIL также сам выполняет display, write, newline и println через
ограниченный private effect sink. Явный вывод и автопечать корневых результатов
сохраняют точный общий порядок stdout, но завершённые корневые значения
остаются отдельной проекцией квитанции. Процедуры вывода возвращают ноль
значений, а последующая ошибка не стирает уже записанные байты.
LIL также выполняет совместимые написания %, list-first и list-rest.
В новом коде предпочтительны modulo, first и rest. Только вызов
настоящего deprecated-примитива записывает W330 или W331 — один раз на каждое
место вызова в порядке первого появления. Перекрывающее связывание не
предупреждает, а предупреждение сохраняется, если каноническая операция затем
завершается ошибкой. Канал предупреждений отделён от stdout, значений и ошибок.
Точное изображение — обратимое представление байтов исходника, а не новый тип данных, примитив, синтаксис чтения или компилятор. При входе изображения в Vouch меняется только способ предоставления исходника; политика, привязка запроса, повторное выполнение и gate остаются отдельными.
Три пометки не дают смешать границы
profile-requiredпомечает все 205 возможностей текущего знаменателя языка. Фактическая поддержка каждого интерпретатора измеряется отдельно.host-adapter-onlyотносится к файлам, сети, часам, случайности, процессам и окружению. Host может сделать это вокруг вызова, но не выдаёт как фоновую возможность гостевого языка.future-profileотносится к рассмотренным, но отсутствующим сейчас семантическим функциям: многоразовому повторному входу, гостевому вводу, трансцендентным функциям, дополнительным мутациям, кодекам UTF-8 и точному Unicode folding.
Это решения о границе, а не оправдание пробела реализации и не обещание будущего выпуска.
Частая ошибка
Отложенная возможность или поведение другого Scheme не становится частью Лиспекса без явного семантического решения. Настоящее изменение обязано вместе обновить спецификацию, Rust, тесты, квитанции и документацию.
Куда дальше
Точный список процедур находится в указателе, а измеренная граница каждого исполнителя — в матрице наблюдений.