После шести лет разработки подготовлен (https://lists.gnu.org/archive/html/guile-devel/2017-03/msg00... релиз проекта GNU Guile 2.2 (http://www.gnu.org/software/guile/guile.html), в рамках которого развивается свободная реализация функционального языка программирования Scheme (http://ru.wikipedia.org/wiki/Scheme), поддерживающая возможность встраивания кода в приложения на других языках программирования. Guile является официальным языком разработки расширений для операционной системы GNU. Guile позволяет легко интегрировать в приложения расширяющие функциональность дополнения, модули и скрипты, дает возможность пользователям менять поведение приложения без углубления в его внутреннюю организацию.Основу Guile составляет эффективная виртуальная машина, которая выполняет переносимый набор инструкций, генерируемый специальным оптимизирующим компилятором. Виртуальная машина Guile легко интегрируется с кодом приложений на языках Си и Си++. Кроме языка Scheme, для которого реализована поддержка спецификаций R5RS (http://www.schemers.org/Documents/Standards/R5RS/) и R6RS (http://www.r6rs.org/), в рамках проекта Guile разработаны компиляторы и для других языков, таких как ECMAScript, Emacs Lisp и Lua (в процессе разработки). В состав пакета входит библиотека модулей, в которых реализованы типовые сервисные функции, такие как работа с протоколом HTTP, парсинг XML и использование методов объектно-ориентированного программирования.
Новый выпуск примечателен добавлением нового оптимизирующего компилятора и новой высокопроизводительной регистровой виртуальной машины. По сравнению с прошлой стабильной веткой 2.0 в Guile 2.2 отмечается увеличение производительности выполнения существующих приложений как минимум на 30%. В новой версии также снижено потребление памяти и ускорена работа интерпретатора "eval". Представлена новая система динамического распределения памяти для стека, которая устранила все ограничения, связанные с фиксированным размером стека, и теперь позволяет использовать рекурсивные вызовы любого уровня вложенности.
Отдельно выделяется расширение средств многопоточного программирования. В Guile 2.2 добавлена возможность распараллеливания обработчиков в пространстве пользователя, позволяющая организовать одновременное выполнения миллионов легковесных нитей (fibers). Многопоточные библиотеки могут использовать нити для перехода в спящий режим с пробуждением при возобновлении операции ввода/вывода. В новой версии также расширены средства работы с локалями, а в строковых операциях по умолчанию задействована кодировка UTF-8 и проведена оптимизация работы с многобайтовыми наборами символов. Предоставляемая в Guile реализация Elisp признана полностью совместимой с Emacs и теперь содержит все заявленные в спецификации Elisp возможности, а также учитывает специфичные для Emacs особенности.
URL: https://www.gnu.org/software/guile/news/gnu-guile-220-releas...
Новость: http://www.opennet.me/opennews/art.shtml?num=46205
> Предоставляемая в Guile реализация Elisp признана полностью совместимой с Emacs и теперь содержит все заявленные в спецификации Elisp возможности, а также учитывает специфичные для Emacs особенности.Это, конечно, хорошо. Стало быть, можно надеяться, что Emacs окончательно переведут на Guile в уже недалёком будущем?
>> Предоставляемая в Guile реализация Elisp признана полностью совместимой с Emacs и теперь содержит все заявленные в спецификации Elisp возможности, а также учитывает специфичные для Emacs особенности.
> Это, конечно, хорошо. Стало быть, можно надеяться, что Emacs окончательно переведут на
> Guile в уже недалёком будущем?Будущее уже https://www.emacswiki.org/emacs/GuileEmacsBuild здесь. А сдюжишь? :))
---Если я тебе скажу. что в нём и js типа есть, то http://lists.gnu.org/archive/html/guile-user/2017-03/msg0005... ты его в броузере захочешь?
О, спасибо. Когда я смотрел в последний раз, там было ешё не очень всё радужно. А они говорят, что из коробки теперь неплохо. Это хороший знак.Теперь второй вопрос на повестке дня: раз Guile уже запилили хорошо, как дела с параллелизмом? Короче, пошёл смотреть, раз такая движуха.
Меня в guile убивает названия модулей. Хочешь, например, функции для работы с vector, подключаешь (use-modules (srfi srfi-43)). Хочешь записи (records) - (use-modules (srfi srfi-9)).
Серьёзно? Читабельненько.
Да, воспринятненько
Разве нельзя декларировать импортируемые функции?
> Разве нельзя декларировать импортируемые функции?Конечно можно. И декларировать, и переименовать, как нравится.
Для этого после модуля можно написать (#:select <и перечислить импортируемые символы>).
А можно, например, написать (#:renamer prefix:) - и все импортированные символы будут иметь имена вида prefix:<импортированный-символ>
А как называется модуль, предоставляющий функциональность, известную как left-pad?
(use-modules (ice-9 format))
Это функции работы со строками
SRFI - это же просто стандарты, которые должны разделять реализации Scheme. Но если Вас так коробят имена, ничего ж не стоит переименовать модуль, как Вам нравится, и в остальной программе использовать уже это имя. :)
Это понятно, но не избавляет от факта, что мне нужно даже в этом случае помнить в каком стандарте принята та или иная функциональность. Зачем это нужно? Почему не сделать опцией указание стандарта, а модулям дать нормальные имена. Если указанном стандарте нет модуля - ошибка с нормальным сообщением.