我可以。

5

我能否从C或C++编写的库中调用Lisp函数?如何扩展Lisp? 当您想要进行一些系统调用或类似操作时,这非常有用。


5
我能用一个小型卡丁车引擎来改装我的保时捷吗? :-) - Paul Tomblin
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是一个很好、安全的起点。

许多程序仍然针对 uffi 而不是 cffi 进行编写;uffi 仍然更加普遍可用。 - geocar
1
现在,CFFI支持的Lisp比UFFI更多,包括ABCL和CLISP。不确定这是否是您所指的内容。 - Luís Oliveira
2
这些天已经是2012年了,而不是我写下那句话的2008年 :P - geocar

5

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接