我可以从用 c 或 c++ 编写的库中调用 lisp 中的函数吗?如何扩展 lisp?当你想做一些系统调用或类似的事情时,这很有用。
codeassembly
问问题
4221 次
3 回答
8
从 lisp 调用非 lisp 代码是不常见的,而且很少需要。CLX(CL 的 X11 客户端实现)不链接到 Xlib 实现,而是直接“说”X11。在任何系统上,您的 CL 实现可能已经具有出色的操作系统钩子,从而使这变得不必要。
也就是说,答案取决于 lisp 的实现:
在ECL中,您实际上可以在 C 下托管一个 CL 环境,然后简单地调用cl_eval()
代码来执行。这可以让您用 C(或 C++)和“调用”lisp 代码编写您的应用程序(或应用程序主机)。
在CCL中,有一个与 C 兼容的调用接口,可让您执行以下操作:
(with-cstrs ((x "Hello World"))
(#_puts x))
在大多数其他 CL 实现中(如 SBCL;是的,这也适用于 ECL 和 CCL),您可以使用 UFFI(或 CFFI),它只是让您调用 C 函数,这是其他人正在谈论的。如果这就是您想要做的全部,那么 CFFI 是一个很好、安全的起点。
于 2008-12-19T02:34:42.277 回答
5
参见UFFI和CFFI以及更简洁的Clozure FFI
于 2008-12-18T20:29:56.647 回答
4
CFFI!
于 2008-12-19T01:26:43.380 回答