我想知道构建某种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中可用 - 并对其进行修改.这是硬核,可能不是最好的计划.
当然,您选择哪条路径取决于您的技能和要求.
小智 3
如果您使用 Eclipse,您可以查看Xtext。它允许您在 Eclipse 中创建 DSL 和代码编辑器(具有语法突出显示和代码完成功能)。
还有JetBrains MPS,即元编程系统。
| 归档时间: |
|
| 查看次数: |
3268 次 |
| 最近记录: |