タグ

関連タグで絞り込む (1)

タグの絞り込みを解除

Haskellに関するnurseのブックマーク (4)

  • Haskellの神話 - あどけない話

    Haskell の優雅さを示すためによく使われるコードは、優雅さと分かりやすさだけに特化しており、現実的には遅いことが多い。書き手は他に効率のよい実装があることを知っているのだけれど、読み手はそうではないから、後で効率が悪いと気づいて愕然とするみたいだ。 この記事では、神話になっている例を3つ取り上げ、効率のよい実装と合わせて紹介する。その 3 つの例とは、以下の通り。 フィボナッチ数 素数生成 ソート フィボナッチ数 遅延評価を活かした優雅なフィボナッチ数の実装は、以下の通り。 fib n = fibs !! n fibs = 0 : 1 : zipWith (+) fibs (tail fibs) Haskellの「fib = 1:1:zipWith (+) fib (tail fib)」はとても遅いにも書かれているように、この実装は遅い。 その理由は、(+) の計算が遅延し、その待機

    Haskellの神話 - あどけない話
  • Haskellの父Simon PJ氏、GHCの内部実装について日本のHaskellerと激論を交わす

    プログラミング言語Haskellの処理系「GHC」(Glasgow Haskell Compiler)のメイン開発者であり「Haskellの父」と呼ばれるSimon Peyton Jones(Simon PJ)氏(現在の所属は米マイクロソフトリサーチ)が2016年9月17日に来日し、東京で開催されたイベント「Haskell Day 2016」で講演した。このイベントにはHaskellに興味がある、あるいは業務で利用しているといった100人以上の技術者が参加しており、同氏はそうした技術者とGHCの内部実装や最適化について熱い議論を交わした(同イベントに関するTwitterの発言)。 同氏は下も履いていない裸足で、常に大きな身振りで熱弁をふるった。参加者が黙って聞いていると「質問はないのか」と催促。途中からは参加者から活発に質問が飛び出すようになり、2時間たっぷり熱い議論が繰り広げられた

    Haskellの父Simon PJ氏、GHCの内部実装について日本のHaskellerと激論を交わす
  • GHCのこと

    オブジェクトレイアウト 通常のHaskellの値(代数的データ型および関数)と、未評価の計算を表すサンクは、全てポインタで参照される。ポインタが指す先は通常はヒープ上のオブジェクトだが、静的セクションに置かれていることもある。いずれにしてもレイアウトは同じで、以下の一般形をとる。 オブジェクトの先頭1ワードは静的領域へのポインタ(infoポインタ)で、この値を評価(関数なら適用)するためのコード(entry code)と、このオブジェクトの種類に関する情報を集積したレコードを指している。なお、GHCにおける1ワードはポインタと同じ大きさ、つまり32ビットOSなら32ビット、64ビットOSなら64ビットである。これはIntの精度と同じでもある。 代数的データ型 代数的データ型の評価済みの値では、infoポインタが構築子の種類を表し、その後に構築子の引数を入れるスロットが続く。したがって、N引

  • 孤独のHaskell - ぼくのぬまち 出張版

    孤独のHaskellに行ってきた.ので,感想とそのフォローアップになりそうなことを書く. とてもいい会だったように思う. 遅刻して現場に付いたらRLEしてみようという例題("AABBCCC"を"A2B2C3"にする関数を書こう)をやっていて, id:khibino0 さんがおもむろに import Data.List ( group ) import Control.Arrow rle = concatMap (uncurry (:) . (head &&& show . length)) . group のような解をブッパしてたりするなど.で,各自自前実装してる人たちのコードとか見ると「細かい操作でボトムアップにやりたいことを実現しようとしてるなー」と感じることが多かった.Haskellの場合(なのかは知らないが)もっと大域的な変換からトップダウンに考えていったほうがシンプルでソレっぽい

    孤独のHaskell - ぼくのぬまち 出張版
  • 1