Egel 是一种无类型并发函数脚本语言,基于急切的组合器重写,具有简洁但非常强大的语法。
该解释器正在 Linux/MacOS/BSD 上开发,使用 icu4c 进行 Unicode 支持,使用 fmt 进行格式化,使用 ffi 作为外部函数接口,使用 GNU lighting 作为提前后端。
该解释器可以使用当前的 C++ 编译器进行编译,并使用 cmake 来构建。一般来说,您需要 root 访问权限才能构建 egel。
操作系统和包管理器提供 C++ 库的方式大致有两种。
开源模型(各种 Unix 和 BSD),其中 C++ 库由操作系统发行商编译和消除。使用包管理器安装 libicu、libffi、fmt 和 GNU lighting。
警告:特殊情况下,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
的解释器,并在build
目录中提供许多可动态加载的 Egel 对象文件。
对于系统范围的安装,在构建后以 root 身份运行make install
。
(MacOS dyld 不再在 /usr/local/lib 中查找,请设置路径。)
在某些系统上,需要设置EGEL_PATH
环境变量。有关详细信息,请参阅手册页。
如果您不想这样做,请注意,您只需要名为egel
的解释器和include
目录中的 prelude 来执行简单任务。
Cmake 生成的 makefile 允许使用以下命令进行本地安装:
make DESTDIR=~ install
在这种情况下,Egel 组件将安装到~/usr/local
目录中,您可以通过将以下命令添加到 shell 资源文件来引用这些组件,但具体语法可能有所不同。
export PATH=~/usr/local/bin:$PATH
export EGEL_PATH=.:~/usr/local/lib/egel
您可以查阅一个手册页,应该安装它,或者在互联网上阅读以下关于解释器的简短介绍。
有关内置组合器的列表,请查看此处。
解释器不提供命令行编辑,您可能需要使用命令alias egel="rlwrap egel"
来包装它。
解释器分配大量短期对象。如果您想要一点额外的速度,切换分配器可能会有所收获。
我通过设置LD_PRELOAD=`jemalloc-config --libdir`/libjemalloc.so.`jemalloc-config --revision
在 Linux 上使用jemalloc
。