Песочница

Текущая и отложенная область

Профиль намеренно меньше полного R7RS-small и открыто разделяет границы Rust 205/205, LIL 205/205 и LIT 84/205.

Текущий язык

Лиспекс предоставляет детерминированные числа, изменение лексических связываний, правильные хвостовые вызовы, несколько значений, ошибки и 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/205121 неподдерживаемая строка 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; ограниченный вход исходника в VouchOCR, камера, допустимые преобразования, секретность, подпись, происхождение и полномочия
открытые идентификаторы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, тесты, квитанции и документацию.

Куда дальше

Точный список процедур находится в указателе, а измеренная граница каждого исполнителя — в матрице наблюдений.

Указатель процедур · Матрица наблюдений