【问题标题】:Using Mono Compiler/Creating a new one while still outputting a Windows EXE?在输出 Windows EXE 的同时使用 Mono 编译器/创建新编译器?
【发布时间】: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


【解决方案1】:

我期待编程从文本向更结构化的方向发展。程序已经非常结构化,但仍以纯文本形式进行编辑,这使 IDE 成为了独创性的主要练习。在此基础上添加编译器可扩展性,创建像 Visual Studio 一样友好的 IDE 听起来更加令人生畏。

基于 AST 的宏 + C# 在允许更多“创造性滥用”该语言方面将大有帮助,但我认为真正的前进方向是Language-oriented programming。这种方法已被提倡多年,但我个人认为这种范式的第一个真正吸引人的系统是JetBrains' Meta Programming System。它似乎还不是很有名,而且我当然没有实际使用它的实践经验,但是他们已经发布了使用该系统构建的出色产品,因此它必须相当实用。该教程展示了它的可扩展程度,这确实令人惊叹——尤其是如果以前没有见过面向语言的系统的话。

如果要走这条路,那么只有现有 Mono 编译器的一部分是相关的。您可能可以有意义地重用大部分代码生成,但显然解析器根本没有用。

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

(并直接回答您提出的问题:我认为很难做到这一点以使其被广泛采用,但对于一些优秀且积极进取的开发人员来说肯定不是不可能的)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-28
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 2015-05-01
  • 1970-01-01
  • 2021-06-11
相关资源
最近更新 更多