【问题标题】:Connecting .NET to Common Lisp将 .NET 连接到 Common Lisp
【发布时间】:2010-04-22 16:03:26
【问题描述】:

我有一个相当复杂的 LispWorks Common Lisp 模块,它通过 RDNZL 位于一些 .NET 模块之上。

我需要将它的一些功能公开给其他一些 .NET 应用程序,我不确定在不使用 C# 重写模块的情况下最好(最短)的方法。我知道有一些 CLR Lisp 实现,但大多数似乎没有维护或不完整,而且有很多东西不能在 Scheme 中简单地重写。

是否有任何工具可以公开与 RDNZL 启用的功能相反的功能(.NET -> Common Lisp)?我可以使用 RDNZL 来提供接受 .NET 对象的 DLL 吗?


我正在编辑此内容,以包括一些对 Lisp 感兴趣的人可能会知道它们是否在 Windows 上的选项,以及为什么它们不能完全满足上述要求(或者像您的用户一样,我如何没有充分表达我的要求:)。

  • IronScheme - 不错、快速、维护和快速,但它不是 Common Lisp
  • ClojureCLR - 不常见的 Lisp;测试版,我需要大约 4 秒来启动(对于长时间运行的应用程序是可以接受的,而不是需要新的实例化然后进行几十次调用的事情)
  • LSharp - Not Common Lisp,未维护
  • RDNZL - 允许使用 .NET 代码注册 CL 回调委托,但您必须从 CL 开始,没有相对简单的方法(到目前为止我已经能够弄清楚)将 .NET 对象传递到“ C DLL”由您选择的 Common Lisp 实现创建。
  • Yarr - 建立在 LSharp 之上(包括 defmacro 和其他一些必需品)。看起来有一段时间没有维护,但可能是目前最好的选择。

【问题讨论】:

  • 也许您可以将您的 CL 代码移植到 Clojure 并使用 clojure-clr? :

标签: .net lisp common-lisp


【解决方案1】:

“出现了我要曝光的问题 它的一些功能对一些 其他 .NET 应用程序”

以下内容并不完全符合您的要求,但如果您想跳出框框思考一下,我认为使用消息传递可能是最简单的(这完全基于上面引用的声明)。 ZeroMQ 之类的东西,它具有 Common Lisp 和 .Net 的绑定。那么问题就不是如何重写模块以使其与 .Net 兼容,而是如何将消息传递集成到模块中以供独立的 .Net 应用程序使用它。对话双方必须就消息传递格式达成一致,但在我看来,这比您在帖子中考虑的路线更容易。

如果您必须制作多个应用程序,也许发布/订阅架构会满足您的需求。

【讨论】:

  • 好吧,我同意这对于这个特定的实例来说可能会更容易,但我认为对于 CL 人员来说,可以选择在很大程度上按原样使用他们的代码是一件非常积极的事情。此外,它的 CL 包装器是在 LGPL 下发布的,通常是 frowned upon 支持 LLGPL。我可以联系作者。
  • 而且,要真正解决您的建议,这种方法最大的缺点是它为较小的程序和模块引入了看似不必要的工作,并且需要维护和监视两个应用程序。
  • 好吧,这只是需要考虑的事情。当然,您会找到最适合您的方法。我只提出它的原因 1:听起来你无论如何都会有多个应用程序和 2:根据我自己的经验,拥有通过消息对话的小型、高度专业化的应用程序比拥有试图成为全部的大型应用程序/模块更容易所有消费者的东西。那我个人讨厌移植代码(比如 clojure 建议),所以这是我倾向于使用的那种心理工具集。 YMMV。
  • 我非常感谢这个建议。我就许可证与开发人员联系,并且可能会为此找到目的,无论是否针对此特定情况。谢谢。
【解决方案2】:

您可能会对 LSharp 感兴趣 LSharp 还有Iron Scheme 还有Xronos,自称是Lisp方言。

我会花一点时间研究它会有多难 将您的代码移植到 F#,具有以下限制和差异 语言已经超过了 Lisp。里面肯定有不少结构 Lisp,我很难优雅地压入 F#。

【讨论】:

  • 是的,我最近因为其他原因拿起了几本关于 F# 的书。当前系统大量使用宏,并暴露了一些相关的 DSL,这些 DSL 在非 Lisp 中难以表达(或至少重写)。
  • Xronos 看起来很有趣,但它似乎停留在 0.1,7 个月内没有提交,13 个月内没有邮件列表帖子。谢谢你指出来,我以前没见过。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
  • 2014-02-20
  • 1970-01-01
相关资源
最近更新 更多