是否有适用于 .Net 的 Common Lisp 实现?
是否有适用于 .Net 的 Common Lisp 实现?
我最近没有仔细研究过它,但至少过去存在一些在CLR上完全实现Common Lisp的问题,如果这个问题得到解决,我会有点惊讶。问题出现在处理浮点数等方面,.Net/CLR有一种方法可以做到 a)微妙地不正确 b)与Common Lisp的ANSI标准不一致,但c)不允许任何绕开此问题的方式。还有其他类似的问题。这些东西很琐碎,也许并不太重要,但意味着你不太可能在CLR上看到一个ANSI CL。
更大的问题是,例如,Common Lisp具有更强大的对象系统,因此您无法将其1:1映射到运行时中的对象(例如没有MI)。这是可以接受的,但会给您留下一种内外分离的方法,而这正是普通运行时试图避免的...
无论是否会看到在其上运行的Common Lisp-ish变体都是另一回事,但目前我不知道有任何情况(并不是因为我已经认真寻找了)
如果你现在重新思考一下2008年的这个问题,你可能会考虑使用CLR上的Clojure。虽然它不是Common Lisp,但如果你是从那个方向来的,学习起来还是相当容易的。与CLR进行互操作非常简单,每天都有更多的用户加入,并解决了一些其他重要的主题,比如并发性。可能值得花费一些时间在这上面。更多关于CLR特定的Clojure信息 这里。
全功能的Common Lisp for .NET http://code.google.com/p/uabcl/
我正在开发 #Script
Lisp,这是一个增强版的 Nukata Lisp,具有许多新功能,可以重用 #Script
现有的脚本功能,以提供与 #Script
的其余部分(请参见语言块和表达式)以及 .NET 的无缝集成,包括 .NET 类型的脚本化,支持所有 .NET 数字类型,并访问其全面的库,其中包括超过1000+脚本方法 - 这些方法是为从动态语言访问 .NET 功能而优化设计的。
为了提高与现有的 Common Lisp 源代码的兼容性,它还实现了大多数 简化版 Common Lisp 参考手册,以及实现 C# LINQ 101 示例所需的所有缺失函数:
为了提高可读性和熟悉度,它还采用了许多Clojure语法来定义数据列表和映射文字, 匿名函数, Java互操作的语法用于.NET互操作, 关键字语法用于索引集合和访问索引访问器,并使用Clojure的流行缩写形式fn
、def
、defn
,提高了与Clojure的源代码兼容性。
由于它是一种一流的#Script
语言,因此它受益于其广泛支持的用例生态系统,以下是您可以在YouTube视频中预览的其中几个:
#Script
Lisp 可以通过x跨平台的 dotnet
工具即时安装,命令为:
$ dotnet tool install -g x
你可以使用以下命令快速启动Lisp REPL:
$ x lisp
并能够 运行并观看 Lisp 脚本,您可以实时查看更改。
相同的功能也可在 Windows 应用程序 dotnet 工具 中使用:
$ dotnet tool install -g app
此外,它还可以让您使用#Script
Lisp来开发Gist桌面应用程序和Sharp应用程序(.NET Core Windows桌面应用程序)。