そんなものは迷信に過ぎない*1。
Elm is not lazy.
— Elm FAQIt is compiled, with eager evaluation.
— Idris Overview
関係として、「参照透過性を持たない言語だと、評価戦略によって値(結果)が異なってしまう場合があるので、デフォルトの評価戦略(だいたい正格な評価)以外の戦略が取れない」ってのがある。
— Ryusei (@mandel59) 2015, 1月 5
参照透過性を持たない言語では、評価戦略を変更すると、大きな混乱がおこる。具体的には、HaskellでunsafePerformIO
を使ったような状況に陥るだろう。(本物のプログラマはHaskellを使う 第31回 禁断の機能「unsafePerformIO」の深淵) しかし、参照透過性があるからといって評価戦略に遅延評価を採用しなければならないという決まりはない。
参照透明であれば評価戦略によらず値が変わらないから、じゃあ並列で評価するかーとか、色々な戦略が取れるわけど、Haskellは逆に、正格な評価では停止しない場合でも⊥でない場合がある。遅延評価にロックインされていて、評価戦略から完全に自由とは言えない。
— Ryusei (@mandel59) 2015, 1月 6
Haskellは逆に遅延評価に依存しているところがあるので、一般にHaskellで書かれたプログラムを遅延評価以外の戦略で評価することはできない。
Haskellが遅延評価にロックインされているの、Prologがバックトラッキングにロックインされているのを思わせてとてもよい
— Ryusei (@mandel59) 2015, 1月 6
Haskellと同様、Prologも宣言型だと喧伝されることが多いのだけれども、副作用を使った処理を常用する点ではHaskell以上に非宣言的記述を必要とする。
評価戦略を変えたらアルゴリズムのオーダーが変わったり、停止しなくなったりするから難しいね
— Ryusei (@mandel59) 2015, 1月 6
難しいというのは、コンパイラーなどが勝手に評価戦略を変更するのが難しいということ。
こういった話は、評価戦略を変更することでプログラムの意味がどのように変わりうるのかという話なので、意味論を持ち出さないとまともな話はできそうにない。