用两种不同编程语言编写的相同代码是否具有相同的二进制输出?

时间:2013-10-10 09:17:46

标签: compiler-construction compilation compiler-optimization

如果我想用两种不同的语言打印“HELLO”,比如c ++和java,那么代码的二进制输出也可能不同...... ??

2 个答案:

答案 0 :(得分:0)

是的,代码的二进制输出是不同的。

当使用具有不同编译器选项的相同语言时,生成的输出可能不同(有/无调试信息,有/无优化)。

举个例子:

  • 在C ++中,编译器生成用于直接执行CPU的机器代码
  • 在java中,编译器生成字节码,该字节码将通过字节码解释器或jit(只是及时编译器)运行。

但在等效程序中,程序输出应相同(在您的情况下为HELLO)。

答案 1 :(得分:0)

这取决于很多因素(源语言,目标平台,硬件,编译器标志,执行环境......)。

编程语言规范通常描述语言结构和语义,而不是深入研究实现细节,而是将其留给编译器供应商。

某些语言的方言非常不同(例如C#和Visual Basic),但编译为相同的managed code

根据目标平台,用某种语言编写的程序可以编译成完全不同的二进制文件。

为了提供最大的灵活性compilers在设计时考虑了模块性,并且由不同的部分(词法分析器,解析器,IL优化器,代码生成器)和编译阶段组成。这就是为什么有可能扩展GCC以支持未来平台附加新代码生成器而不触及其他部分。