相同功能的程序编译产生的中间代码(IR)相同吗

这么宽泛的问题,答案只能是:看情况。反过来说就可以很确定:如果两段代码的IR完全相同(包括其每个属性的值都一样),那它们的功能肯定是相同的。题主补充的问题描述:由编译原理可知,如果由前端产生的IR相同或者类似,那么算法的功能是相同的。但是,能不能由算法功能相似反推出IR相似?其实就是想问:算法的功能(命题P)相同是否是IR相同(命题Q)的充要条件。现实的说,Q =\u0026gt; P——P是Q的必要条件但不是充分条件。这个问题要回答的话,得看:是编译过程中什么阶段的IR是否已经经过某些优化 / 规范化(canonicalize)IR的语义的抽象程度有多高/低源语言要求保留的语义有多少这包括一些特殊情况,例如要求保留调试符号信息的情况,可能会干扰IR的规范化要展开讨论的话题主(或者其他感兴趣的同学)可以在评论区大概说说想了解什么方面的。
■网友
不一定
■网友
什么算功能相似?一个冒泡排序和一个快速排序算功能相似吗?
■网友
lua和luajit对同一段lua代码生成的ir就完全不同
■网友
不一定。同样的源代码在不同环境不同编译器中编译的结果都可能不同,何况源代码不相同的程序。但是运行的结果是相同的,否则就不符合编译的原则。
■网友
不一定,举个例子,同样是两个数相加,同样在jvm上,scala是调用了类本身的函数,java是用的运算符。语言基础部分的实现原理不同会导致中间代码不同。


    推荐阅读