2009-09-30 21 views
1

我不知道Perl是否執行常見的子表達式消除?Perl是否執行常見的子表達式消除?

什麼樣的優化被完成?

+0

它沒有。唯一的優化是窺孔分析階段。 – jrockway 2009-09-30 08:51:01

+0

如果有些指針可用,我會爲它寫一個模塊:)是否需要B :: *命名空間中的某些模塊? – xxxxxxx 2009-09-30 09:19:41

+0

它提供了Trie優化,自5.10.0 http://perldoc.perl.org/perl5100delta.html – 2009-09-30 15:32:50

回答

1

不,但做。

現在,我沒有手動展開循環,因爲循環是一個更容易的概念,一旦你熟悉編程。因爲你可以用序列命令做任何事情,循環清楚地表明你正在重複一個任務。

但是無論語言的實現如何,CSE都可以提高代碼的效率。所以我這樣做。它不會使代碼成爲巴洛克式的,並且它在沒有自動包含的語言中起作用。

Perl提供了壓縮的語法,所以通常有更少的子表達式必須被手工消除。

1

不,也不可能這樣做,除非是非常簡單的情況。

爲了消除常見的子表達式,您必須知道它們之間沒有改變它們的值。但是因爲在兩個表情之間可能會發生很多行,所以幾乎不可能分辨出是否仍然是常見的

您將能夠消除的唯一事情是可證明純的表達式,如「7 + 5」。但是證明像函數調用這樣的東西是安全的,不會發生。爲了做到這一點,你需要功能強大且保守的靜態分析,這是Perl沒有的,而且不太可能獲得(在C/C++中,你需要的功能不那麼強大,因爲語言動態性較差,但你仍然需要一些東西)。