构建java语言的扩展 - 步骤?

Joe*_*dev 7 java struct

我想知道构建某种Java扩展或插件所需的一般步骤是什么.更具体地说,我希望在java中构建类似C++结构的东西,这将允许我从特定类声明方法,以便我可以指示它们应该由JVM执行的顺序.现在这只是天空中的馅饼,我对AspectJ或其他java扩展的工作方式如何工作以允许您声明非Java原生的语法感兴趣.我假设这需要某种编译器插件.

举个例子,我设想如下

public struct weakProfile {
   streamDataViaGprs();
   sendSimpleMap();
}

public struct strongProfile {
   streamDataVia3G();
   sendComplexMap();
   sendAudio();
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,如果我有一个Web服务并且客户端具有弱配置文件,这意味着他们用于调用服务的设备具有低处理和差的带宽功能,那么我只想提供仅功能streamDataViaGprs()sendSimpleMap()功能.但是,如果客户端设备具有强大的处理能力和出色的带宽连接,那么我想streamDataVia3G(),sendComplexMap()sendAudio().这是我的最终目标,但是我不确定如上所述开发结构会涉及什么,更不用说如果可能的话.

Ern*_*ill 16

没有编译器插件API.你可以做至少四件事:

1)为您的新语言编写自己的编译器,将您的代码转换为Java代码,然后将其提供给Java编译器(过去很流行,现在很少使用).您的"编译器"实际上可能只进行简单的文本转换,将大部分代码保持不变,因此如果您的更改很小且是本地的,这是一种合理的方法.

2)为您的新语言编写自己的编译器,该语言会发出Java .class文件(现在非常常见:Groovy,Scala,Clojure都以这种方式工作.)

3)使用"字节码工程库"来获取已编译的.class文件,分析它们,修改它们,然后将它们写回磁盘或动态加载和执行它们(这是AspectJ和大多数分析器所做的事情.)

4)获取Sun ^ H ^ H ^ HOracle的实际Java编译器的源代码 - 它在OpenJDK中可用 - 并对其进行修改.这是硬核,可能不是最好的计划.

当然,您选择哪条路径取决于您的技能和要求.

  • 我对这个答案的唯一问题是,提问者并不真正想要或不需要做他认为*他需要做的事...... (2认同)

小智 3

如果您使用 Eclipse,您可以查看Xtext。它允许您在 Eclipse 中创建 DSL 和代码编辑器(具有语法突出显示和代码完成功能)。

还有JetBrains MPS,即元编程系统。