在 IBM i 上,java 编译器会 "speak" ILE 吗?

On IBM i, will java compiler ever "speak" ILE?

在 IBM i 上,java 编译器会 "speak" ILE 吗?谷歌搜索发现了各种代码示例,展示了 RPG 如何调用 java 方法,但找不到任何关于 java 是 ILE 语言的参考。有没有这方面的计划,或者为什么 java 不能成为 IBM i 上的 ILE 语言?

Java 在 IBM i 上不是一种 ILE 语言......它实际上在 PASE 中运行(对于更多当前版本)。

RPG 可以通过创建 JVM 和 运行 java 应用程序来调用 Java 代码。

从 Java 调用 RPG 代码的正常方法是使用 ProgramCall or ProgramCallDocument 类.

使 Java 成为 完整的 ILE 语言,就像 RPG 和 ILE C 一样,将是一项艰巨的任务,如果它完全可行的话。 ILE 语言具有 属性 其编译模块可以在 linking 到 ILE 程序中时自由混合和匹配。换句话说,一旦您编译了一个模块,您在概念上就拥有了一个 ILE 模块,并且在该模块的源代码中使用哪种语言并不是很重要。您所要做的就是确保调用代码中的所有函数或过程原型与被调用代码中的相应原型兼容。

在 Unix/Linux 世界中有一个项目试图用 Java 做到这一点,称为 GNU Compiler for Java (GCJ)。这个想法是将 Java 模块编译成二进制形式,这种形式可以通过(例如)使用 GCC 的 C++ 代码直接 link 实现。目前还不清楚这是否曾经达到 "production quality",并且在撰写本文时,GCJ 不再是 GCC 的一部分。因此,您可以将 GCJ 视为假设的 ILE Java 的概念证明,以及针对 ILE Java.

的警示故事

在任何一种情况下,实现 ILE Java 所需的努力可能都不足以带来相对较小的收益。虽然您目前无法 link Java 直接使用 ILE 代码进行编码,但您仍然可以 调用 Java 来自 RPG,调用 来自 Java 的 RPG,这对于大多数用例来说已经足够好了。

什么比 full-blown ILE 更容易 Java 是 JVM 的本机 IBM i 实现,使用 ILE 语言(最明显的选择是 ILE C 或 ILE C++),这样 PASE 根本就不会被使用。但是走这条路仍然需要使用现有的从 RPG 调用 Java 的方式,反之亦然,因此收益几乎为零。而将 JVM 移植到 ILE C++ 的工作量绝对大于零。另请记住,IBM 可能希望将他们的 JVM 更新为 more-or-less 与 Oracle 的 JVM 保持同步,使用以 PASE 实现的 JVM 而不是以 ILE 语言实现的 JVM 更容易做到这一点。