関数型言語Haskell
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
2006/08/20(日) 10:20:00ID:ij8ZPQFq0本を読んでもわからないところを聞くのもよし。
本に関して文句を書くのは、ちょっとだけならいい。
GHCとHugsを比較するのも良し。
モナドに関して三重対の話まで落とされると、話がちゃんと進むかどうかわかんない。
それではどうぞ。
0002名無しさん@お腹いっぱい。
2006/08/20(日) 17:43:03ID:XLkXkbqB00003名無しさん@お腹いっぱい。
2006/08/20(日) 23:22:52ID:XUpqTkNK0関数型プログラミング言語Haskell Part5
http://pc8.2ch.net/test/read.cgi/tech/1149263630
0004名無しさん@お腹いっぱい。
2006/08/21(月) 01:56:56ID:MWx8RcAF0どっちもゴミと主張するなら理由もセットでね。
このスレの趣旨としては、Haskellの理論的側面を話題にするのがいいかもね。
例えば、
(1) 言語の副作用についての是非
(2) カテゴリー理論から見たモナド
(3) 遅延評価の長所と短所
(4) 参照透明性ってどうなのよ
(5) Haskellにオブジェクト指向を導入するのはいいのか
とか。一例に過ぎないけれど。
個人的には(2)に興味があったりする。
0005名無しさん@お腹いっぱい。
2006/08/21(月) 06:48:15ID:+M3y+F/90http://db.ewi.utwente.nl/Publications/PaperStore/db-utwente-0000003696.pdf
モナドの定義と、それを理解するのに必要な最低限の圏論の解説。
新しい概念を導入するたびに型システムとの対応を示してくれるので、
Haskellプログラマにはわかりやすいと思う。
題名に反して、HaskellのIOの理解には大して役に立たないような気がする。
0006名無しさん@お腹いっぱい。
2006/08/21(月) 12:04:10ID:IurHxea80レベル上げがマゾいとかドロップ悪いとかって次元じゃねぇ、プレイヤーがヤバい
殺伐の一言で表せない、どちらかというと戦場だね
某ハックゲー並にカヲス、PKとかPKKとかどうでもいいぐらい、ボルドーが徘徊
0007名無しさん@お腹いっぱい。
2006/08/22(火) 10:41:46ID:UFcuVYt7O0008名無しさん@お腹いっぱい。
2006/08/22(火) 11:03:06ID:i+RRtceh0ttp://www5b.biglobe.ne.jp/~madison/worst/hitokoto/p066/p066.jpg
ttp://chinchin.seesaa.net/image/BigTit.jpg
0009名無しさん@お腹いっぱい。
2006/08/25(金) 20:53:32ID:JYygCJQg00010名無しさん@お腹いっぱい。
2006/08/25(金) 21:39:32ID:EeuJ56A70パフォーマンスチューニングが難しい、というのに尽きると思う。
素朴に書くと空間計算量のオーダーが違う程非効率なことも少なくないし、
高速なコードを書くにはかなりの慣れ(言語への慣れでなくチューニングへの慣れ)が必要になる。
例えばGHCで高速なコードを書こうと思うと、
遅延評価の理解に加えて、内部で使われる中間言語(core言語、STG言語)の
読み方と機械語(あるいはC言語)への対応、さらに
GHCで使われている主要な最適化手法など関する知識が必要になる。
0011名無しさん@お腹いっぱい。
2006/08/27(日) 04:26:21ID:ixZFLEzq00012名無しさん@お腹いっぱい。
2006/08/27(日) 14:44:07ID:Z8ciPQ9OO処理系の問題じゃない?
jhc とか速そうだけど。
0013名無しさん@お腹いっぱい。
2006/08/27(日) 16:23:02ID:LLB+6ncW0言語やライブラリの仕様でいろいろパフォーマンスに配慮してるし、
プログラマもHaskellに比べてグラフ簡約を意識しながら書くからじゃなかろうか。
0014名無しさん@お腹いっぱい。
2006/08/27(日) 19:56:27ID:LLB+6ncW0どれくらい?
0015名無しさん@お腹いっぱい。
2006/08/27(日) 23:20:02ID:nB/ux1hZ00016名無しさん@お腹いっぱい。
2006/08/27(日) 23:37:43ID:LLB+6ncW00017名無しさん@お腹いっぱい。
2006/09/09(土) 13:43:04ID:KKnLBPum0たらいまわし関数を必要とする市場では生き残るかも。
0018名無しさん@お腹いっぱい。
2006/09/22(金) 23:22:24ID:KXn2vpPV0\
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄V ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
/ ____ヽ /  ̄  ̄ \
| | /, −、, -、l /、 ヽ
| _| -| ・|< || |ヘ |―-、 |
, ―-、 (6 _ー っ-´、} q -´ 二 ヽ |
| -⊂) \ ヽ_  ̄ ̄ノノ ノ_/ー | |
| ̄ ̄|/ (_ ∧ ̄ / 、 \ \ | /
ヽ ` ,.|  ̄ | | O===== |
`− ´ | | _| / |
| (t ) / / |
/ ̄ ̄ ̄ ̄ ̄ ̄\
/ )
| ノノ_ノノ_ノノノ
| / / ヽ/ ヽ |
|i⌒ ─| ・ | ・ | |
| ∂ \__人___/ |
|| っ | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
/ \ ノ < ゆういちちゃん、お客さんよ。何でも福岡県警だとか・・・
/WWW \ ⌒ / \__________
0019名無しさん@お腹いっぱい。
2006/11/27(月) 14:49:45ID:MLbXiGPu0http://wiki.ninki.org/wiki.cgi?p=%b4%d8%bf%f4%b7%bf%b8%c0%b8%ecHaskell
0020名無しさん@お腹いっぱい。
2007/05/05(土) 18:43:32ID:XOSPBSBs0http://www.seas.upenn.edu/~lipeng/homepage/unify.html
via
matz日記
http://www.rubyist.net/~matz/20070428.html#p01
>Haskellでイベントモデルとスレッドモデルを融合した新しい並列実行モデルを実装したという話。 Linux上のI/OベンチマークでNTPLよりも高速だったそうだ。
これから読む。
0021名無しさん@お腹いっぱい。
2007/05/10(木) 03:04:31ID:zxOztb7y0で、どうよ?(英語わからん
NPTLと比較してるみたいだけど、そもそもNPTLってSolarisとかWindowsのより性能良いの?
(スレッドモデルわからん
0022名無しさん@お腹いっぱい。
2007/05/10(木) 05:33:46ID:0kIzwegW0動機:
ネットワークアプリだと大量のスレッドを作る必要がある。軽量なスレッドが必要。
アプリケーションレベルスレッドなら強い型を持つ軽量なスレッドが作れる。
スレッドを使ったプログラミングスタイルはイベントドリブンなプログラミングスタイルよりもロジックが書きやすい(イベントドリブンで処理がぶつ切りの状態機械を書くのに比べて)。
イベントドリブンなスタイルは、イベント待ちループのカスタマイズがしやすくて、古典的なselectによるIOの他にepollやAIOなどをサポートするのが楽だ。
両者の良いところを取ったシステムがあると良い。
作ってみよう。
概要:
基本的には継続モナドによる、アプリケーションレベルのプリエンプティブでないスレッド。
スレッドの切り替えは、明示的な切り替え、IOモナドを使うとき、forkしたとき、等に起きる。
同期はSTMを使うことを想定しているが、Mutexなども実装できることを示している。
理論的には新しくないけど、実際に質的(拡張性とか書きやすさとか型安全性とか)にも量的(パフォーマンス)にも使いものになることを示したのがcontribution。
仕組み:
ネイティブなスレッドを幾つか用意して、(アプリケーションレベルスレッドの)スケジューラーや、イベント待ちループをその上で動かす。7ページにある図がわかりやすい。
スケジューラーはスレッドの待ち行列から(アプリケーションレベル)スレッドを取り出して、イベントハンドラに登録する(つまり、epoll_ctlなど)。
イベント待ちループはイベントを待って(つまりepoll_waitなど)、イベントが来たら対応する(アプリケーションレベル)スレッドを待ち行列に入れる。
Concurrent Haskellにより複数のCPUを使える。その場合はスケジューラーを複数のスレッドで動かす。
pureな式の評価に関する同期はHaskellが面倒見てくれるのでそれに任せる。
その他の同期だけをこっちで面倒見る。
メリットや性能:
1(アプリケーションレベル)スレッドあたり、48バイト程度しか消費せず、1千万スレッドを動作可能らしい。
入出力に、同期IO、AIO、epoll、selectなど複数の機構をサポートするのが簡単(同期IO用のイベント待ちループ、AIO用のループ、などは別々のネイティブスレッド上で動く独立したコードとして書ける)。
継続モナドなので例外などのサポートも簡単。
TCPスタックをHaskellで書いたらしい。シンプルなweb serverも書いてパフォーマンスを調べた。
(ベンチの結果については詳しく読んでないのでわからん)
0023名無しさん@お腹いっぱい。
2007/05/13(日) 16:58:32ID:7TzwSeED0Haskellがこういう実装に有利な言語だっていうのを示してるってわけか?
0024名無しさん@お腹いっぱい。
2007/05/17(木) 20:32:43ID:ImkUNHJw00025The materialism-plan
2007/10/18(木) 19:36:11ID:MGpl3Ota0http://eatcosmo.exblog.jp/
http://eatcosmo.exblog.jp/
http://eatcosmo.exblog.jp/
0026詐欺師 城戸英行
2008/05/20(火) 14:53:00ID:K+f+pP3X0借金で一家離散の城戸英行を探せ!
0027名無しさん@お腹いっぱい。
2008/11/02(日) 07:35:21ID:mHoXyYAw00028名無しさん@お腹いっぱい。
2008/11/03(月) 12:53:13ID:xbiktaKM00029名無しさん@お腹いっぱい。
2009/01/22(木) 06:00:59ID:K4Ka49ke00030名無しさん@お腹いっぱい。
2009/02/14(土) 05:29:07ID:mdNJ9QUL00031松山 赤○○ 病 員 清掃 商 事
2009/02/16(月) 01:05:34ID:HWjVI1a3Oしにたい
0032名無しさん@お腹いっぱい。
2009/02/22(日) 04:46:49ID:aU2B7EEA0生きろ。いつか「あの時死ななくて良かった」って思うから
0033名無しさん@お腹いっぱい。
2009/03/23(月) 11:00:12ID:+dVaOdyx00034名無しさん@お腹いっぱい。
2009/04/27(月) 01:49:01ID:Z7cVY9V200035名無しさん@お腹いっぱい。
2009/10/11(日) 02:28:23ID:oGT92n/o0私は五歳の頃、世界で一番大きな数は百くらいだろうと思っていたが、
父は百の十倍の数も存在し、さらにその十倍の数も存在するという事実を
教えてくれた。私は圧倒された。そのように大きな数が存在し、なおかつ
それが 1, 2, 3, .... と一つずつ、そして途方もない階梯の向こうにまだ私が
想像したこともない巨大な数が存在し、しかも階梯を登ってその数にたどり
ついたとしたらその上に途方もない巨大な数が見渡せるという事実は私を不安にさせた。
数晩の眠れない夜のあと、私はこのようなことについて考えるのをやめてしまった。
今日、私は大人と呼ばれる年齢になり、Haskell という言語をたったいま学んだところだ。
私は、幼い頃に考えるのをやめてしまった謎、つまり自然数の「最後の数」は何かを
突き止める機会がようやく訪れたのを知った。
main= print $ take 1 $ reverse [1 ..]
このわずか一行のプログラムが私に、幼かった私には想像することすら恐ろしいと思わせた
究極の答えを教えてくれるはずである。現在このプログラムを実行中だが、さすがに
究極の答えを求めた代価として恐ろしいほどのページファイルを消費している。
私は今から眠るが、数時間後、少し遅めに起きた私は爽やかな目覚めともに究極の答えを
手にしているはずである。
0036名無しさん@お腹いっぱい。
2009/10/11(日) 15:00:09ID:KWFsf3AJ0もう少しは知恵を絞って捻った面白いストーリーにしてくれ
0037名無しさん@お腹いっぱい。
2009/10/11(日) 18:58:58ID:oGT92n/o00038名無しさん@お腹いっぱい。
2009/10/17(土) 01:31:08ID:wMYpaZ4d0処理系が「はいはい、バカな人間めしょうがねぇなぁ」とあしらってくれたら良いのに。まともに動いてどうするんだよと。
「0で割るんじゃねーよバカ人間」みたいに。
0039名無しさん@お腹いっぱい。
2009/10/19(月) 12:12:34ID:EKWl7b1I0おまえは「停止問題」をなんだと思ってるのだ
0040名無しさん@お腹いっぱい。
2009/11/25(水) 12:46:03ID:XCOv/7zT00041名無しさん@お腹いっぱい。
2009/11/28(土) 21:08:26ID:GuLmcIPl0make_pair f x y = (f x, f y)
を定義するにはどうしたらよいですか?
make_pair id 3 "foo"
とかのように使いたい.
■ このスレッドは過去ログ倉庫に格納されています