Egel は、簡潔でありながら非常に強力な構文による積極的なコンビネータの書き換えに基づいた、型なしの同時関数型スクリプト言語です。
このインタプリタは Linux/MacOS/BSD 上で開発されており、Unicode サポートに icu4c、フォーマットに fmt、外部関数インターフェイスとして ffi、および先行バックエンドとして GNU lightning を使用します。
このインタープリターは、現在の C++ コンパイラーでコンパイルでき、cmake を使用してビルドできます。一般に、egel をビルドするには root アクセスが必要です。
オペレーティング システムとパッケージ マネージャーが C++ ライブラリを提供する方法は、大きく 2 つあります。
C++ ライブラリがオペレーティング システムのディストリビュータによってコンパイルおよび分解されるオープン ソース モデル (さまざまな Unix および BSD)。パッケージ マネージャーを使用して、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
ディレクトリに作成されるはずです。
システム全体のインストールの場合は、ビルド後に root としてmake install
実行します。
(MacOS dyld は /usr/local/lib を調べなくなりました。パスを設定してください。)
一部のシステムでは、 EGEL_PATH
環境変数を設定する必要があります。詳細については、man ページを参照してください。
これを実行したくない場合は、簡単なタスクのためにegel
という名前のインタプリタとinclude
ディレクトリ内のプレリュードのみが必要であることに注意してください。
Cmake で生成された Makefile を使用すると、次のコマンドを使用してローカル インストールが可能になります。
make DESTDIR=~ install
この場合、Egel コンポーネントは~/usr/local
ディレクトリにインストールされ、次のコマンドをシェル リソース ファイルに追加することでこれらのコンポーネントを参照できますが、特定の構文は異なる場合があります。
export PATH=~/usr/local/bin:$PATH
export EGEL_PATH=.:~/usr/local/lib/egel
参照できるマニュアル ページがあり、それをインストールするか、インターネット上の次のインタープリタに関する短い紹介文を読んでください。
組み込みコンビネータのリストについては、ここを参照してください。
インタプリタはコマンド ライン編集を提供しないため、コマンドalias egel="rlwrap egel"
でラップすることもできます。
インタプリタは、有効期間の短いオブジェクトを多数割り当てます。もう少し速度を上げたい場合は、アロケーターを切り替えると効果があるかもしれません。
Linux ではLD_PRELOAD=`jemalloc-config --libdir`/libjemalloc.so.`jemalloc-config --revision
を設定してjemalloc
使用します。