Пять решений, формирующих язык
- Детерминизм входит в идентичность языка. Один и тот же ввод всегда даёт один и тот же ответ, и это свойство самого языка, а не привычка одной машины. Порядок вычисления, печать, диагностика и объявленные ресурсные исходы входят в контракт.
- Неподдерживаемое поведение отвергается явно. Программа, которая выполняет правило, не ищет глобальные имена среды и не заимствует платформенную библиотеку.
- Данные отделены от эффектов. Правило возвращает значение. Файлы, сеть, время, случайность и внешние действия принадлежат явному вызывающему коду.
- Представление не создаёт полномочий. Исходник, точное изображение, пакет, квитанция и отчёт отвечают на разные вопросы и не превращаются в разрешение сами.
- Свидетельство называет свои границы. Набор проверенных примеров или сравнение бэкендов поддерживает лишь записанные программы-исполнители, входы, наблюдения и пределы.
Компромиссы выбраны намеренно
| Выбор Лиспекса | Что получаем | От чего отказываемся |
|---|---|---|
| один закреплённый профиль, где значения конструкций языка заданы заранее | повторяемые результаты и проверяемые отказы | неописанное поведение среды |
| компактный набор значений и процедур | язык, который можно охватить картой и тестами | широкую совместимость со Scheme |
| явная граница с хостом | переносимые и аудируемые правила | удобные неявные ввод-вывод и глобальные имена среды |
| точная идентичность исходника | побайтовую проверку и перенос | автоматическую нормализацию пробелов и кодировки |
| квитанции и свидетельства Ваучера, которые остаются в заявленных пределах | проверяемые утверждения с ясными точками отказа | универсальное доказательство или переносимое разрешение |
Практический способ чтения
Для любой сильной возможности задайте два вопроса. Какие именно байты она описывает и какая программа их выполнила? И что по-прежнему обязан сделать вызывающий код? Поэтому изображение доказывает точное восстановление, но не происхождение, а проверка допуска Ваучера сообщает одно совпавшее локальное решение, но не разрешает платёж или развёртывание.
Текущая граница
Лиспекс имеет форму Lisp, но не пытается принимать любую программу Scheme. Исключения из области представляют собой решения о совместимости. Будущий бэкенд реализует профиль, а не переопределяет язык случайным поведением.
Куда дальше
Точная охваченная часть языка описана в «Текущей и отложенной области», а направления, подчинённые этим решениям, изложены в плане развития.