【问题标题】:How to make a .Net or JVM language?如何制作 .Net 或 JVM 语言?
【发布时间】:2010-10-17 12:38:54
【问题描述】:

我看到了所有这些用于 .NET 和 JVM 的新语言。一个人如何开始制作一个?

我找不到任何关于 JVM 或 MSIL 规范的好的文档。

编辑

我已经知道如何解析,我更感兴趣的是为什么有这么多人基于这些平台制作新语言。

【问题讨论】:

    标签: .net compiler-construction jvm


    【解决方案1】:

    对于 .NET,您可以使用 DLR 的表达式树,甚至可以编译成现有的高级语言,如 C# 或 Java,然后对其进行编译。一些高级非 VM 语言(如 Haskell 和 Eiffel)编译为 C。如果您想编译为 MSIL 或 JVM 字节码,可以使用Mono.CecilBCEL 使这更容易做到。

    【讨论】:

      【解决方案2】:

      更新问题的答案:

      我已经知道怎么解析了,我更懂 对怎么有这么多感兴趣 人们正在创造新的语言 基于这些平台。

      使这么多人能够为这些平台开发语言的原因可能是有几个非常完整的示例以及公开的源代码。

      平台的规范可供下载,并且已经有编写编译器经验的人很快就可以为他们现有的编译器生成针对新平台的新后端。

      微软自己发布了Rotor,当然也有Mono。还有许多流行的运行时代码生成技术可以即时构建简单的包装类 - 这些也是迷你编译器。

      C# 编译器非常快,并且以直接的方式公开了 CLR 的大部分功能,因此您可以编写一个编译器来简单地生成临时 C# 文件,然后让 C# 编译器完成这项工作。

      【讨论】:

        【解决方案3】:

        MSIL 不再称为 MSIL,作为公共标准,它是 CIL(通用中间语言),是 CLI(通用语言基础结构)标准的一部分。

        这是ECMA-335 CLI 标准规范。

        【讨论】:

          【解决方案4】:

          你有点走运。为 .NET 开发的语言呈爆炸式增长,并且有针对像您这样的个人的文章/资源(不仅仅是有大量资金可以投资的大公司)。

          搜索“动态语言运行时”,然后从那里开始。

          这里有一些链接:

          Blog of the guy who is the brain behind IronPython

          The home of the Dynamic Language Runtime

          An article about how IronPython was implemented

          A blog posting talking about abstract syntax trees and the DLR

          【讨论】:

            【解决方案5】:

            Java Virtual Machine Specifications, Second Edition 可在线获取。

            可以通过编写一个生成 Java 字节码(在 JVM 规范中定义)的编译器来定位 JVM。

            或者,通过利用现有的库,例如 Apache BCEL,可以通过 Java 程序生成有效的 class 文件,而无需在字节级别实际操作字节码。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2023-03-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-03-23
              相关资源
              最近更新 更多