我有一个相当复杂的LispWorks Common Lisp模块,通过RDNZL连接到一些.NET模块上。
现在需要将其部分功能暴露给其他.NET应用程序,但我不确定在不重写C#模块的情况下处理这个问题的最佳(最短)方法。我知道有几个CLR Lisp实现,但大多数似乎未维护或不完整,并且有许多东西无法轻松地在Scheme中重写。
是否有任何机制可以公开与RDNZL相反的功能(.NET -> Common Lisp)?我可以使用RDNZL提供接受.NET对象的DLL吗?
我正在编辑此内容,以包含大多数对Lisp感兴趣的Windows用户可能会知道的选项,以及它们为什么不完全符合上述要求(或者像您的用户一样,我没有充分传达我的需求:)。
- IronScheme-不错、快速、经过维护和快速,但不是Common Lisp。
- ClojureCLR-不是Common Lisp;Beta版,在我这里启动需要约4秒钟(对于长时间运行的应用程序可接受,但对于需要新实例化然后进行几十次调用的应用,不太适用)。
- LSharp-不是Common Lisp,也没有得到维护。
- RDNZL-允许在.NET代码中注册CL回调委托,但您必须从CL开始,而且没有比较简单的方法(迄今为止我还没有能够找出)将.NET对象传递到由您选择的Common Lisp实现创建的“C DLL"。
- Yarr-建立在LSharp之上(包括defmacro和其他一些必需品)。看起来已经有一段时间未得到维护,但可能是目前最好的选择。