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

RCI*_*CIX 6 .net clr language-design

我正在考虑可能在某个时候设计/构建一种语言,在.NET框架/ CLR上运行它的优点,缺点和难点是什么?

Sam*_*ell 21

最难的部分是设计一种有效的编程语言.许多人将他们的整个职业生涯奉献给了这项任务.由于这里有很多关于语言设计和一般解析问题的问题,我将专注于定位CLR的方面.

好处

  • 使用System.Reflection.Emit命名空间和System.Linq.Expressions.NET 4.0中令人敬畏的新功能,以二进制形式生成字节代码相当简单.这个设置是我个人希望定位CLR的主要动力之一.
  • 您的代码将受益于CLR的JIT和内存管理器中内置的许多优化.
  • 通常,如果您选择定位CLR而不是构建自己的本机代码,那么您将能够在更短的时间内为您的语言构建一个可用的编译器.

缺点

  • 它只能在运行.NET框架的平台上运行.如果您避免P/Invoke调用,那么在Mono项目的帮助下,这应该不是问题.
  • 您必须将语言中的语义结构降低为CIL指令和CLI对象模型中可表示的形式.对于过程性,强类型,可选的面向对象语言,这很简单.对于功能或动态类型语言,这可能是一个非常大的挑战,但如果您需要这些功能,您可以从DLR获得一些帮助.
  • 通常,您将无法方便地访问机器内部函数,因此对于针对高性能/矢量化科学计算的语言,您可能会遇到当前实现的一些性能问题.Mono正在积极解决这个问题,但Mono或.NET Framework都没有将其作为"既定技术".

困难(不包括语言和编译器前端)

  • 最"有趣"的方面是在CLR的限制下阐述表达语言语义结构的方法.
  • 这里没有太多要说的了.与其他目标相比,定位CLR非常容易.

摘要

对于从事新语言实现的人来说,CLI是一个很好的选择.它允许您从常见的编译器后端开始,并专注于语言本身的语义.我可能不会建议有人创建新语言,但如果您决定,CLI将成为您旅途中的好朋友.