我可以从用 c 或 c++ 编写的库中调用 lisp 函数吗?我怎样才能扩展口齿不清? 当您想进行一些系统调用或类似的事情时,这很有用。
最佳答案
从 lisp 调用非 lisp 代码是不常见的,而且很少有必要。 CLX(CL 的 X11 客户端实现)不链接到 Xlib 实现,而是直接“说” X11。在任何系统上,您的 CL 实现可能已经具有出色的操作系统 Hook ,因此无需这样做。
也就是说,答案取决于 lisp 实现:
在ECL您实际上可以在 C 下托管一个 CL 环境,并简单地调用 cl_eval()
来执行代码。这可以让您用 C(或 C++)编写您的应用程序(或应用程序宿主)并“调用”lisp 代码。
在CCL , 有一个 C 兼容的调用接口(interface)可以让你做这样的事情:
(with-cstrs ((x "Hello World"))
(#_puts x))
在大多数其他 CL 实现中(如 SBCL;是的,这也适用于 ECL 和 CCL),您可以使用 UFFI(或 CFFI),它可以让您调用 C 函数,这就是其他人正在谈论的。如果这就是您想要做的全部,那么 CFFI 是一个好的、安全的起点。
关于c++ - 我可以用 C++ 扩展 lisp 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/379136/