【问题标题】:Compiler as a service in JavaJava中的编译器即服务
【发布时间】:2012-09-09 12:28:47
【问题描述】:

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

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

【问题讨论】:

  • @bmargulies 注释与 roslyn 的方式完全不同,imo
  • 我同意。这就是为什么我没有把这句话放在答案中。
  • @GammaVega 看起来您需要开发一个 DSL,我认为 Java 在这项任务中远非最佳。你肯定最好在languages like Scala, Clojure, Groovy, Ruby/JRuby 中做到这一点(感谢与 java 的互操作,你仍然可以毫不费力地与 java 部分进行通信)。

标签: java scala compiler-construction


【解决方案1】:

我从未使用过 Microsoft Roslyn,所以我不确定它提供了什么。但是,如果您希望能够在运行时编译类,您应该查看自 Java SE 6 以来一直是标准 Java 的一部分的 JavaCompiler API。如果这不符合您的需要,您可能应该看看在Eclipse's ASTParser

【讨论】:

  • 请注意,它在 JDK 中,而不是在 JRE 中。在this answer 中可以找到具体的启动示例。
  • Roslyn Link - msdn.microsoft.com/en-US/roslyn Scala Compiler plugins Link - scala-lang.org/node/140 这两种语言都提供了一个很好的编译代码表达式树,允许检查和重新连接语法。
  • @GammaVega 此外,即将发布的 Scala 版本 (2.10) 包含 macros feature,允许您在编译时操作 AST 和重写代码,而无需编译器插件的负担。
【解决方案2】:

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

如果您想在运行时编译 Scala 源代码,您可以在 twitter/util 项目中查找 Eval

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-14
  • 1970-01-01
  • 2011-10-02
相关资源
最近更新 更多