WEB开发网
开发学院软件开发C语言 简单DAG生成算法的一个性质 阅读

简单DAG生成算法的一个性质

 2009-06-03 08:30:24 来源:WEB开发网   
核心提示: 这样就可以看得比较清楚了,实际上这个图并不是一棵树,简单DAG生成算法的一个性质(8),而是一个DAG,Expression Tree实际表示的也应该说是DAG才准确,像Java和C#都规定要遵循从左向右的求值顺序,实现时必须保证其语义的正确性,不过用AST的概念来解释它还是比DAG方便一

简单DAG生成算法的一个性质

这样就可以看得比较清楚了。实际上这个图并不是一棵树,而是一个DAG。Expression Tree实际表示的也应该说是DAG才准确。不过用AST的概念来解释它还是比DAG方便一些就是了……

Hmm,用Sun的javac 1.6.x和.NET Framework 3.5 SP1的csc编译习题里的那3个表达式,得到的结果都是没有用DAG做过优化的,即便给csc设置/o开关(近来Sun的javac会忽略-O,所以也不用设了)。因为对运行时里的JIT的高度优化能力有信心,这些编译器都不再做多少优化了,直接留给拥有更多信息因而能做出更多优化的JIT来解决问题。

对现在流行的托管高级语言来说,有一个问题是:语言规范中规定了很多细节,以致许多东西无法被优化,否则就保证不了语义。

例如,如果在C#里,用户对自己的一个类型重载了加法运算符,然后里面有副作用;则如果优化后减少了加法运算符调用的次数,这个行为就能带来用户可见的影响。因而不可以随便优化这样的运算。改变求值顺序也是不允许的,像Java和C#都规定要遵循从左向右的求值顺序,实现时必须保证其语义的正确性。

微软的csc应该通过分析定义-使用关系做了至少一趟优化,因为这段代码:

C#代码   

static class TestDAG {
    static void Main(string[] args) {
        int a = 0x001001;
        int b = 0x010002;
        int i = a + b + (a + b);
        int j = a + b + a + b;
        int k = a + a + (a + a + a + (a + a + a + a));
    }
}

上一页  3 4 5 6 7 8 9  下一页

Tags:简单 DAG 生成

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接