碰巧我在 C/C++ 中工作了很多,而没有在 Java 中工作。现在,我看到移动平台对 Java 的需求很大。作为一个相当懒惰的人,我想避免完全学习 Java。我想继续用 C++ 编写,但不是将 C++ 代码翻译成本机代码,而是翻译成 Java 机器的代码。
问题:
- 现在有没有将 C++ 代码转换为特定平台的本地代码,而是转换为 Java 机器的代码的技术?以便稍后此代码在任何平台上的 Java 机器上作为 Java 代码执行。
UPD1:
根据我的概念,Java 代码现在被翻译成抽象 Java 机器的一些中间代码。在不同的平台上,有一个 JIT 转换器,当此代码运行时,将其转换为该平台的本机代码并启动它。还是我错了?
UPD2:
这似乎是一件容易的事。拿 GCC 翻译器,离开解析器,代替 x86 平台的代码生成器,为 Java 机器编写代码生成器。还没有人制造过这样的混合动力车吗?
UPD3:
然后是第二个问题,与第一个有关:
问题:
- Java 程序是如何分发的?Java 程序是以源代码分发的,还是 Java 程序以 Java 机器的代码分发的?
有几个,但不是事实,它适用于移动平台,并且在开发过程中使用它真的很方便:
嵌套虚拟机:
海合会桥:
一组用于 LLVM 的库和工具,用于将 C 编译为 JVM 字节码:
让我们按顺序进行:
有这样的技术,但只是在最深的beta中以某种研究的形式出现,产品中没有这样的技术。
不管多么真实,但整个问题在于,这项工作是在虚拟机端完成的,即 JVM 接收字节码并将其发送给 JIT,JIT 将其翻译成平台相关的指令。
不,这并不容易,在 C / C ++ 中,内存管理是程序员关心的问题(语言工具),而在 Java 中,它是通过 JVM(在语言本身之外)解决的功能 - 直到你消除了这个矛盾,就语义而言,您不会得到成熟的 C/C++。
.classJava 程序以归档中收集的目标代码的形式分发.jar/ear/war/zip对于 Android,它通常打包在
APK包含翻译成 Android 虚拟机的字节码指令的档案中(它与 JVM 字节码不同)更新
通过 Android 中的 VM。Dalvik 及其较新的 ART 与 Sun JVM 的不同之处在于 Android 机器具有面向寄存器的架构,而 San 的机器具有面向堆栈的架构,这需要节省与手机/智能手机相关的 RAM。
Dalvik 从 2.2 版开始,具有 JIT,它在首次启动时被编译成本地代码,ART 使用其称为 AOT(Ahead-Of-Time)的类似物,它在安装时已经编译成本地代码。
作为一个纯粹的理论理论家...... :)
UPD1。并不真地。字节码在解释模式下执行,在运行时被解析,“热”代码被编译为本机代码——两者的结合。
UPD2。再说一次,我没听说过。可能,这是可能的,但并不是所有可能的东西都写出来了,但是需要什么:) 顺便说一下,有一个明确的字节码规范,非常具体,所以这根本不是一件容易的事:字节码远从汇编...
“我想是的”(c)维尼
如果你想用手机甚至 C 带十字架,你的路应该在Qt for mobile。我自己真的没有尝试过,但 Qt 是一个经过验证的工具,我认为一切都井井有条。从好的方面来说,您不仅限于 Android。