我可以从用c或c ++编写的库中调用lisp函数吗?我该如何扩展lisp? 当你想做一些系统调用或类似的事情时,这很有用。
答案 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)
答案 2 :(得分:4)
CFFI!