58

我总是问自己是否可以制作 Java 到 C++ 的转换器。

也许是一个将 Java 语法转换为 C++ 语法的工具?

我知道语言不同,但简单的事情,比如语义匹配 1 到 1 的循环。

有这样的工具吗?或者有可能制作一个吗?

4

10 回答 10

28

只要有足够的时间、金钱和资源,任何事情都是可能的。实用吗?除了琐碎的例子之外,不是真的。或者更确切地说,它取决于什么构成可接受的错误率。

真正的问题是 Java 和 C++ 中的习语不同。例如,Java 到 C# 实际上会容易得多(因为习语更相似)。最大的当然是 C++ 有析构函数和手动管理的内存。Java 使用 finally 块来处理这种行为并具有垃圾收集功能。

Java 也有一个通用的 Object 超类型。C++ 没有。

我想象的模板的泛型几乎是不可能的。

于 2009-02-17T13:44:15.497 回答
17

Firefox HTML5 解析器是用 Java 编写并转换为 C++的。但我认为那里使用的转换器非常适合这个项目。有趣的是,结果表明生成的 C++ 解析器比用 C++ 编写的旧解析器更快。

我还在src/tools/org/h2/java 下编写一个转换器作为H2 数据库的一部分。这个想法是允许将 H2 数据库的子集转换为 C++,因此这也不是通用翻译器。

还有开源项目J2C

所以有一些方法可以将 Java 转换为 C++。但是不要期望翻译器支持所有功能,也不要期望生成的代码比好的 Java JVM 更快。

于 2012-06-23T15:56:43.260 回答
7

是可能的,毫无疑问,但不会那么简单。这将是一个生成 C++ 的 Java 编译器。

如果您想从头开始,那将非常困难,您必须完成 javac 和 JVM 为您完成的所有工作(例如垃圾收集)。

顺便提一句。Google 有一个 Java 到 JavaScript 的编译器(包含在GWT中)

于 2009-02-17T13:40:29.437 回答
7

有一个,我不确定它是否真的有效。 Java 到 C++ 转换器-有形软件解决方案

奇怪的是如何有 c++ 到 java 转换器,但只有 1 个 java 到 c++ 转换器。

于 2012-02-03T02:05:10.773 回答
3

如前所述,将 Java 转换为 C++ 会很困难,但我们可以有一个应用程序或工具来生成 Java 代码和等效的 C++ 代码。

我知道一个在 C++/Java/C# 中生成代码的应用程序给定一个模型,该模型有自己的定义方式。

该工具属于 CA,名称为 CA Plex。在 www.ca.com 上搜索

于 2009-02-17T17:07:33.683 回答
2

http://www.tangiblesoftwaresolutions.com/Order/Order_Upgrade_Instant_CPlus_Java_Edition.htm

取决于将使用代码的领域,从学习的角度来看,它可能会很有趣。

我刚刚通过谷歌找到了这个,因为我记得在大学里看到一个基于 uml 创建代码的。

于 2009-02-17T13:40:24.773 回答
2

有一些程序声称他们可以做到这一点,但没有一个程序获得足够的人气以至于经常被提及,所以我们将把它们留给“尝试”。制作转换器需要在程序中内置大量 AI。因为 GTK/wxWidgets/Qt/win32 API 都与 swing 有很大的不同,所以当涉及到 swing 时,难度会增加十倍。但这是可能的。并不是说代码质量会很好,也不能保证你的程序不会因为单独的内存处理方法而崩溃,但这是可能的。

于 2009-02-17T13:41:48.513 回答
2

一个简洁的工具将是一种工具,它将 java 转换为“使用 Java API 的 C++”(如 GNU GCJ CNI),剩下的一个问题是管理array.length(数组而不是向量)......

于 2010-03-17T17:50:32.757 回答
2

主要问题是java是一种为与VM对话而编写和设计的语言。我想这是可能的,但你所剩下的只是一个优化得很差的应用程序,它有一个自我翻译层,做着虚拟机已经做的事情。我的意思是,当然,有可能,它仍然不是我能想到的任何事情的解决方案。如果你想让你的缓慢的 java 应用程序成为原生的,也许你想得太难了,只需使用 JET 之类的应用程序,它实际上非常好,并且会给你带来原生应用程序带来的好处。当然,如果虚拟机已经在做应用程序要求它做的事情,就像本机代码一样(它会发生......有时:P),它可能什么都不会改变。

Java 到 c# 听起来更合理,因为这两种语言都是以类似的方式编写的,并且与框架本身对话,但这仍然会使代码非常未优化,因为无法超越从头开始为特定框架编写的代码。

于 2011-05-12T13:31:59.677 回答
2

Java 到 C 实际上是最简单的。请记住,您需要转换语言,如果您这样做,所需的库可以由您的新编译器转换。换句话说,Swing 和 AWT 应该不是什么大问题……

我首先要好好看看 Java Native Interface (JNI)。JNI 是 java 的一部分,允许它与 C 和 C++ 一起使用。我从这里开始的原因是,如何用 C 实现 Java 的各个部分变得相当明显。一旦我掌握了基本结构,例如 Java 对象如何映射到 C 结构(结构)以及在Java 是一个包含数组的对象,我可能会偷看 Open JDK 源代码。

实际的转换器必须转换所有导入的 Java 库(以及它们的导入库等等......),这意味着您需要所有内容的源代码。由于 Java 库很大,因此这种转换任务不小。

这个过程会很耗时,但不需要人工智能。但是,我认为没有理由执行这样的转换。它失去了Java的可移植性,并且不会获得C的效率(除了它会被编译成本机代码,但最好直接从Java编译机器代码)。

于 2012-01-07T22:00:32.350 回答