AnyMath 文档
Notebook

在Engee中调用C代码

在本演示中,我们将探讨在Engee脚本中使用C代码的可能性。 毕竟,尽管大部分代码可以使用 Engee 编写,但已有许多高质量且成熟的数值计算库是用 C 语言编写的。

Engee 秉持“无模板”的设计理念:可以直接从脚本中调用函数,无需任何“连接”代码、代码生成或编译。

这通过调用 @ccall 宏来实现。

作为示例,我们调用 C 标准库中的 clock 函数。Clock 不接受参数,并且在本例中返回 Int32

In [ ]:
t = @ccall clock()::Int32
print("类型 t: " * string(typeof(t)) * ", 当 t 等于: " * string(t))
类型 t:Int32,当 t 等于:365356426 时

现在,我们来看一下调用用 C 语言编写的函数的情况。为此,我们取一个包含用 C 语言编写的函数的文件,并从中编译出 .so 可执行文件。

为此,我们进入 Engee 命令行,使用 分号 切换到 shell 模式,并执行以下命令。

cd /user/start/examples/integrated_languages/calling_c_code gcc -c -fPIC say_y.c -o say_y.o gcc say_y.o -shared -o say_y.so

下图展示了此操作的执行截图。

image.png

C语言函数本身非常简单:它会输出输入参数。下图展示了该函数的代码。

image.png

要调用该函数,我们需要指定已编译的 .so 文件的路径,并调用该函数本身。

In [ ]:
@ccall "$(@__DIR__)/say_y.so".say_y(10::Cint)::Cvoid
已输入:y = 10。

输出

在本演示中,我们详细介绍了 EngeeC 语言应用方面的功能,包括通过在脚本内部调用函数,以及通过集成用户自定义函数来完成我们面临的任务。