自动Java到C++转换

Jia*_* Yu 2 c++ java code-translation

有没有人尝试过自动Java到C++转换以提高速度?从长远来看,这是一场维护噩梦吗?刚刚阅读用于在Gecko中生成HTML5解析引擎http://ejohn.org/blog/html-5-parsing/

Dav*_*eas 17

通常,从一种语言到另一种语言的自动转换不会有任何改进.不同的语言有不同的习语会影响表现.

最简单的例子是循环和变量创建.在Java GC世界中,使用new创建对象几乎是免费的,并且它们也很容易被遗忘.在C++中,内存分配(一般来说)很昂贵:

// Sample java code
for ( int i = 0; i < 10000000; ++i )
{
   String str = new String( "hi" ); // new is free, GC is almost free for young objects
}
Run Code Online (Sandbox Code Playgroud)

直接转换为C++会导致性能不佳(使用TR1 shared_ptr作为内存处理程序而不是GC):

for ( int i = 0; i < 10000000; ++i )
{
   std::shared_ptr< std::string > str( new std::string( "hi" ) );
}
Run Code Online (Sandbox Code Playgroud)

用C++编写的等效循环将是:

for ( int i = 0; i < 10000000; ++i )
{
   std::string str( "hi" );
}
Run Code Online (Sandbox Code Playgroud)

从一种语言到另一种语言的直接翻译通常以两个世界中最糟糕的方式结束,并且难以维护代码.

  • @ 01:据我所知这篇文章:编写一个好的转换器不是转换本身,而是优化或转换代码.我几乎不怀疑转换器会执行任何优化.这里的问题不在于编写转换器的人不知道java或c ++,而是从垃圾收集语言转换为非垃圾收集语言=>如果对象应该是堆栈,则无法在没有优化和对象使用情况跟踪的情况下进行判断或堆分配.还有更多这样的陷阱,例如java默认使用2字节字符,C++单字节字符...... (2认同)