c# – 使用Mono编译器/创建一个新的仍在输出Windows EXE?

这只是一个想法,但是我想知道在使用Mono编译器还是在输出
Windows EXE的同时写一个新编译器有多难?

这种想法的原因在于我看到人们“创造性地”滥用C#语言以获得诸如代码合同或面向方面的编程之类的东西,并且有时感觉人们伸展得太远了.

关于.net的好处是,最后,我们想要的只是.net 2.0 CLR的有效IL.但是,Microsoft C#编译器已关闭,无法扩展.只能在不同的程序集中混合使用不同的语言.

这个想法(警告:可能听起来很可怕)是使用可以扩展的编译器并将其作为一种预处理器运行.这样就可以在仍然返回有效IL的同时添加新的关键字和语言概念.

显而易见的缺点当然是a)它不再是C#而是C#-derivate,没有其他人能理解,b)编写编译器很难,因为必须遵守无数规则以保持高质量和逻辑语法.

但正如所说,这只是现在的想法.这与Mono.Cecil采用的方向略有不同,但却是一种完全不同的方法.

最佳答案 我期待编程从文本转向更有条理的东西.程序已经非常结构化,但仍然是纯文本编辑,使得IDE成为独创性的主要练习.在此基础上添加编译器可扩展性,并且创建一个像Visual Studio一样友好的IDE听起来更令人生畏.

基于AST的宏C#在允许更多“创造性滥用”语言方面会有很长的路要走,但我觉得真正的前进方向是Language-oriented programming.这种方法已经被提倡多年,但这个范式的第一个系统是我个人觉得真正吸引人的是JetBrains’ Meta Programming System.它似乎还不是很知名,我当然没有实际使用它的实践经验,但他们已经发布了使用这个系统构建的优秀产品,所以它必须合理实用.该教程展示了它可扩展的程度,这真的很棒 – 特别是如果以前没有看过面向语言的系统.

如果要沿着这条路线前进,那么只有部分现有的Mono编译器是相关的.你可能有意义地重用代码gen的大部分,但显然解析器完全没用.

类似于MPS的系统,但编译为.NET并很好地集成到Visual Studio中,确实非常受欢迎.

(并且回答你直接问的问题:我认为很难做到这一点很好地看到广泛的采用,但对于一些伟大且有动力的开发人员来说肯定不是不可能的)

点赞