【问题标题】:Can I extend lisp with c++?我可以用 C++ 扩展 lisp 吗?
【发布时间】:2010-09-27 14:33:21
【问题描述】:

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

【问题讨论】:

  • 我可以用卡丁车引擎扩展我的保时捷吗? :-)

标签: c++ lisp extend


【解决方案1】:

【讨论】:

    【解决方案2】:

    CFFI!

    【讨论】:

      【解决方案3】:

      从 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 仍然具有更大的可用性。
      • 现在 CFFI 支持的 Lisps 比 UFFI 多,即 ABCL 和 CLISP。不知道你是不是这个意思。
      • 这些天现在是 2012 年,而不是 2008 年我写的时候:P
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 2014-08-07
      • 2011-11-21
      • 2021-12-25
      • 2022-01-26
      相关资源
      最近更新 更多