CLR 编译器

Compiler for CLR

我正在努力构建一种使用 .net/clr 的小型语言或 dst。除了大量阅读之外,我取得的最大进步是一个 C# 程序,它接受一些基本输入(没有 ebnf 实际词法分析或花哨的解析)并使用 ILgenerator 创建一个带有操作码的 hellow world 程序。

这显然不是编译器,但我认为在 vm 上调用操作码是编译器会做的事情。

正在研究我注意到的主题ILgenerator is not supported from netcore 3.0 and up (ms 'wants' 以后再支持)。

我调查了 Boo 看起来很有希望,但注意到它卡在 .net 上,存在一些阻塞问题 atm。

我想知道的是,

  1. 对于实际的编译器,您还可以调用操作码吗?或者我如何在没有 ILgenerator 的情况下与 clr 交互。我需要手动生成 CIL/MSIL 吗?
  2. 有什么好 tools/languages 为 CLR 定义编译器而无需它为您完成所有工作。
  3. 现在我需要以 coreCLR 为目标,而不仅仅是 clr 吗?

我尝试围绕 .net/C# 展开这些主题,因为这是我在工作中使用的 atm 并且想了解 CLR /编译器。

这里是 Boo 维护者。

Researching the subject I noticed ILgenerator is not supported from netcore 3.0 and up (ms 'wants' to support it again in the future).

I looked into Boo looked promising but noticed it's stuck on .net with some blocking issues atm.

这实际上是一回事:“阻塞问题”无法保存程序集,因为Boo最初写的时候,Reflection.Emit基本上是唯一的镇上的游戏。今天有更好的工具,但重写 IL 生成器以使用它们是一个漫长而费力的过程。

For a actual compiler would you also jsut call opcodes or how do I interact with clr without ILgenerator. Do I need to generate CIL/MSIL by hand?

使用更好的工具。如今,通常建议使用 System.Reflection.Metadata 来生成程序集。 Roslyn(Microsoft 的 C# 编译器)有自己的内部系统,似乎是基于 CCI,尽管 CCI 已被正式弃用并且不建议其他任何人使用。

What are nice tools/languages to define a compiler for CLR without it doing all of the work for you.

Boo 编译器的大部分是用 C# 编写的。一些非常高级的部分是用 Boo 编写的。最终,如果能在 Boo 中实现所有功能就好了,但这是一个长期目标。

Do I need to target coreCLR nowadays instead of just clr ?

是的。根据 .NET Foundation 的说法,.NET Framework 4 正式成为死胡同,前进的方向是 .NET Core,如今他们简称为“.NET”。当前版本名为“.NET 6”,但它仍然是 CoreCLR 架构。