MIT/GNU Scheme — это реализация языка программирования Scheme, предоставляющая интерпретатор, компилятор, отладчик исходного кода, встроенный Emacs-образный редактор и большую библиотеку времени выполнения. MIT/GNU Scheme заточен под программирование больших приложений с быстрым циклом разработки.
Изменения:
- Сборки для Windows больше не распространяются, поскольку существовавшие 32-разрядные сборки малопригодны для современных систем, а для достижения работоспособности 64-разрядной нужны немалые усилия, в которых никто из текущих сопроводителей не заинтересован.
- Для macOS теперь выпускаются только 64-разрядные сборки, поскольку в применяемом в последних выпусках инструментарии поддержка 32-разрядной сборки объявлена устаревшей.
- Переносимая версия для C не включена в этот выпуск, поскольку её не удалось вовремя починить.
- На следующий выпуск запланировано кучу мелких улучшений; первоочерёдными задачами этого выпуска являются нововведения.
Важные нововведения:
- Почти полностью поддерживается R7RS (Семикратно Пересмотренный Отчёт по Алгоритмическому Языку Scheme), кроме:
- автоподгрузки библиотек, которая появится в следующем выпуске;
- многозначных возвратов, с которых есть прок лишь в ограниченных условиях; для исправления этого нужна сильная переработка компилятора, которая вряд ли когда-либо будет произведена.
fluid-set
объявлено устаревшим, и будет полностью удалено в будущем.Учтите также, что поведение REPL (цикл чтения-выполнения-вывода) не изменилось. То же самое касается загрузчика и компилятора, поскольку они автоматически определяют наличие R7RS-кода в файле и соответствующим образом это обрабатывают. Эти изменения позволяют и существующему коду работать, и новому писаться.
- Поддержка Юникода:
- поддержка NFC- и NFD-нормализации; большинство строк теперь в NFC;
- поддержка конвертации между строками и байтовыми векторами UTF-{8,16,32};
- символы, читатель, писатель и текстовые порты теперь поддерживают Юникод;
- таблицы символов теперь поддерживают Юникод и занимают значительно меньше места благодаря внедрению списков инверсии;
- новый соответствовальщик регулярным выражениям
regsexp
поддерживает Юникод; - старые соответствовальщики и
rexp
— не поддерживают; Edwin
— тоже.
- Добавлен интерфейс внешних функций для динамической подгрузки C-библиотек и взаимодействия с ними из Scheme. Этот интерфейс заменил собой много специализированных интерфейсов к различным библиотекам, которые теперь представлены в виде плагинов.
- Реализована виртуальная машина,
svm
, которая поддерживается в качестве нативной цели сборки. Хоть она и намного медленнее нативного кода, но работает на любой архитектуре. В этом выпуске предоставлена 64-разрядная версия; 32-разрядной нет, но она может быть собрана при необходимости.
Ещё изменения:
- начальная поддержка SMP;
- уведомления сборщика мусора;
- события нитей;
- многие другие мелкие нововведения и исправления.
Несовместимые изменения:
- Большинство строк теперь иммутабельны! Почти все способы создания строк генерируют иммутабельные строки, кроме
make-string
иstring-copy
. Иммутабельность привносит множество новых возможностей, в первую очередь возможность использования компактных представлений, см. подробности в руководстве. - Процедура
hash
изменена для совместимости с SRFI 69. Перед этим она была похожа наobject-hash
, которая теперь должна использоваться вместо неё. - Процедуры
vector-8b
, использовавшиеся для работы со строками как с векторами байтов, объявлены устаревшими. Используйте вместо них непосредственно векторы байтов. - Процедуры для работы с URI больше не принимают в качестве аргументов строки. Конвертируйте строки в URI с помощью
->uri
при их использовании. - Удалена поддержка старых форм кодирования в Юникод. Используйте вместо них конвертеры в векторы байтов, если это вообще нужно, поскольку для многих задач теперь отпала необходимость особым образом работать с Юникодом.
Экспериментальные новые возможности:
- Тип URI имеет новый синтаксис:
#<...>
. И читатели, и писатели работают с этим синтаксисом.
>>> Подробности