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

标签 c++ lisp extend

我可以从用 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/

相关文章:

c++ - 在现代 Windows 中存储/检索配置数据的最佳方式

emacs - 您推荐的 Emacs Lisp 是什么?

java - 如何在方法内重写 Runnable?

php - 是否可以动态扩展一个类?

java - 转换为 JSON 字符串时扩展类中的数据丢失

c++ - Valgrind——可能丢失警告

c++ - 在终端上执行 "make"时出错

使用 winsock 和 std::thread 的 C++ 多线程服务器

lisp - LISP 的 future 是什么?我应该学吗?

lisp - cmucl : run-program output process exited only