我可以用c ++扩展lisp吗?

时间:2008-12-18 20:26:05

标签: c++ lisp extend

我可以从用c或c ++编写的库中调用lisp函数吗?我该如何扩展lisp? 当你想做一些系统调用或类似的事情时,这很有用。

3 个答案:

答案 0 :(得分: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是一个好的,安全的起点。

答案 1 :(得分:5)

请参阅UFFICFFI以及slicker Clozure FFI

答案 2 :(得分:4)

CFFI