Egel — это нетипизированный параллельный функциональный язык сценариев, основанный на быстром переписании комбинатора с кратким, но удивительно мощным синтаксисом.
Этот интерпретатор разрабатывается для Linux/MacOS/BSD и использует icu4c для поддержки Unicode, fmt для форматирования, ffi в качестве интерфейса внешних функций и GNU Lightning в качестве опережающего бэкэнда.
Интерпретатор можно скомпилировать с помощью текущего компилятора C++ и использовать для сборки cmake. В общем, для сборки egel вам понадобится root-доступ.
Существует примерно два способа, которыми операционные системы и менеджеры пакетов предоставляют библиотеки C++.
Модель с открытым исходным кодом (различные Unix и BSD), в которой библиотеки C++ компилируются и распространяются дистрибьютором операционной системы. Используйте менеджер пакетов для установки libicu, libffi, fmt и GNU Lightning.
Предупреждение: в исключительных случаях Ubuntu/Debian не поставляется с GNU Lightning. Вы должны скомпилировать и установить этот пакет до компиляции интерпретатора.
Модель на основе поставщика (MacOS и Windows), в которой библиотеки C++ обычно не предоставляются, поскольку они ненадежны для компоновки, и где эти библиотеки обычно компилируются с нуля и статически связываются с ними или распространяются вместе с приложением. Ссылки на поставщиков предоставляются в виде подмодулей git в каталоге поставщиков, и здесь вам придется скачать и скомпилировать эти библиотеки. В каталоге поставщика есть отдельный файл README.md, который должен в некоторой степени помочь.
Файлы CMake предоставляются для обеих моделей, выберите тот, который вы хотите использовать, и переименуйте его в CMakeLists.txt
.
Также предоставляется статический сценарий сборки cmake на основе модели поставщика.
После этого интерпретатор создается с помощью cmake
стандартным образом. Выполните следующие команды в системе Linux.
mkdir build
cd build
cmake ..
make
примечание: для более старых версий GCC иногда необходимо раскомментировать правило stdc++fs
.
Это должно дать вам интерпретатор с именем egel
и несколько динамически загружаемых объектных файлов Egel в каталоге build
.
Для общесистемной установки запустите make install
после сборки от имени пользователя root.
(MacOS dyld больше не просматривает /usr/local/lib, задайте путь.)
В некоторых системах необходимо установить переменную среды EGEL_PATH
. Дополнительную информацию об этом смотрите на странице руководства.
Если вы не хотите этого делать, обратите внимание, что интерпретатор с именем egel
и прелюдия из каталога include
нужны вам только для простых задач.
Созданные Cmake make-файлы допускают локальную установку с помощью команды:
make DESTDIR=~ install
В этом случае компоненты Egel будут установлены в каталоги ~/usr/local
и вы можете обратиться к этим компонентам, добавив следующие команды в файл ресурсов оболочки, хотя конкретный синтаксис может отличаться.
export PATH=~/usr/local/bin:$PATH
export EGEL_PATH=.:~/usr/local/lib/egel
Вы можете просмотреть страницу руководства, ее следует установить или прочитать следующее краткое введение в интерпретатор в Интернете.
Список встроенных комбинаторов смотрите здесь.
Интерпретатор не обеспечивает редактирование командной строки, вы можете захотеть обернуть его командой alias egel="rlwrap egel"
.
Интерпретатор выделяет множество недолговечных объектов. Если вам нужно немного больше скорости, возможно, стоит переключить распределитель.
Я использую jemalloc
в Linux, установив LD_PRELOAD=`jemalloc-config --libdir`/libjemalloc.so.`jemalloc-config --revision
.