RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 870698
Accepted
pepsicoca1
pepsicoca1
Asked:2020-08-20 02:49:40 +0000 UTC2020-08-20 02:49:40 +0000 UTC 2020-08-20 02:49:40 +0000 UTC

Java机器的C++代码翻译

  • 772

碰巧我在 C/C++ 中工作了很多,而没有在 Java 中工作。现在,我看到移动平台对 Java 的需求很大。作为一个相当懒惰的人,我想避免完全学习 Java。我想继续用 C++ 编写,但不是将 C++ 代码翻译成本机代码,而是翻译成 Java 机器的代码。

问题:

  1. 现在有没有将 C++ 代码转换为特定平台的本地代码,而是转换为 Java 机器的代码的技术?以便稍后此代码在任何平台上的 Java 机器上作为 Java 代码执行。

UPD1:

根据我的概念,Java 代码现在被翻译成抽象 Java 机器的一些中间代码。在不同的平台上,有一个 JIT 转换器,当此代码运行时,将其转换为该平台的本机代码并启动它。还是我错了?

UPD2:

这似乎是一件容易的事。拿 GCC 翻译器,离开解析器,代替 x86 平台的代码生成器,为 Java 机器编写代码生成器。还没有人制造过这样的混合动力车吗?

UPD3:

然后是第二个问题,与第一个有关:

问题:

  1. Java 程序是如何分发的?Java 程序是以源代码分发的,还是 Java 程序以 Java 机器的代码分发的?
java
  • 4 4 个回答
  • 10 Views

4 个回答

  • Voted
  1. Best Answer
    Mikhail Baksheev
    2020-08-20T21:11:37Z2020-08-20T21:11:37Z

    现在有没有将 C++ 代码转换为特定平台的本地代码,而是转换为 Java 机器的代码的技术?以便稍后此代码在任何平台上的 Java 机器上作为 Java 代码执行。

    有几个,但不是事实,它适用于移动平台,并且在开发过程中使用它真的很方便:

    嵌套虚拟机:

    NestedVM 为 Java 字节码提供二进制翻译。这是通过将 GCC 编译为 MIPS 二进制文件来完成的,然后将其转换为 Java 类文件。因此,任何用 C、C++、Fortran 或 GCC 支持的任何其他语言编写的应用程序都可以在 100% 纯 Java 中运行,而无需更改源代码。

    海合会桥:

    GCC-Bridge 是一个 C、C++ 和 Fortran 到 Java 字节码编译器。GCC-Bridge 使用 GCC 作为前端生成 Gimple,然后将 Gimple 编译成 Java 类文件。

    一组用于 LLVM 的库和工具,用于将 C 编译为 JVM 字节码:

    LLJVM 提供的 C 到 JVM 字节码编译涉及几个步骤。源代码首先由 llvm-gcc 或 clang 等前端编译为 LLVM 中间表示 (IR)。然后将 LLVM IR 转换为 Jasmin 汇编代码,链接到其他 Java 类,然后汇编为 JVM 字节码。

    • 3
  2. Barmaley
    2020-08-20T15:08:54Z2020-08-20T15:08:54Z

    让我们按顺序进行:

    现在有没有将 C++ 代码转换为特定平台的本地代码,而是转换为 Java 机器的代码的技术?

    有这样的技术,但只是在最深的beta中以某种研究的形式出现,产品中没有这样的技术。

    根据我的概念,Java 代码现在被翻译成抽象 Java 机器的一些中间代码。在不同的平台上,有一个 JIT 转换器,当此代码运行时,将其转换为该平台的本机代码并启动它。还是我错了?

    不管多么真实,但整个问题在于,这项工作是在虚拟机端完成的,即 JVM 接收字节码并将其发送给 JIT,JIT 将其翻译成平台相关的指令。

    这似乎是一件容易的事。拿 GCC 翻译器,离开解析器,代替 x86 平台的代码生成器,为 Java 机器编写代码生成器。还没有人制造过这样的混合动力车吗?

    不,这并不容易,在 C / C ++ 中,内存管理是程序员关心的问题(语言工具),而在 Java 中,它是通过 JVM(在语言本身之外)解决的功能 - 直到你消除了这个矛盾,就语义而言,您不会得到成熟的 C/C++。

    Java 程序是如何分发的?Java 程序是以源代码分发的,还是 Java 程序以 Java 机器的代码分发的?

    .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)的类似物,它在安装时已经编译成本地代码。

    • 2
  3. Harry
    2020-08-20T11:46:21Z2020-08-20T11:46:21Z

    作为一个纯粹的理论理论家...... :)

    1. 没听见。从理论上讲,当然这是可能的,但有很多细微差别——垃圾收集本身就有价值——这将导致 Java 代码相当变态。

    UPD1。并不真地。字节码在解释模式下执行,在运行时被解析,“热”代码被编译为本机代码——两者的结合。

    UPD2。再说一次,我没听说过。可能,这是可能的,但并不是所有可能的东西都写出来了,但是需要什么:) 顺便说一下,有一个明确的字节码规范,非常具体,所以这根本不是一件容易的事:字节码远从汇编...

    1. 事实上,为此开发了字节码和 JVM 规范,以便二进制文件可以同时在任何地方工作,并且可以分发它们,而不是为每个熨斗单独拖动源代码和编译。

    “我想是的”(c)维尼

    • 0
  4. zolt
    2020-08-20T10:40:49Z2020-08-20T10:40:49Z

    如果你想用手机甚至 C 带十字架,你的路应该在Qt for mobile。我自己真的没有尝试过,但 Qt 是一个经过验证的工具,我认为一切都井井有条。从好的方面来说,您不仅限于 Android。

    • -1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5