想象一下,使用標準化(包括lambda下的替換)作爲「優化」的類型化lambda演算(排除一個非常痛苦的非終止和隱式遞歸問題)的樸素編譯器。編譯時替換惡化程序的示例
對於大多數或全部變量僅使用一次的簡單程序,規範化導致程序既短又快。
對我來說這是「明顯的」,總的來說這不是一個好主意。也就是說,由於規範化會減少共享,因此優化會導致條款惡化。 2個乘法
\x -> let a = x * x in a * a
術語被 「優化」 到
\x -> (x * x) * (x * x)
與他們的3。
我該如何構建一個變得更加糟糕的例子?規範化時是否有可能溢出RAM的術語?
我們正在使用強歸一化的類型系統,因此不可能發生分歧。在系統F的一個合適的子集中有常量和delta規則。或者使用「免費」方法來添加常量,如mul
,例如,
\mul x -> let a = mul x x in mul a a
因此,不是添加常量,而是「運行時提供的額外參數」。
這個問題似乎屬於SE計算機科學,但IMO確實是一個入門級的問題,所以我認爲這裏更合適。
[CS。 se]是一個網站,可用於各種與cs有關的問題,包括入門級的問題。 [cstheory.se]是研究級別問題的地方。 –