Java 中的编译器即服务

Gam*_*ega 5 java compiler-construction scala

Microsoft Roslyn - 编译器即服务是 .NET 堆栈的一个很好的补充;我在 Java 世界中寻找类似的东西。我相信 Scala 在编译器插件的形式上有类似的东西,但不确定它有多灵活。

我试图在 Java 世界中解决的问题是允许用户编写一些自定义语法,并在内部将其重新连接为不同的语法。

par*_*tic 2

Scala 将在下一版本 (2.10) 中支持宏。您已经可以使用里程碑版本来检查它是如何工作的。基本上,它们允许在编译时修改 AST。所以你可以用另一个 Scala 片段重写 Scala 的任何片段。检查scalamacros网站上的示例和文档。

Eval如果你想在运行时编译Scala源码,你可以在twitter/util项目中寻找。

  • 在 2.10 中,我们还支持开箱即用的运行时编译:http://stackoverflow.com/questions/12122939/generating-a-class-from-string-and-instantiating-it-in-scala-2-10/12123609# 12123609。 (4认同)