对 C 语言良好的亲和力,一直是 Lua 的优势之一。LuaJIT 在传统的 Lua C API 之外,额外提供 FFI 的方式来调用 C 函数,更是大大提升了跟 C 交互的便利度。甚至有这么一种说法,虽然 LuaJIT 命名是 Lua + JIT,但是好多人是冲着 FFI 去用 LuaJIT 的。[1]
先看一则示例: {代码...} 拜 Lua 内部实现上的细节所赐,如果传递的数组中带有 nil 值空洞,# 操作符返回的数值并不能反映真实的大小。 直接引用 Lua 5.1 manual 上的说法(Lua 5.2 和 LuaJIT 也是一样的定义): [链接] The Length Operator The length of a table t is defined to be any integer index n such that ...
今天同事在公司群里转发了一篇文章:Calling Go Functions from Other Languages 其原理是 通过编译时指定 -buildmode=c-shared 选项,把 Go 程序编译成 C 的动态链接库。 由其他语言通过 FFI 的形式,去调用动态链接库的函数。 于是,只要能支持 FFI 的语言,就能调用事先编译到动态链接库里 Go 的函数。 想到 LuaJIT ...