是否存在Java到C ++转换器/工具?

时间:2009-02-17 13:36:30

标签: java c++ code-translation

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

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

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

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

10 个答案:

答案 0 :(得分:22)

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

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

Java也有一个共同的Object超类型。 C ++没有。

模板的泛型几乎是我无法想象的。

答案 1 :(得分:11)

Firefox HTML5 parser is written in Java and converted to C++。但我认为那里使用的转换器对于这个项目非常具体。有趣的是,事实证明,生成的C ++解析器比用C ++编写的旧解析器更快。

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

还有开源项目J2C

因此有一些方法可以将Java转换为C ++。但是不要指望翻译器支持所有功能,并且不要指望生成的代码比优秀的Java JVM快。

答案 2 :(得分:7)

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

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

顺便说一下。 Google有一个Java to JavaScript编译器(包含在GWT

答案 3 :(得分:6)

有一个,我不确定它是否确实有效。 Java to C++ Converter-Tangible Software Soulutions

c ++到java转换器有多奇怪,但只有1个java到c ++转换器。

答案 4 :(得分:3)

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

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

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

答案 5 :(得分:2)

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

取决于代码的使用范围,从学习的角度来看,它可能很有趣。

我刚刚通过Google发现了这一点,因为我记得在Univeristy中看到一个基于uml创建代码的人。

答案 6 :(得分:2)

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

答案 7 :(得分:2)

一些整洁的工具,将java转换为“使用Java API的C ++”(如GNU GCJ CNI),还有一个问题是管理array.length(数组不是向量)......

答案 8 :(得分:2)

主要问题是java是一种编写和设计用于与VM通信的语言。我想这是可能的,但是你剩下的只是一个非常优化的应用程序,其自我翻译层执行VM已经完成的工作。我的意思是,当然,有可能,它仍然不是我能想到的任何解决方案。如果你想让你的java应用程序本土化,也许你的想法太难了,只需使用像JET这样的应用程序,它实际上非常好,并且会给你本机应用程序带来的好处。当然,如果虚拟机已经在做应用程序要求它做的事情,就像本机代码一样(它发生..有时候:P)它可能没有任何改变。

Java到c#,这听起来更合理,因为两种语言都以类似的方式编写,与框架本身交谈,但这仍然会使代码非常不优化,因为从头开始为特定框架编写的代码不能被击败。

答案 9 :(得分:2)

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

我首先要仔细研究Java Native Interface(JNI)。 JNI是java的一部分,它允许它与C和C ++一起使用。我在这里开始的原因是,如何掌握基本结构,比如Java对象如何映射到C结构(结构)以及几乎所有的内容都是如此。 Java是一个包含数组的对象,我可能会看一下Open JDK源代码。

实际转换器必须转换所有导入的Java库(及其导入的库等等),这意味着您需要所有内容的源代码。这个转换不是一项小任务,因为Java库很大。

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