Egel es un lenguaje de secuencias de comandos funcional concurrente sin tipo basado en una ansiosa reescritura de combinadores con una sintaxis concisa pero notablemente poderosa.
Este intérprete se está desarrollando en Linux/MacOS/BSD y utiliza icu4c para compatibilidad con Unicode, fmt para formatear, ffi como interfaz de función externa y GNU Lightning como backend avanzado.
El intérprete se puede compilar con un compilador de C++ actual y emplea cmake para compilarlo. En general, necesitarás acceso root para construir egel.
Hay aproximadamente dos maneras en que los sistemas operativos y los administradores de paquetes proporcionan bibliotecas C++.
El modelo de código abierto (varios Unixes y BSD) donde el distribuidor del sistema operativo compila y disima las bibliotecas de C++. Utilice su administrador de paquetes para instalar libicu, libffi, fmt y GNU lightning.
Advertencia: excepcionalmente, Ubuntu/Debian no se entrega con GNU Lightning. Se supone que debes compilar e instalar ese paquete antes de compilar el intérprete.
El modelo basado en proveedores (MacOS y Windows) donde las bibliotecas de C++ generalmente no se proporcionan porque son frágiles para vincularlas, y donde generalmente se compilan estas bibliotecas desde cero y se vinculan estáticamente o se distribuyen con la aplicación. Los enlaces a los proveedores se proporcionan como submódulos de git en el directorio de proveedores y, aquí está usted solo, deberá descargar y compilar esas bibliotecas. Hay un README.md separado en el directorio de proveedores que debería ayudar un poco.
Los archivos CMake se proporcionan para ambos modelos, seleccione el que desea usar y cambie el nombre a CMakeLists.txt
.
También se proporciona un script cmake de compilación estática basado en el modelo del proveedor.
Después de eso, el intérprete se crea con cmake
de la manera estándar. Ejecute los siguientes comandos en un sistema Linux.
mkdir build
cd build
cmake ..
make
nota: para GCC anteriores, a veces es necesario descomentar la regla stdc++fs
.
Eso debería proporcionarle un intérprete llamado egel
y una cantidad de archivos objeto Egel cargables dinámicamente en el directorio build
.
Para una instalación en todo el sistema, ejecute make install
después de una compilación como root.
(MacOS dyld ya no busca en /usr/local/lib, establezca la ruta).
En algunos sistemas es necesario configurar la variable de entorno EGEL_PATH
. Consulte la página de manual para obtener más información al respecto.
Si no desea hacer eso, tenga en cuenta que solo necesita el intérprete llamado egel
y el preludio en el directorio include
para tareas simples.
Los archivos MAKE generados por Cmake permiten una instalación local con el comando:
make DESTDIR=~ install
En este caso, los componentes de Egel se instalarán en los directorios ~/usr/local
y puede hacer referencia a esos componentes agregando los siguientes comandos a su archivo de recursos de shell, aunque la sintaxis específica puede diferir.
export PATH=~/usr/local/bin:$PATH
export EGEL_PATH=.:~/usr/local/lib/egel
Hay una página de manual que puede consultar, debe instalarse o leer la siguiente breve introducción al intérprete en Internet.
Para obtener una lista de combinadores integrados, consulte aquí.
El intérprete no proporciona edición de línea de comando; es posible que desee ajustarla con el comando alias egel="rlwrap egel"
.
El intérprete asigna muchos objetos de corta duración. Si desea un poco más de velocidad, puede que valga la pena cambiar el asignador.
Utilizo jemalloc
en Linux configurando LD_PRELOAD=`jemalloc-config --libdir`/libjemalloc.so.`jemalloc-config --revision
.