Tag: gmcs

扩展Mono C#编译器:有没有任何文档或先例?

我目前正在参与一些有趣的编程语言研究,到目前为止,该研究主要围绕使用一些非常强大的基于程序员生产力的function扩展即将推出的Java 7.0编译器。 该工作应同样适用于相关的编程语言,如C#。 我目前正在寻找原型化C#端口function的选项。 我更喜欢开源选项,以便可以与最广泛的受众分享这项工作的成果。 因此,Mono C#编译器似乎是最明显的起点。 我是一位经验丰富的C#开发人员,所以编写代码不是问题。 我主要关心的是以可维护和支持的方式扩展编译器。 在关于这个主题的Mono FAQ( 链接 )中,声明“Mono已被用作尝试C#语言的新思想的基础(有三个或四个编译器派生自Mono的C#编译器)”。 不幸的是,没有比此更多的指示,到目前为止,谷歌的搜索没有任何改变。 我想知道是否有人有这方面的任何信息。 mcs / gmcs / dmcs是否具有标准的可扩展性模型? 具体来说,我将在程序的抽象语法树上执行一些有趣的转换。 是否有一种标准机制,用于在抽象语法树生成和类型检查器之间插入function到编译器链中,然后生成代码? 到目前为止,我已经为代码编写了一些特别的扩展(主要是在代码生成器中),但这似乎不是一个可维护的解决方案,特别是考虑到我打算让我的扩展更新为Git主干单声道尽可能多。 此外,能够更新我的扩展,而不必每次进行更改时都重新编译整个编译器,这将是很好的。 我希望能够将我的所有AST操作包装到一个可以由mcs / gmcs / dmcs动态加载的.NET程序gmcs而不必直接破解核心编译器代码。 任何有关扩展Mono C#编译器的想法或指示都将非常感激! 更新(2010年10月23日) 在回答我的问题时,我决定开始研究Mono的一个分支,以便为编译器创建一个简单的可扩展性模型。 这是在它的早期阶段,但它在GitHub: http://github.com/rcook/mono-extensibility 主要提交是: http : //github.com/rcook/mono-extensibility/commit/a0456c852e48f6822e6bdad7b4d12a357ade0d01 如果有人对此项目的合作感兴趣,请告诉我!

单声道编译器即服务(MCS)

我想从我的常规.NET 3.5应用程序中使用Mono的编译器作为服务。 我已经下载了最新的位(2.6.7),在Visual Studio中创建了一个简单的控制台应用程序并引用了Mono.CSharp dll。 然后,在我的控制台应用程序中(直接在线样本): Evaluator.Run(“using System; using System.Linq;”); bool ress; object res; Evaluator.Evaluate( “from x in System.IO.Directory.GetFiles (\”C:\\\”) select x;”, out res, out ress); foreach (var v in (IEnumerable)res) { Console.Write(v); Console.Write(‘ ‘); } 这会在Evaluator.Run(第一行)引发exception: Illegal enum value: 2049. Parameter name: access 这是因为dll是使用Mono.exe编译的,而不是csc.exe,我相信。 我已经尝试直接从demo-repl.zip文件中的http://tirania.org/blog/archive/2010/Apr-27.html下载Mono.CSharp dll ……这不会引发exception。 ..但是在调用Evaluator.Evaluate之后out参数(res)是null …所以我不确定出了什么问题。 没有例外被抛出…… 所以,我想弄清楚为什么我从demo-repl.zip下载的dll返回null。 编辑:我弄清楚为什么它返回null。 看起来由于某种原因,编译器没有拿起System.Linq命名空间……虽然我不知道为什么……如果我只是评估“System.IO.Directory.GetFiles(\”C:\\ “)”,它运作正常。 […]