Увидел свет GNU Guile 2.0

После пяти лет разработки представлен релиз проекта GNU Guile 2.0, в рамках которого развитвается свободная реализация функционального языка программирования Scheme, поддерживающая возможность встраивания кода в приложения на других языках программирования. Guile является официальным языком разработки расширений для операционной системы GNU. Guile позволяет легко интегрировать в приложения расширяющие функциональность дополнения, модули и скрипты, дает возможность пользователям менять поведение приложения без углубления в его внутреннюю организацию.

Основу Guile составляет эффективная виртуальная машина, которая выполняет переносимый набор инструкций, генерируемый специальным оптимизирующим компилятором. Виртуальная машина Guile легко интегрируется с кодом приложений на языках Си и Си++. Кроме языка Scheme, для которого реализована поддержка спецификаций R5RS и R6RS, в рамках проекта Guile разработаны компиляторы и для других языков, таких как ECMAScript, Emacs Lisp и Lua (в процессе разработки). В состав пакета входит библиотека модулей, в которых реализованы типовые сервисные функции, такие как работа с протоколом HTTP, парсинг XML и использование методов объектно-ориентированного программирования.

Из улучшений GNU Guile 2.0 можно отметить:

  • Новая виртуальная машина и инфраструктура компиляции. Guile 2.0 компилирует Scheme-скрипты в байткод, который затем исполняется в специальной виртуальной машине. Для ускорения задействовано кэширование сгенерированного байткода на диске. По умолчанию компиляция происходит автоматически, в прозрачном для пользователя режиме. Для более тонкого контроля сборки предусмотрен специальный интерфейс командной строки и возможность создания собственных компиляторов на языке Scheme. В качестве таких альтернативных компиляторов представлены компиляторы для языков ECMAScript и Emacs Lisp;
  • Новый отладчик REPL (read-eval-print-loop), отличающийся поддержкой мета-команд, предоставляющих возможность интерактивного программирования. Например, можно скомпилировать заданное выражение или запустить для него функцию профилирования. Поддерживается возможность обратной трассировки, позволяющей отследить источник ошибки и проинспектировать состояние стека и переменных в определенные моменты в прошлом;
  • Поддержка гигиенических макросистем (hygienic macros) syntax-rules и syntax-case, гарантирующих отсутствие пересечений с уже определенными внешними именами для используемых внутри макроса имен;
  • Поддержка Unicode для хранения строк и строковых операций;
  • Частичная совместимость со стандартом R6RS. Поддерживается подключение библиотек R6RS и импорт форм R6RS;
  • Новый динамический FFI-интерфейс для связывания с Си-библиотеками, позволяющий создать биндинг для Си-библиотек без написания кода на языке Си;
  • Использование нового консервативного сборщика мусора (Boehm-Demers-Weiser garbage collector), который отличается повышенной производительностью и позволяет упростить организацию взаимодействия с кодом на языке Си
  • Добавлено 22 новых модуля, среди которых переработанная реализация хэшей, новые модули для HTTP, XML/SXML, регулярных выражений, LALR-парсинга и т.п.

© OpenNet