代码之家  ›  专栏  ›  技术社区  ›  Aftershock

Perl是否执行公共子表达式消除?

  •  1
  • Aftershock  · 技术社区  · 15 年前

    我想知道Perl是否执行公共子表达式消除?

    做了什么样的优化?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Axeman maxelost    15 年前

    没有,但是 做。

    现在,我不手工展开循环,因为一旦熟悉编程,循环是一个更简单的概念。因为你可以做任何事情 序列 在命令中,循环清楚地表明您正在重复一个任务。

    但是,CSE是一种可以使代码更高效的东西,而不管语言的实现如何。所以我做到了。它不会使代码成为巴洛克式的,它可以在不自动包含的语言中工作。

    珀尔提供 压缩 在语法方面,通常很少有子表达式需要手工消除。

        2
  •  1
  •   Paul Biggar    15 年前

    不,而且也不可能这样做,除非是在非常简单的情况下。

    为了消除常见的子表达式,必须知道它们之间的值没有改变。但由于两个表达式之间相隔几行会发生如此多的事情,因此几乎不可能判断 子表达式 仍然 常见的 .

    你唯一能消除的就是那些可以证明是纯粹的表达,比如 7 + 5 “。但是证明像函数调用这样的东西可以安全地消除是不可能的。

    要做到这一点,你需要强大的和保守的静态分析,Perl没有,并且不可能获得(在C/C++中,因为语言不那么动态,但是你仍然需要一些东西),所以你需要更少的强大的东西。