Egel é uma linguagem de script funcional simultânea não tipada baseada na reescrita de um combinador com uma sintaxe concisa, mas extraordinariamente poderosa.
Este interpretador está sendo desenvolvido em Linux/MacOS/BSD e usa icu4c para suporte Unicode, fmt para formatação, ffi como interface de função externa e GNU relâmpago como backend antecipado.
O interpretador pode ser compilado com um compilador C++ atual e emprega cmake para construir. Em geral, você precisará de acesso root para construir o egel.
Existem aproximadamente duas maneiras pelas quais os sistemas operacionais e gerenciadores de pacotes fornecem bibliotecas C++.
O modelo de código aberto (vários Unixes e BSDs) onde as bibliotecas C++ são compiladas e dissimuladas pelo distribuidor do sistema operacional. Use seu gerenciador de pacotes para instalar libicu, libffi, fmt e GNU relâmpago.
Aviso: excepcionalmente, o Ubuntu/Debian não vem com o GNU Lightning. Você deve compilar e instalar esse pacote antes de compilar o interpretador.
O modelo baseado em fornecedor (MacOS e Windows), onde as bibliotecas C++ geralmente não são fornecidas, pois são frágeis para vincular, e onde geralmente se compila essas bibliotecas do zero e as vincula estaticamente ou as distribui com o aplicativo. Links para os fornecedores são fornecidos como submódulos git no diretório de fornecedores e, você está por conta própria aqui, precisará baixar e compilar essas bibliotecas. Há um README.md separado no diretório do fornecedor que deve ajudar um pouco.
Os arquivos CMake são fornecidos para ambos os modelos, selecione aquele que deseja usar e renomeie para CMakeLists.txt
.
Um script cmake de construção estático baseado no modelo do fornecedor também é fornecido.
Depois disso o intérprete é feito com cmake
da maneira padrão. Execute os seguintes comandos em um sistema Linux.
mkdir build
cd build
cmake ..
make
nota: para GCC mais antigo, às vezes você precisa descomentar a regra stdc++fs
.
Isso deve fornecer um intérprete chamado egel
e vários arquivos de objeto Egel carregáveis dinamicamente no diretório build
.
Para uma instalação em todo o sistema, execute make install
após uma compilação como root.
(O dyld do MacOS não aparece mais em /usr/local/lib, defina o caminho.)
Em alguns sistemas, a variável de ambiente EGEL_PATH
precisa ser definida. Consulte a página de manual para obter mais informações sobre isso.
Se você não quiser fazer isso, observe que você só precisa do intérprete chamado egel
e do prelúdio no diretório include
para tarefas simples.
Makefiles gerados pelo Cmake permitem uma instalação local com o comando:
make DESTDIR=~ install
Nesse caso, os componentes do Egel serão instalados nos diretórios ~/usr/local
e você poderá fazer referência a esses componentes adicionando os seguintes comandos ao seu arquivo de recursos do shell, embora a sintaxe específica possa ser diferente.
export PATH=~/usr/local/bin:$PATH
export EGEL_PATH=.:~/usr/local/lib/egel
Há uma página de manual que você pode consultar, ela deve estar instalada, ou ler a seguinte breve introdução ao intérprete na internet.
Para obter uma lista de combinadores integrados, veja aqui.
O interpretador não fornece edição de linha de comando, você pode querer envolvê-lo com o comando alias egel="rlwrap egel"
.
O intérprete aloca muitos objetos de curta duração. Se você quiser um pouco mais de velocidade, pode valer a pena trocar o alocador.
Eu uso jemalloc
no Linux configurando LD_PRELOAD=`jemalloc-config --libdir`/libjemalloc.so.`jemalloc-config --revision
.