0

"Learn You a Haskell" では、次のデータ型が示され、これを使用してツリーを操作する一連のアルゴリズムが提供されます。

data Crumb a = LeftCrumb a (Tree a) | Right Crumb a (Tree a) deriving (Show)

二分探索のようなものがポインタをたどるという観点から説明される命令型言語とは異なります。ここでは、ポインターについての言及はありません。しかし、二分探索のようなアルゴリズムは、Haskll でどのようにコンパイルされるのでしょうか? それらは同じ効率的なウォーキング ダウン ポインターにコンパイルされますか?

4

1 に答える 1

1
  • Haskell 言語:コンパイラは、仕様から理解できる限り、コードに対して何をしてもかまいません。これは、C で期待するのと同じようにポインター ウォーキングがある場合とない場合があることを意味します。言語仕様は、それらが想定どおりに機能する限り、物事がどのように実装されているかはあまり気にしません。

  • GHC コンパイラ:最終的に GHC がコードをどのようにコンパイルするかを本当に知りたい場合は、C-- ("C-minus-minus" と発音) またはアセンブリを読むことを学ぶことをお勧めします。GHC に C-- コードを吐き出させ-ddump-cmm、 でアセンブルすることができます-ddump-asm。ただし、コンパイラの最適化の作業を開始する予定がない限り、これは非常に役立つ演習ではないと思います。

    原則として、GHC が書く命令型コードは、人間が書くものとは非常に異なって見えます。したがって、おそらくあなたが考えている意味での指針はありません。(そして、クールなことは、とにかく最終的に効率的に機能することです!)

于 2013-10-25T04:36:50.917 に答える