使用.NET编写语言的优点、缺点和困难

使用.NET编写语言的优点、缺点和困难,.net,clr,language-design,.net,Clr,Language Design,我正在考虑可能在某个时候设计/构建一种语言,以及编写在.NET framework/CLR上运行的语言有哪些优点、缺点和困难?最困难的部分将是设计一种有效的编程语言。许多人把自己的整个职业生涯都献给了这项任务。因为这里有很多关于语言设计和一般解析的问题,所以我将特别关注针对CLR的方面 优势 使用.NET4.0中的System.Reflection.Emit名称空间和全新的System.Linq.Expressions功能,以二进制形式生成字节码非常简单。这种设置是我个人希望瞄准CLR的主要动

我正在考虑可能在某个时候设计/构建一种语言,以及编写在.NET framework/CLR上运行的语言有哪些优点、缺点和困难?

最困难的部分将是设计一种有效的编程语言。许多人把自己的整个职业生涯都献给了这项任务。因为这里有很多关于语言设计和一般解析的问题,所以我将特别关注针对CLR的方面

优势

  • 使用.NET4.0中的
    System.Reflection.Emit
    名称空间和全新的
    System.Linq.Expressions
    功能,以二进制形式生成字节码非常简单。这种设置是我个人希望瞄准CLR的主要动机之一
  • 您的代码将受益于CLR的JIT和内存管理器中内置的许多优化
  • 一般来说,如果您选择以CLR为目标而不是构建自己的本机代码,那么您将能够在更短的时间内为您的语言构建一个工作的编译器
缺点

  • 它将只在.NET framework运行的平台上运行。如果您避免P/Invoke调用,那么在Mono项目的帮助下,这应该不是问题
  • 您必须将语言中的语义结构降低到可以在CIL指令和CLI对象模型中表示的形式。对于过程性的、强类型的、可选的面向对象语言,这相当简单。对于函数式或动态类型语言,这可能是一个相当大的挑战,但是如果需要这些功能,您可能会从DLR获得一些帮助
  • 一般来说,您无法方便地访问机器内部函数,因此对于一种面向高性能/矢量化科学计算的语言,当前实现可能会面临一些性能问题。Mono正在积极地研究这个问题,但Mono和.NET框架都没有将其作为“一项成熟的技术”来使用
困难(不包括语言和编译器前端)

  • 最“有趣”的方面是在CLR的限制下展示表达语言语义结构的方法
  • 这里没有太多要说的。与其他目标相比,以CLR为目标非常容易
摘要

CLI对于从事新语言实现的人员来说是一个很好的选择。它允许您将注意力从通用编译器后端转移到语言本身的语义上。我可能不建议有人创建一种新的语言,但如果您决定创建,CLI将是您旅途中的好朋友