【发布时间】:2017-09-07 21:13:34
【问题描述】:
我公司内部软件项目大多使用 Java 完成的主要原因是 Java 程序独立于主机架构,这为将应用程序分发到国际部门提供了很大的灵活性。
我们需要启动一个新的应用程序,它会进行大量的数字运算,我想使用我们可用的 C++ 库和代码(我也更喜欢 C++)。
现在我想知道为什么没有一些软件在以下意义上像 Java JIT 编译器一样工作:
- 执行编译直到intermediate representation,例如 LLVM IR
- 将打包的中间表示分发到客户端计算机
- 在本地机器上编译一次
- 执行
这将结合 Java 和 C++ 的几个优点:
- 本地机器架构的优化(就像 JIT 所做的那样)
- 分发独立于操作系统的软件版本 (Java)
- 在中间没有虚拟机的情况下执行程序 (C++)
这样的事情没有完成的原因是什么?
【问题讨论】:
-
性能,主要是。直接在目标平台上编译的 C++ 通常比依赖中间语言的语言(如 Java 和 .NET 系列)要快得多,因为编译效率更高,并且在运行时不需要任何解释。这是课程的马 - 人们将 C++ 用于 O/S 级别的东西和对性能至关重要的东西,如游戏,他们将 Java/.NET 用于 LOB 应用程序等,因为内存管理更容易一些,有更多的语言特性,你可以针对多个平台。换句话说,您使用正确的工具来完成这项工作。
-
@ADyson 的想法是在目标平台上进行编译。
-
我对编译器了解不多,但我强烈怀疑中间编译步骤仍会以性能为代价。针对特定目标进行编译允许编译器对源代码进行优化,从而利用目标平台的特性。如果你编译到一些通用的中介,很有可能会丢失微妙之处。
标签: java c++ compilation