Вышла новая версия ECL 12.12.1 -- реализации языка программирования Common Lisp

ECL (Embeddable Common Lisp) — это одна из многочисленных реализаций языка программирования Common Lisp со стандартом ANSI INCITS 226-1994 (R2004).

Основной особенностью ECL является то, что он компилирует исходный Common Lisp код в байт-код или в портабельный Си-код, который затем компилируется стандартным Си компилятором текущей платформы, что делает компилятор ECL легко переносимым — например известны порты ECL на ARM которые работают на платформах Android и iOS.

ECL также может легко встраиваться в приложения написанные на других языках, как скриптовый язык, но с более богатыми возможностями: Common Lisp, компиляция в байт-код или машинный код (если доступен компилятор языка Си).

  • Основые видимые изменения:
    • DELETE-FILE, RENAME-FILE, chdir, mkdir и chmod теперь сигналят ошибки (работы с файлами).
    • Обновлен ASDF со встроенным ASDF-BUNDLE вместо ASDF-ECL.
    • SYS:FUNCTION-LAMBDA-LIST снова работает с макросами и специальным операторами.
    • Линковка с ecl-help для безпроблемного использования DOCUMENTATION в уже готовых приложениях.
    • ECL теперь генерирует более читабельный Си-код с правильными отступами, меньшим количеством меток и с более стандартными конструкциями.
  • Исправленные ошибки:
    • Улучшена производительность новой библиотеки для поддержки SMP.
    • Исправления ошибок в очереди POSIX сигналов, которые вызывали повторяющуюся потерю Ctrl-C.
    • Исправления опечаток, которые вызывали проблемы поддержки long long и unsigned long long.
    • Код в ecl_import_current_thread() не был совместим GC API.
    • Версия COMPILE-FILE, которая компилировала в байт-код, не поддерживала :EXTERNAL-FORMAT параметр.
    • Скомпилированная версия DOTIMES вычисляла выходную форму в неправильном контексте.
    • ecl_import_current_thread() не связывала *CURRENT-PROCESS*.
    • Изменен алгоритм для определения является ли функция замыканием или нет, и который тип Си-реализации замыкания необходим для этого.
  • Мета-объектный протокол:
    • Теперь ECL полностью поддерживает MOP.
    • Полностью изменен протокол начального этапа сборки/загрузки классов (class bootstrapping protocol), который теперь проще и более эффективен, позволяя нам иметь доступ ко всем классам на начальном этапе (сборки образа).
    • Все методы доступа переопределены, как обобщеные функции, после начальной сборки образа (bootstrapping) ECL.
    • Методы доступа стандартных классов теперь оптимизированы. Это стало возможным благодаря тому, что они полагаются на SLOT-VALUE, которые (по MOP) не могут быть переопределены или "обернуты" без ввода новых мета-классов.
    • Компилятор больше не "инлайнит" методы доступа к слотам мета-объектов, которые могут быть переопределены.
    • (SETF SLOT-VALUE) не всегда возращал присвоенное значение.
    • SLOT-BOUNDP возвращал дополнителные значиния при ошибках.
    • SLOT-VALUE-USING-CLASS не вызывал SLOT-UNBOUND

Исходный код ECL можно загрузить по адресу:

http://sourceforge.net/projects/ecls/files/latest/download

 , , ,

©  Linux.org.ru