【发布时间】:2010-03-02 20:23:57
【问题描述】:
目前这只是一个想法,但我想知道在输出 Windows EXE 的同时使用 Mono 编译器或编写新编译器有多难?
产生这种想法的原因是,我看到人们创造性地“滥用”C# 语言来启动和运行代码契约或面向方面编程等一些东西,有时感觉人们太过分了。
.net 的好处在于,最后,我们想要的只是 .net 2.0 CLR 的有效 IL。但是,Microsoft C# 编译器已关闭,无法扩展。只有在不同的程序集中才能混合使用不同的语言。
这个想法(警告:听起来可能很可怕)是使用可以扩展的编译器并将其作为一种预处理器运行。这样就可以添加新的关键字和语言概念,同时仍然返回有效的 IL。
当然,明显的缺点是 a) 它不再是 C#,而是其他人无法理解的 C# 衍生版本,b) 编写编译器很困难,因为必须遵守无数规则才能保持高质量和逻辑语法。
但如前所述,这只是暂时的想法。这与 Mono.Cecil 采取的方向有点相同,但方法完全不同。
【问题讨论】:
-
一个相当主观的问题有多难,如果你足够了解编译器理论和 .NET CLR,以至于你正在认真考虑尝试它,那么一定要去做,看看你是否取得了任何进展。我还不得不想象有可能对 Microsoft 编译器进行逆向工程,除非他们明确地努力保护它,而不是大多数框架当然可能违反某种类型的许可。
-
我是 EE 而不是软件专家,但我很快就学会了 ANTLR。您可以轻松地输出程序集并将 C# 代码重写为构建前/构建后的步骤,并在程序集中调用存根。
标签: c# .net compiler-construction mono