【问题标题】:Are there any Common Lisp implementations for .Net?.Net 是否有任何 Common Lisp 实现?
【发布时间】:2008-09-21 07:00:30
【问题描述】:

.Net 是否有任何 Common Lisp 实现?

【问题讨论】:

    标签: .net lisp common-lisp language-implementation


    【解决方案1】:

    我最近没有看过它,但至少在过去,在 CLR 上完全实现 common lisp 时存在一些问题,如果这种情况发生了变化,我会有点惊讶。问题出现在处理浮点数之类的问题上,其中 .net/clr 有办法做到这一点,即 a) 略微不正确 b) 不同意通用 lisp 的 ANSI 标准,但 c) 不允许任何解决方法。还有其他类似的问题。这些东西很繁琐,也许不太重要,但意味着您不太可能在 CLR 上看到 ANSI CL。

    还有更大的问题,例如 common lisp 有一个更强大的对象系统,所以你不能将它 1:1 映射到运行时的对象(没有 MI,仅此而已)。这没关系,但给您留下了一种内部/外部的方法,这是常见的运行时试图避免的......

    您是否会看到一个常见的 lisp-ish 变体在其上运行是另一回事,但我目前不知道(不是我仔细研究过)

    【讨论】:

    • 您可以使用 MOP 来采用您想要的任何对象模型。不过不太确定如何处理数字边缘情况问题。
    • @jfm3: 是的,你可以做很多事情,但它不会消除 CLOS 和运行时对象系统之间的阻抗不匹配。作为一个更通用的系统,CLOS 仍然必须将内容作为对象编组并退出运行时。您可以使用 MOP 使其宜居,但不完全是原生的。
    • Lisp 的对象系统如何比 .Net 更强大?
    • Hamish,CLOS 有多重分派和多重继承。除了之前/之后的方法,类和实例的动态(运行时)更新是可能的。所以调用解析很复杂,而且你根本无法在 .NET(或 Java,或 c++ 等)中重现它
    【解决方案2】:

    如果可以反过来,你可以通过Edi Weitz' RDNZL从你最喜欢的 Lisp 访问 .Net。

    【讨论】:

    • 现在以Bike重生。
    【解决方案3】:

    不,但您可能需要考虑在DLR 上运行IronScheme

    来自网站:

    IronScheme 的目标是成为基于 Microsoft DLR 的符合 R6RS 的 Scheme 实现。

    IronScheme 将完全重写 IronLisp,并结合开发 IronLisp 的经验教训。

    【讨论】:

    【解决方案4】:

    从 2008 年到 2010 年重新考虑这个问题,您现在可能想要考虑 CLR 上的 Clojure。它不是 Common Lisp,但如果你来自那个方向,它会很容易学习。与 CLR 的互操作非常简单,它每天都会吸引更多的用户,并解决其他几个重要的话题,比如并发性。可能值得投入一些时间。更多 CLR 特定 Clojure 信息here

    【讨论】:

      【解决方案5】:

      【讨论】:

      • 自 2009 年 1 月以来一直没有动过,可能已经死了
      • 这不是普通的 lisp。是另一种方言
      【解决方案6】:

      .NET 的完整通用 lisp http://code.google.com/p/uabcl/

      【讨论】:

      • 看起来好像是java
      • Sort of.. 我决定将 Java 中编码的内容留给 Java.. 但是它使用 IKVM 生成 .NET 程序集
      【解决方案7】:

      截至 2019 年,现在有 Bike:https://github.com/Lovesan/bike 它使用 lisp 兼容层实现了与 .Net Core 平台的跨平台 Common Lisp 接口。

      • 首先是RDNZL重生
      • 这一次,在 .Net Core 上,无需一行 C++ 代码,完全跨平台

      (在https://github.com/CodyReichert/awesome-cl#net-core上看到)

      【讨论】:

        【解决方案8】:

        #Script Lisp

        我正在开发#Script Lisp,它是Nukata Lisp 的增强版,具有许多新功能 它重用#Script 现有的脚本功能,以提供与#Script 其余部分的无缝集成 (见Language Blocks an Expressions) 和 .NET,包括 Scripting of .NET Types,支持所有 .NET 数字类型并访问其全面的 超过 1000+ Script Methods 的库 - 专为从动态语言访问 .NET 功能而设计。

        为了提高与现有 Common Lisp 源代码的兼容性,它还实现了大部分 Simplified Common Lisp Reference 以及在 Lisp 中实现 C# LINQ 101 示例所需的所有缺失函数:

        #Script Lisp LINQ Exmples

        为了提高可读性和熟悉度,它还采用了许多 Clojure 语法来定义 data list and map 文字, anonymous functions, Java Interop 中用于 .NET 互操作的语法, keyword syntax for indexing collections 和访问索引访问器 和 Clojure 流行的短别名 fndefdefn - 提高了与 Clojure 的源代码兼容性。

        YouTube 演示

        因为它是一流的#Script 语言,它受益于其广泛的支持用例生态系统,您可以在下面的 YouTube 视频中预览其中的一些:

        安装

        #Script Lisp 可以通过web 跨平台dotnet 工具立即安装,该工具可以安装:

        $ dotnet tool install -g web
        

        您可以通过以下方式启动即时 Lisp REPL:

        $ web lisp
        

        并且可以run and watch Lisp scripts 实时查看更改。

        Windows app dotnet tool 中提供相同的功能:

        $ dotnet tool install -g app
        

        此外,您还可以使用 #Script Lisp 开发 Gist Desktop AppsSharp Apps(.NET Core Windows 桌面应用程序)。

        【讨论】:

          【解决方案9】:

          你可以试试this(免责声明,我自己没有测试过)。另请阅读this。这就是链接的来源。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-03-23
            • 2017-06-08
            • 2019-01-18
            • 1970-01-01
            • 2020-08-16
            • 2010-11-07
            • 1970-01-01
            • 2020-12-18
            相关资源
            最近更新 更多