1 名前:デフォルトの名無しさん mailto:sage [2012/01/02(月) 22:19:28.26 ] haskell.org ttp://www.haskell.org/ 日本語サイト ttp://www.sampou.org/cgi-bin/haskell.cgi ttp://www.shido.info/hs/ 過去ログ 関数型プログラミング言語Haskell Part1 ttp://pc.2ch.net/tech/kako/996/996131288.html Part2 ttp://pc2.2ch.net/test/read.cgi/tech/1013846140/ Part3 ttp://pc8.2ch.net/test/read.cgi/tech/1076418993/ Part4 ttp://pc8.2ch.net/test/read.cgi/tech/1140717775/ Part5 ttp://pc8.2ch.net/test/read.cgi/tech/1149263630/ Part6 ttp://pc11.2ch.net/test/read.cgi/tech/1162902266/ Part7 ttp://pc11.2ch.net/test/read.cgi/tech/1174211797/ Part8 ttp://pc11.2ch.net/test/read.cgi/tech/1193743693/ Part9 ttp://pc11.2ch.net/test/read.cgi/tech/1211010089/ Part10 ttp://pc12.2ch.net/test/read.cgi/tech/1231861873/ Part11 ttp://pc12.2ch.net/test/read.cgi/tech/1252382593/ Part12 ttp://hibari.2ch.net/test/read.cgi/tech/1272536128/ Part13 ttp://hibari.2ch.net/test/read.cgi/tech/1286706874/ Part14 ttp://hibari.2ch.net/test/read.cgi/tech/1299385928/ Part15 ttp://hibari.2ch.net/test/read.cgi/tech/1310199414/ Part16 ttp://toro.2ch.net/test/read.cgi/tech/1317958045/
577 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 19:23:37.68 ] Yampa の par 関数の型について質問です。 (他のパラレル系関数もですが、代表して par を選びました) par :: Functor col => (forall sf. a -> col sf -> col (b, sf)) -> col (SF b c) -> SF a (col c) このルーチン関数の sf という型変数には、SF b c 以外入ることは無いと思うのですが、 単純に a -> col (SF a b) -> col (b, SF a b) という型では何がいけなかったのでしょうか
578 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 21:52:55.77 ] Cabal で --enable-documentation とやっていっしょにインストールされるドキュメントに、 ソースコードへのリンクが貼られるようにする方法はないのでしょうか? HackageDB のサイトで見られるドキュメントみたいにしたいです
579 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 10:41:10.37 ] >>577 スライドとか論文だと確かOpacity(透過性?)のためとか書いてあって、 俺も正確な意味はよくわからなかったんだけど、 SFを書き換えられるような関数を渡せるのを防止してるんじゃないかな。 route a xs = [(a, identity)] みたいな、コレクションの中身を無視して出所不明のSFにしちゃうような。
580 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 05:11:31.94 ] F#を始めたのだが、モナドで行き詰まっている。 F#の本にはモナドのことが書いていない。 で、ネットでモナドのことを収集すると、ハスケルのがほとんど。 F#での説明もあるが、なんか解りづらい。 で、モナドって何ですか? 関数型プログラミングをやるにはモナドが必須ですか? どなたか教えてください _o_
581 名前:580 mailto:sage [2012/02/16(木) 05:15:46.89 ] ちなみに数学科出身ですが、圏論は知りません。 習った覚えがありませんし、仮に習っていても記憶にないのだから、習っていないのと同じです。
582 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 05:48:37.15 ] モナドはモナド則そのもの。 使い方としてはモナド則を頭に入れてからListモナドとStateモナドを理解すれば後は大体類推が利く。 F#でどうなのかは知らないが、少なくともHaskellで何か書こうと思ったらモナドは必須。 まあ「モナドとは何か」みたいな話は過去スレ遡ればいくらでも出てくるよ。
583 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 08:10:51.47 ] わかればわかるけど、モナドはモナド則そのものってのが禅問答みたいで わかりにくいんだよなぁ。。 Haskellのクラスは、C++でいう抽象クラス見たいなもので、 Haskellのモナドがクラスでどう定義されてるか調べていけば、 意味はわからなくても、使い方はわかると思うよ。 モナドの意味は使っている内に、なんとなくわかるようになる、、、と思う。
584 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 09:19:10.08 ] コンポーネントのようでコンポーネントでない 象のようで象のようでない さてはモナドって南京弾簾だろ!
585 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 09:37:41.55 ] Haskell 最大の失敗はモナドにモナドという名前をつけたことにある。 もっと「もこもこ」みたいな可愛い名前にすれば大流行していた。 とか講演でいってたな。
586 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 09:48:34.02 ] 名前はモナドのまま、バインド演算子を ( ´∀`)みたいなのにすれば良かったのではなかろうか
587 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 09:51:36.68 ] ガンダムで頼む
588 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 10:16:54.54 ] >>585 そのソースはどこよ?w
589 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 13:28:49.11 ] >>588 元ネタはこれのはず。 Wearing the hair shirt: a retrospective on Haskell (2003) Simon Peyton Jones, invited talk at POPL 2003. research.microsoft.com/en-us/um/people/simonpj/papers/haskell-retrospective/ Our biggest mistake Using the scary term "monad" rather than "warm fuzzy thing"
590 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 14:37:03.09 ] 2011年版はビデオで見られる。ちょっと重いけれど。 Escape from the Ivory Tower: The Haskell Journey, from 1990 to 2011 yow.eventer.com/events/1004/talks/1054 簡単だけど32分あたりに "warm fuzzy thing" が出てくる。 各銀行が秘密の Haskell 部隊を雇ってるって話はどこまで本当なんだろう。
591 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 15:37:45.12 ] >>583 なんでこのなものが要るのか直感的に分からないってこと?
592 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 15:56:24.13 ] >>585 そして処理が一本道だから もこもこで一本道 略して もこみち とかどうよ?
593 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 16:21:24.02 ] >>583 Haskellの型クラスはC++の抽象クラスとは全く違うよ。 オブジェクト指向の考え方は捨てるべき。
594 名前:デフォルトの名無しさん [2012/02/16(木) 18:14:54.42 ] Haskellとオブジェクト指向は根本的に違うから例えて考えるのは実際の処理挙動ぐらいにしたほうが……
595 名前:デフォルトの名無しさん [2012/02/16(木) 18:27:40.48 ] C++にはクラスという機能を用いて現実世界の概念を抽象化することに成功し、直感的な設計・実装が行えるようになった Haskellでは、どのようなパラダイムがこれから出てくるのか 私はそれが楽しみでならないのです って去年死んだおじいちゃんが死ぬ間際に言ってた
596 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 18:49:29.40 ] ぷうぷう!
597 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 19:05:35.61 ] もこもことかモコナとかそういうかわいいのはいらない モサドにしよう
598 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 19:24:01.77 ] >>595 Haskellは遅延評価という機能を用いて現実世界の手順を隠蔽することに成功し、 宣言的な設計・実装が行えるようになりました。 しかしHaskellは関数型言語からは踏み出さないだろうから、新しいパラダイムは Ozのようなマルチパラダイム言語に期待すべきだろうと思えてならないのです。 って友達がさっき言ってた。 コンピュータプログラミングの概念・技法・モデル toro.2ch.net/test/read.cgi/tech/1196257692/
599 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 19:27:51.75 ] Ozはオワlan
600 名前:餃子チョコレート ◆8X2XSCHEME mailto:sage [2012/02/16(木) 20:52:04.09 ] うまいな。 一瞬「終ったランゲージ」と思わせといて実は「終わらん」というダブルミーニングですね!!
601 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 22:13:47.28 ] >>593 そう? 「Learn You a Haskell for Great Good!」には、JavaのInterfaceみたいなのと 考えたほうがいいって書いてるけど。 全く違うっていうならどう考えればいいか説明してほしいな。
602 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 22:27:34.65 ] >>591 最初、(>>=)はただ関数に引数にして渡すだけじゃないか、なんで必要なんだとか思ってた。 他のもなんでこんなのが必要か理解できなかったよ。 変な型修飾付けるせいで、型が違うって怒られるし。 でもそうやって好き勝手書けないようにするのが狙いなんだな。
603 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 22:46:41.67 ] デザインパターンみたいなもの、でいいと思うけどな > モナド
604 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 22:56:34.58 ] 私は >>593 ではないのですが、逆に訊きたいです Haskell の型クラスと Java のインターフェイスにおいて、 考え方の共通点とは何でしょうか それは、コンパイル時にどう解釈されるかというレベルの共通点でしょうか それとも、アプリケーションを作る上での指針となるくらいのレベルの共通点でしょうか
605 名前:604 mailto:sage [2012/02/16(木) 22:57:13.58 ] >>604 すいません、>>601 に対しての質問です
606 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 03:06:37.40 ] Haskellのclassはplatformに改名しろ
607 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 04:24:56.80 ] 型を集合だと考えれば型クラスって命名は自然
608 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 04:41:03.84 ] 型(type)のメタ概念として類(class)という名前を採用することは間違っていない ただし、これだけオブジェクト指向の概念が普及しているのが現実なのだから、 それを配慮した命名が望ましかった(かもしれない)ということ これをHaskellの傲慢さと見るか、それとも数学的に正しい命名であると見るかは 判断が分かれるところ
609 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 04:50:13.16 ] オブジェクト指向のclassが類と無関係だと思ってるっつーか、 類をモデルにしているのはtype classだけだとか思ってるところが Haskellerの傲慢さじゃないの?
610 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 05:12:11.76 ] simula(I,67) staff.um.edu.mt/jskl1/talk.html smalltalk(80) web.cecs.pdx.edu/~harry/musings/SmalltalkOverview.html#The%20Smalltalk%20Object%20Model これ参考にCからC++とObjCができたのか。
611 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 06:49:42.48 ] >>609 オブジェクト指向のclassって命名にケチつけてるなら Haskellerは傲慢だけど、そうじゃないよね?
612 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 07:36:36.25 ] オーバーロードは必要でオーバーライドは不要だと思ってるところが傲慢だ
613 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 09:25:13.67 ] >>580 ここは読んだか? www4.atwiki.jp/fsharpmaster/m/pages/13.html
614 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 09:28:48.05 ] >>550 Johan TibellのHaskell Performance Patterns talkのスライドも このリストに追加の資料になりそう。
615 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 11:31:01.99 ] >>604 全く同じとまでは言わないけど、 Haskellのtype ≒ Javaのclass と考えたときに、 Javaのinterfaceがclassにまたがって横断的に制約を作れるというところが、 Haskellの型クラスがデータ型を横断して共通の「クラス」を作れるところ と似てるって言ってるんじゃないの。 とりあえず最初の入り口から何でも違う違う言ってたら、誰もHaskell始められないよ。
616 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 11:43:00.28 ] >>615 このスレを見て面白そうなので僕は今日から始めました。
617 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 12:42:29.71 ] >>615 ということは、それはコンパイル時の解釈の問題ですよね >>593 は > オブジェクト指向の考え方は捨てるべき と言っており、これはアプリケーションを作る指針となる考え方において、 抽象クラスとは違うことを言っているように思えます もしそうなら、それに対する反論としての >>593 は的外れだと思います >>583 も、わかればわかるけど、モナドはモナド則そのものは解りにくいと言ってることから、 入門レベル(最初の入り口)は通り過ぎているものと思われます。 > とりあえず最初の入り口から何でも違う違う言ってたら、誰もHaskell始められないよ。 それはそうですが、それとは別問題として、話が噛み合っていないような気がします
618 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/02/17(金) 13:03:38.71 ] 俺もあんまり「××のようなもの」っていう解釈はしない方がいいと思ってる。 部分的に機能がかぶるだけで類似性を見出していたのではそれに引き摺られて根本的なパラダイムの理解に進み難い。
619 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 13:25:22.45 ] type classってオーバーロードと型推論を両立するための妥協だから パラダイムみたいな高尚な概念じゃないよ
620 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 13:34:40.12 ] そんなこと言ったらOOPにだってパラダイムなんて高尚なもん 一つも無ぇっつーの
621 名前:615 mailto:sage [2012/02/17(金) 14:08:40.22 ] >>617 話の流れ見てなかった。すまんかった。 だからケンカしないで。
622 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 14:17:39.16 ] >>617 横レスだけど、 ・オブジェクト指向のクラスもHaskellの型クラスも 「抽象データ型」の実現という意味では似ている(>>615 ) ・オブジェクト指向の「インヘリタンス」とHaskellの「アドホック型多相」とは 型システム理論という意味では全く違う(>>593 ) ということじゃないのかな? 各用語の意味は、自分で調べてね
623 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 14:31:40.54 ] >>622 OOPの「継承」は部分型多相では?
624 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 14:34:40.69 ] >>623 オーバーライトや疑似変数selfなんてのは、部分型多相には存在しない概念/理論
625 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 14:46:11.83 ] >>623 なるほど。型理論勉強します。
626 名前:625 mailto:sage [2012/02/17(金) 14:46:38.91 ] >>624 だった
627 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 14:58:14.86 ] >>619 型クラスにはアドホック型多相という理論的基盤があるから、 それはいわゆる「高尚」と表現してもかまわないんじゃまいかと思う >>620 OOPの継承というのは直感的かつ曖昧なもので、その足場は非常に不安定 だからオブジェクト指向について10人に尋ねれば、10人それぞれが異なった解釈を返す そんな代物を「高尚」とは、とても呼べないんじゃまいかと思う
628 名前:627 mailto:sage [2012/02/17(金) 15:10:40.81 ] 訂正 X: OOPの継承というのは.... O: OOPというのは....
629 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 15:18:03.49 ] >>624 概念/理論は存在したり存在しなかったりするんだな・・・ それなら概念/理論を教えるよりも実装を教える方が良い
630 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 15:22:36.71 ] 例えばC++で言うところのオブジェクト指向とは ・情報隠蔽 ・継承 ・ポリモーフィズム でした
631 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 15:26:42.34 ] オーバーロードをアドホック多相と言いかえると何か凄そうに見えるテクニックはテストに出ます
632 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 15:39:17.02 ] >>629 >概念/理論は存在したり存在しなかったりするんだな・・・ え、オーバーライトや継承の概念を含む、いわゆる「継承の型システム」に関する理論は、 いくつか存在しているよ 足りないのは動的なメソッド結合(ダックタイピング)や動的な型付け(メタプログラミング)の理論 そんな完成した静的型付けな型システムの一つを実装したのがObjective-Caml ただし、(Objective-CがOOとCのハイブリッド言語であるように) 部分型多相と継承は理論的に全く違うから、両者のハイブリッドになっている 結果として、残念ながら「関数型パラダイムにおけるオブジェクト指向」という理想には程遠い
633 名前:632 mailto:sage [2012/02/17(金) 15:41:17.07 ] また訂正 X: オーバーライトや継承の概念を含む、.... X: オーバーライトや疑似変数selfの概念を含む、....
634 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/02/17(金) 15:48:26.21 ] >>633 また訂正ですね!!
635 名前:632 mailto:sage [2012/02/17(金) 16:17:42.90 ] >>634 ...orz すぐに分かってくれたようだから、あえて訂正しないw >>631 MLやHaskellでは、JavaやC++のようなNullPointerExceptionやBusErrorは発生しない 型に関するミスは、コンパイル時にすべて検出できる それが、理論的背景のある型システムの「凄さ」だと言える 次のテストに出すかもしれないから、よく復讐しておくように
636 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 16:40:57.39 ] 別に凄くない むしろ、すべてに責任をもつことはできないから責任を限定する理論が必要になる 型に関するミス以外は管轄外だし プログラマーが勝手に Nothing とか [] を使うのは自己責任
637 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 16:47:11.46 ] 言語の中でNullを扱わなくなっただけで、Nullみたいな値の濫用の余地は残るわけですよね。 昔のCOBOLはNULLが扱えなくて0000や9999などの値で成功失敗とか表現していましたし、そういうシステムはかなり多いと聞いています。 つまり、NULL無いんなら0000や9999でいいやと思うような人には型システムなんて意味ないんじゃないでしょうか?
638 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 16:56:36.58 ] >>611 他パラダイムや他言語を矮小化する一方で、 「無秩序でいい加減な」という意味のアドホック多相を あたかも高尚なものであるかのように 誇張しているだけだから、傲慢じゃなくて 滑稽だね。
639 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 17:06:52.05 ] ad hoc adv., adj. (特に)このために[の], 特別に[の], この場限りで[の], その場限りで[の]. 研究社 新英和大辞典 第6版
640 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 17:20:15.57 ] www.youtube.com/watch?v=z5rRZdiu1UE
641 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 17:21:05.17 ] カズヤマモトサンかっけー
642 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 18:09:29.51 ] この流れで質問させてください 型クラスってのは代数的構造のことではないんでしょうか?
643 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 18:48:32.83 ] >>642 そんなようなものだけどもうちょっと一般的 C aというインスタンスのメソッドの戻り値の型はa以外になり得る OrdとかShowとか
644 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 18:57:33.81 ] >>635 ヌルポは値に起因するバグで、型システムによる安全性の保証外なのはML系でも同じだよ。 MaybeはまんまC#のnullable<T>だし。 Haskellはパターンマッチでパターンを網羅してないとちゃんと警告出してくれたり、 Maybeモナドみたいな明示的にチェックを書かなくても済む仕組みその他諸々のおかげでバグりにくいって話で、 コンパイルで検出出来てるわけじゃないし、発生しないわけでもないよ。
645 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 19:12:32.81 ] >>642 型クラスもデータ型もメモリ上のビットも代数的構造
646 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 19:24:43.41 ] NullPointerExceptionはバグなの?
647 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 19:29:54.49 ] >>644 Maybeはぬるぽがっされないような、、、
648 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 19:43:26.86 ] >>645 そういう文脈で代数的構造と言った場合の「代数的」とはどういうものですか?
649 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 20:02:36.22 ] >>648 代入可能なこと 定数以外は代数的構造
650 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 20:55:05.10 ] >>647 トリビアルな例だけど、常にJustな事が期待されてる変数alwaysJust :: Maybe aがあったとして、 1) case alwaysJust of --これは警告がでるけど Just x -> x 2) let (Just x) = alwaysJust in x -- こんなドタコなコードは書かないけど… 3) -- fooの使用者からは定義かドキュメントを見ない限り、例外が上がってくる可能性がある事は知りようがない foo :: a -> a foo v = fromJust $ do -- fromJustってどういうケースで使うんだろか…。 x <- alwaysJust v' <- Just v ... return v' もし、alwaysJustがバグっててNothingだったら、上の例は全部例外あげてくる。 特に3番目みたいな外からは一見安全に見える型の関数でも、ガッされない絶対の保証があるわけでも、検出できるわけでもないよ。 (1番目以外は警告すらでないし) Maybeからそれると、Preludeの関数でもListのheadとか(!!)とか、Enumのsucc、predとかreadやArrayとか、 プログラマがちゃんと保証しなきゃいけない関数も結構あるし。
651 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 21:29:13.08 ] Maybeからそれると、Intも危険だよね オーバーフローして意図しない挙動をする危険性があるから プログラマがちゃんと保証(ry
652 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 21:31:32.72 ] RWHを買ってきました あしたRWHを一日かけて読み切ります 何か注意点とかありますか
653 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 21:35:16.99 ] 急いで読まない
654 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 21:59:05.59 ] コードを写経して動かなくても文句言わない
655 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 22:12:05.67 ] なんか、ものすんごい勢いでレスついてるね。 みんな暇か?
656 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 22:15:37.70 ] 詰まったり解らなかったり動かなかったら本家(>>5 の上)のコメントなんかも参照 一日で読み切れなくても泣かない投げない
657 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 22:19:09.47 ] >>652 最初からまじめに読んでいくと冗長度が高くて飽きる。飛ばして途中から見ると何言ってるのか分からない。 昆虫本には良くあることです
658 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 22:28:48.44 ] 今 GHC 7.4.1 の環境です デュアルコアのCPUを使ってて、GHC の RTS オプション -N2 で、 2スレッドが平行して動くことは確認できました 今 Intel のハイパースレッディング(HT)機能を持つ CPU に変更する検討をしていますが、 GHC のマルチコア機能はHTに対応するのでしょうか コア数を返す関数がHTを考慮した論理コア数を返す事はリリースノートで確認しましたが、 実際に平行して動くスレッドの数として正しく機能するかという質問です つまり、例えばコア数2のHT機能を持つCPUで -N4 を指定すれば、 ちゃんと4つのスレッドが平行して動くのでしょうか
659 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 22:30:08.58 ] RWH一日は無理だろ
660 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 23:04:02.43 ] >>658 >GHC のマルチコア機能はHTに対応するのでしょうか => Yes >ちゃんと4つのスレッドが平行して動くのでしょうか => No ちゃんとの意味にもよると思いますが 詳しくはwikipediaを
661 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 23:25:23.88 ] >>660 > ちゃんとの意味にもよると思いますが 例えば RTSオプションで -s を指定して実行して得られる情報において、 コア数2のCPUよりコア数2HTのCPUの方が、 よりコア数4のCPUに能力的に近いと分かる結果が計測値として出るか、 という意味です
662 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 00:28:18.38 ] >>661 だったらあらためてNoです HTではほとんど性能向上しません(だったような
663 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 09:15:59.39 ] HTって遊んでるユニットを怠けさせないで酷使させる機能に過ぎないから 遊んでるユニットが登場しないサイクルでは機能しない なんちゃって2倍でしょ
664 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 09:36:00.16 ] カズ山本 ttp://redstar-s.blogzine.jp/redstar/images/softbank_hawks_store-img444x600-1121339119kazu_yamamoto.jpg
665 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 18:34:36.09 ] RWHどうなった?
666 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 19:03:40.00 ] >>662 コア数2のノーパソから手頃かに価格のコア数2HTのノーパソに買い換えようかと思ってましたが、 Haskell 絡みではあまり幸せになれなさそうですね コア数4くらいのがもう少し安くなるまで待つことにしました >>663 なるほど、妙に納得しました
667 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 19:09:24.78 ] 正確に2倍になるわけじゃないが、1.7倍ぐらいは楽勝でいくだろw
668 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 19:38:41.19 ] 1.7倍どころかインテル自称で20%増し程度じゃないのか その上、場合によっては遅くなったり、不具合出るオマケ付きっつー… まぁHTとHaskellは殆ど関係ないんじゃないか?
669 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 21:01:38.89 ] HTで速くならないのはコンパイラがそういう最適化をしてないからだろ 1ヶ月ぐらいCPUぶん回す数値計算ならHT向けの最適化をやる意味はあるだろうが、 特に用途も決まってないHaskellが特定のCPU命令セットの最適化して意味があるとは思えないが
670 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 21:15:03.37 ] インテルの発表で sandybridgeで8割に上がったような話があったような気がする。 たしか、HT:ONの場合、 マルチコア全部使い切るようなプログラムのスループットは1->0.8x2x(smp8コア/4コアの効率比が1として)=1.6ぐらい。 ただし、シングルプロセスの実行部分は、 邪魔されて0.8ぐらいまで落ちる場合があるが、 OSのプロセス管理で、なるべく占有できるところに配置される。
671 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 21:16:07.06 ] いままでは、7割、7.5割と上がってきてたのが8割。
672 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 21:19:56.22 ] コンパイラがいくらがんばっても演算密度が十分濃ければSMTで性能は上がらないでしょ
673 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 21:21:34.04 ] >>669 HTの効果を利用するには専用の命令セットを叩く必要があるのでしょうか 今までずっと、特に意識すること無く自動的に各HTに処理を割り振ってくれると思ってました repa を使ってるとダイレクトにマルチコアの恩恵を受けるので、 HTで更に2倍になるならいいなぁと思ってたんですが・・・
674 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 21:25:55.33 ] ようするに、HTで4PC/8VCなら、 OFF:1-4が、 ON:0.7-5.6、0.75-6.0、0.8-6.4 とP4のころに比べて進化してきてるような話だったと思う。
675 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 22:14:43.49 ] >>673 すまん。HT用のインストラクションじゃなくて、HT用に処理をマルチスレッドに分解したり、 スレッドに適したキャッシュ配置にするような特定のCPUアーキテクチャ実行モデルを仮定した最適化という意味だった ICCとかがそういう最適化を前面に出してるが、実際にはそれほど単純には速くならない
676 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 22:50:19.80 ] >>675 なるほど、でも > HT用に処理をマルチスレッドに分解したり この部分は、元々シングルスレッドだったものを、 コンパイラが「勝手に」上手くマルチにしてくれることは無い という意味ですよね もともとマルチスレッドで Haskell のソースコードを作っていたら、 実行時に勝手に HT に振り分けてくれないのですか? そんな単純ではない?
677 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 23:00:34.29 ] 文字列で日本語使えないのでしょうか?