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
>>> Подробности