Песочница

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

Профиль намеренно меньше полного 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, автодополнение или диагностика
инструменты помощникаNative local-stdio lispex mcp serve с точным справочником, ограниченным по размеру и времени авторским запуском доверенного исходника в Rust tree, каталогом диагностики и фиксированными сводными проверками tree/Rust, Rust/Топаза или всех четырёх маршрутовsandbox для враждебного исходника, детерминированный счётчик всей работы и логических выделений, переносимая квитанция тайм-аута, удалённый транспорт, файлы и workspace, произвольное или частичное сравнение, поиск маршрутов, запасной путь, выбор ответа, хранение исходника, MCP в npm/браузере и полномочия Ваучера
вычисление правил в фиксированных пределахNative lispex embed сохраняет точный restricted component, а явный lispex embed full и второй точный component WebAssembly без imports покрывают весь lispex-profile-1.5. Оба разделяют лимиты preparation и evaluation, создают fresh instance и назначают portable core только допустимым детерминированным исходам или отказам запросанеявный выбор full profile, переименование profile, запасной путь через tree/маршруты/MCP, host capability, удалённый транспорт, embedding в браузере/npm, pooling экземпляров, изоляция процесса, сокрытие времени/кэша/микроархитектуры, аутентификация издателя, Ваучер, защита от replay или полномочие внешнего действия
метапрограммированиевстроенная гигиеническая нормализация производных формпользовательские макросы и define-syntax
исполнителиRust 205/205, LIL 205/205, LIT 84/205121 неподдерживаемая строка LIT и неограниченное равенство всего языка
компилируемое выполнениеinspection Core IR в его единственной закреплённой форме в Native, lispex.bytecode/v1, строгий verifier, явные Rust и точная установленная VM Топаза, а в macOS ARM64 ещё и source-free correctness-first AOT-продукт через точный Топаз 5.11 и неперезаписываемая квитанция tree/Rust VM/VM Топаза/AOT. Все маршруты явные и без перехода на запасной путьполномочия из произвольного артефакта или отчёта сравнения, скомпилированный путь Ваучера через Топаз, VM/AOT в npm и браузере, доказательство того, что две реализации значат одно и то же, прямой WebAssembly, кросс-компиляция, обещания оптимизации или стабильного соглашения о вызовах, новый синтаксис и неявные возможности
установка маршрутаNative проверяет переданные точные локальные каталог и stored-ZIP либо получает одну точную target из встроенного официального каталога, создавая новый lispex.route-installation/v1 без пути и закрытый корень продуктапроизвольные URL или каталоги при fetch, перенаправления, повторы, регистрация, автоматический поиск или выбор, запасной путь, произвольный ZIP, заявление новой target только из упаковки или полномочия Ваучера
точные изображениясоздание, проверка, восстановление и явный запуск PNG/ZIP общим Rust, а также ограниченный по размеру вход исходника в ВаучерOCR, камера, допустимые преобразования, секретность, подпись, происхождение и полномочия
открытые идентификаторыkey-id, engine-id, source-id, input-id в Native и npmпроисхождение, доверие, одобрение входа, аутентификация, свежесть и полномочия
политикасоздание и проверка политики v1 из проверенных открытого ключа, точного хэша движка и точного исходниказакрытый ключ, автоматическая регистрация, доверие из артефакта и корректность политики
разрешение исходникаточный список исходников для каждого ключа в политике v1одобрение входа или запроса, корректность правила, защита от повторов и внешнее действие
переносимый входпакет envelope, source и input до 16 МиБ в единственной закреплённой форме, а также исходный режимязыковая возможность, новый знаменатель квитанции, свежесть или полномочия

Текущие пределы исходника, результата, переходов, управления и времени нельзя считать детерминированным пределом всей гостевой работы или логических выделений. Маршруты tree и VM предполагают доверенный исходник правила. Тайм-аут или завершение процесса остаётся эксплуатационным прерыванием без решения и переносимой квитанции.

Почему соседние продукты не расширяют язык

Core IR и байткод разрешают и компилируют существующий lispex-profile-1.5. Rust VM выполняет этот профиль с другой явной структурой управления, но не добавляет синтаксис, datum, примитивы, файлы, сеть, часы или случайность. Tree и VM разделяют Rust-значения и листья примитивов, поэтому VM не становится новым независимым семейством.

VM Топаза это точный отдельно установленный продукт, и тот же проверенный байткод она выполняет только на явном маршруте Native macOS ARM64. Лиспекс проверяет identity продукта, запроса и результата, полноразрядные счётчики ресурсов и отсутствие запасного пути, но этот маршрут не входит в Ваучер и не доказывает независимую эквивалентность всего языка.

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 не является независимой реализацией или скрытым запасным путём.

В текущую границу 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 через частный приёмник вывода с фиксированными пределами. Явный вывод и автопечать корневых результатов сохраняют точный общий порядок stdout, но завершённые корневые значения остаются отдельной проекцией квитанции. Процедуры вывода возвращают ноль значений, а последующая ошибка не стирает уже записанные байты.

LIL также выполняет совместимые написания %, list-first и list-rest. В новом коде предпочтительны modulo, first и rest. Только вызов настоящего deprecated-примитива записывает W330 или W331 ровно один раз на каждое место вызова в порядке первого появления. Перекрывающее связывание не предупреждает, а предупреждение сохраняется, если каноническая операция затем завершается ошибкой. Канал предупреждений отделён от stdout, значений и ошибок.

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

Три пометки не дают смешать границы

  • profile-required помечает все 205 возможностей текущего знаменателя языка. Фактическая поддержка каждого интерпретатора измеряется отдельно.
  • host-adapter-only относится к файлам, сети, часам, случайности, процессам и окружению. Host может сделать это вокруг вызова Лиспекса, но это не фоновая возможность гостевого языка.
  • future-profile относится к рассмотренным, но отсутствующим сейчас семантическим функциям, среди которых многоразовый повторный вход, гостевой ввод, трансцендентные функции, дополнительные мутации, кодеки UTF-8 и точное Unicode folding.

Это решения о границе, а не оправдание пробела реализации и не обещание будущего выпуска.

Частая ошибка

Отложенная возможность или поведение другого Scheme не становится частью Лиспекса без явного семантического решения. Настоящее изменение обязано вместе обновить спецификацию, Rust, тесты, квитанции и документацию.

Куда дальше

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

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