【发布时间】:2011-08-07 05:40:27
【问题描述】:
我最近研究了 Lua,它看起来非常好。唯一令人讨厌的是它缺乏(标准)库。但是 JIT 编译器附带了一个不错的 FFI C 接口。
来自 java 背景,我尽量避免使用 C,所以我的问题是:有没有人对 LuaJIT 有一些经验,尤其是它的 FFI 接口,以及为几乎没有不懂C?
【问题讨论】:
我最近研究了 Lua,它看起来非常好。唯一令人讨厌的是它缺乏(标准)库。但是 JIT 编译器附带了一个不错的 FFI C 接口。
来自 java 背景,我尽量避免使用 C,所以我的问题是:有没有人对 LuaJIT 有一些经验,尤其是它的 FFI 接口,以及为几乎没有不懂C?
【问题讨论】:
对我来说似乎很简单,Mike Pall 有一些很好的教程here,lua 邮件列表也包含一些很好的例子,所以也请查看档案
【讨论】:
为几乎没有的人建立图书馆有多难 C语言知识?
真的很简单。首先,您需要声明要使用的函数。然后,加载目标库并将其分配给 Lua 变量。使用该变量调用外部函数。
这是使用 C 数学库中的函数 powf 的示例。
local ffi = require("ffi")
-- Whatever you need to use, have to be declared first
ffi.cdef([[
double powf(double x, double y);
]])
-- Name of library to load, i.e: -lm (math)
local math = ffi.load("m")
-- Call powf
local n, m = 2.5, 3.5
print(math.powf(n, m))
【讨论】:
powf 接受并返回 floats 而不是 doubles。有效的声明应为:ffi.cdef([[ float powf(float x, float y); ]])
powf 将浮点数作为参数,而不是双精度数。感谢您指出这一点。