Основу Guile составляет виртуальная машина, которая выполняет переносимый набор инструкций, генерируемый специальным оптимизирующим компилятором. Виртуальная машина Guile легко интегрируется с кодом приложений на языках Си и Си++. Кроме языка Scheme, для которого реализована поддержка спецификаций R5RS, R6RS и R7RS, в рамках проекта Guile разработаны компиляторы и для других языков, таких как ECMAScript, Emacs Lisp и Lua (в процессе разработки). В состав пакета входит библиотека модулей, в которых реализованы типовые сервисные функции, такие как работа с протоколом HTTP, парсинг XML и использование методов объектно-ориентированного программирования.
Среди изменений в новом выпуске:
- Реализован экспериментальный интерфейс для использования сторонних бэкендов. Разработчикам предоставлена возможность использования имеющегося фронтэнда, преобразующего исходный код во внутреннее представление, и оптимизатора Guile вместе с другими бэкендами, выполняющими генерацию кода.
- Представлен внешний бэкенд hoot для генерации промежуточного кода WebAssembly, который может выполняться в браузере. В будущем не исключено включение WebAssembly в число основных поддерживаемых целей компиляции в Guile.
- Разрешено использование определений «define» в контексте выражений «when», «unless», «cond», «case», «and-let*» и «with-fluids».
- Добавлена поддержка механизма custom ports, описанного в диалекте языка Scheme R6RS и позволяющего подключать обработчики для трансформации данных (например, сжатие/распаковка или изменение кодировки символов), обрабатываемых в таких функциях, как
read, write и display. В Guile также предложен модуль «(ice-9 soft-ports)», предоставляющий интерфейс «soft port», который позиционируется в качестве более простого аналога «custom ports». - Добавлена поддержка упрощённого синтаксиса wisp, позволяющего писать более читаемый код, например:
define : factorial n if : zero? n . 1 * n : factorial (- n 1) display : factorial 5 newline вместо (define (factorial n) (if (zero? n) 1 (* n (factorial (- n 1))))) (display (factorial 5)) (newline)
- В компиляторе реализовано новое предупреждение, выдаваемое в случае импорта в коде модулей, функции которых не используются.
- Добавлена новая аннотация «maybe-unused», подавляющая вывод предупреждений о неиспользовании процедур.
- Вывод трассировки стека вызовов теперь обрезается по границе 500 символов, а не 80 (можно изменить через параметр default-frame-width).
- В процедуру «copy-file» добавлен параметр «#:copy-on-write», позволяющий использовать механизм copy-on-write в поддерживающих его файловых системах.
- Добавлена оптимизация, обеспечивающая inline-развёртывание вызовов процедур с keyword-аргументами.
Источник: http://www.opennet.ru/opennews/art.shtml?num=61430