[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 10/27 09:49 / Filesize : 225 KB / Number-of Response : 933
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

関数型プログラミング言語Haskell Part9



1 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 16:41:29 ]
haskell.org
www.haskell.org/

日本語サイト
www.sampou.org/cgi-bin/haskell.cgi
www.shido.info/hs/

過去ログ
関数型プログラミング言語Haskell
Part1 pc.2ch.net/tech/kako/996/996131288.html
Part2 pc2.2ch.net/test/read.cgi/tech/1013846140/
Part3 pc8.2ch.net/test/read.cgi/tech/1076418993/
Part4 pc8.2ch.net/test/read.cgi/tech/1140717775/
Part5 pc8.2ch.net/test/read.cgi/tech/1149263630/
Part6 pc11.2ch.net/test/read.cgi/tech/1162902266/
Part7 pc11.2ch.net/test/read.cgi/tech/1174211797/
Part8 pc11.2ch.net/test/read.cgi/tech/1193743693/
・2chの仕様により、行頭の半角スペースは表示されません。
 コードをインデントしたいときは、代わりに または全角スペースを使うことができます。


520 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 23:58:38 ]
>>518
たとえば、
1:2:3:[]は、
1:2:3:[] → 1:2:[3] → 1:[2, 3] → [1, 2, 3]と簡約されるかもしれないし、
1:2:3:[] → [1, 2:3:[]] → [1, 2, 3:[]] → [1, 2, 3]と簡約されるかもしれない。
でも結果は一緒でしょ?

同じように、
Hello, Worldって出力 >> 一文字入力 >>= 前の文字を出力
みたいなのは、まぁ言ってみれば(不正確だけど)
[Hello,Worldって出力, 一文字入力, 前の文字を出力]みたいな並びにされる(と思われる。実装はカプセル化されていて不明)。
この並びがプログラム終了後にコンパイラにわたって、コンパイラがこれを順番に処理していく。

実はこの並びをプログラム終了後以外に評価する方法があって、それがUnsafePerfomedIOって言う関数。
getContentとかは実はこれを使って実装されている。
Unsafeという名前が示すように、素人にはお勧めできない。(getContent自体は普通に使える。)

521 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 00:02:55 ]
Maybeの特化にしか見えません

522 名前:36 ◆K0BqlCB3.k mailto:sage [2008/08/18(月) 00:25:49 ]
>>519
世界的に全く元気がありません。
ちょこっと変なライブラリを書いたと思えばそれっきり離れていっている人も多数。

523 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 01:36:55 ]
>>520

後者の簡約は型がおかしいし、1:2:3:[]ではなく、
f x = (unsafePerformIO $ print x) `seq` xで
f 1:f 2:f 3:[]だった場合、前者と後者の簡約順序ではprintの順番が違ってくる。
前者は3,2,1で後者は1,2,3

一方で(>>=)は最左最外簡約でも最右最内簡約でも
左から順にしか値が定まらないようになってる。

putStr "Hello" >>= (\ _ -> getChar) >>= (\ c -> putChar c)
(>>=)の右辺が関数だから左辺の値が定まるまでa >>= bが最終的な値に簡約できないようになっている。

524 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 03:17:18 ]
>>522
元気無い理由って何でしょうか。他に元気ある言語ってあるのかな。

525 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 04:14:24 ]
ruby

526 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 08:38:27 ]
>>520
> 1:2:3:[] → [1, 2:3:[]] → [1, 2, 3:[]] → [1, 2, 3]と簡約されるかもしれない。

型が滅茶苦茶だよ。

> この並びがプログラム終了後にコンパイラにわたって、コンパイラがこれを順番に処理していく。

意味不明。なぜプログラム終了後にコンパイラが出てくる。
ランタイムライブラリとごちゃまぜになているぞ。


527 名前:デフォルトの名無しさん [2008/08/18(月) 10:05:00 ]
Haskellにこういう奴が多い気がするのはなぜだ

528 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 10:21:37 ]
「こういう奴」と書けばどんな奴を指してるのか分かってもらえると思ってるような、
想像力の貧しい奴がこのスレに多いような気がする



529 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 13:36:03 ]
末尾が「気がする」で終わってるレスは
全部気のせいのような気がする

530 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 15:08:49 ]
なんという自己言及レス

531 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 15:12:16 ]
関数型らしくて言いじゃないか

532 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 15:41:06 ]
>>531
つ座布団1枚

533 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 21:50:15 ]
* -> * -> * ってどんなとき使うの?

534 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 22:25:25 ]
アナルトレイン

535 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 07:45:46 ]
  ( ゚д゚)゚д゚)゚д゚)
  /  つ つ  つ
  (_(_  ノ ノ  ノ
  し∪ ∪ ∪

536 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 10:10:53 ]
>>505
> ところで、 データ型とAPIのセット のことをなんて呼べばいいの?

プログラミング言語一般での話なら「抽象データ型」でしょうね。

537 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 11:50:46 ]
>>533
関数(->)とかタプル(,)とか

538 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 20:24:46 ]
485でおま。
それでなのです。 >ときどきの雑記帖の中の人



539 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 14:40:13 ]
Arrow は * -> * -> * のクラス
MonadTrans は (* -> *) -> * -> * のクラス

540 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 21:20:37 ]
book.realworldhaskell.org/beta/

これの30章が消えてるんだけど・・・。

541 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 22:05:29 ]
本買えよ

542 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 23:26:23 ]
30章だけが読みたいんだよ。

ところで、HaskellでPetStoreってあるの?

543 名前:36 ◆K0BqlCB3.k mailto:sage [2008/08/21(木) 23:56:58 ]
>>542
横からすみませんが、
Pet Storeをよく知らないのでちょこっと検索したんですが、
これっていったい何が面白いんですか?

544 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 00:08:29 ]
>>543
面白くは無いんだけど、色んな言語やフレームワークで同じもの作る
ことで比較をするためのものでしょ。同じアプリがこんな感じで作れ
ちゃうぞ、という。


545 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 11:40:45 ]
Haskellでウェブアプリというとふつう本か

546 名前:36 ◆K0BqlCB3.k mailto:sage [2008/08/22(金) 12:37:40 ]
最近では新しい言語はWEBアプリが書きやすくないと人が入ってこないらしく、
ライトウェイト言語がブームみたいだね。
HaskellはライトウェイトではないからWEBアプリ向きとは全然思えないんだけど、
RubyでRubyOnRailsが考えられたみたいにHaskell独自のWEB向きキラーアプリが
出てこないとHaskellの人気はこれからもずっと平行線だと思うよ。

547 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 12:41:19 ]
>>546
WEBアプリが書きやすいっていうより、APIとかWEBコンテナが標準装備されてないとダメという感じがする。
Javaの功罪は大きい。

548 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 12:41:59 ]
まだ横ばいならたいしたもんだ



549 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 12:48:26 ]
>HaskellはライトウェイトではないからWEBアプリ向きとは全然思えないんだけど、
ライトウェイトって何?動的に型を付ければライトウェイト?
それとwebとどういう関係があるの?

550 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 13:05:36 ]
あまり考えずに気の向くままに書いてもあっさり動くのが
ライトウェイトってことじゃないか?
web案件は短期だったりアジャイルだったりでライトウェイトに
開発できるのが求められてるってのはある

551 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 13:10:45 ]
WEBアプリの開発者は、JavaかRubyのHowto本から入ってる。
だから、WEBアプリ開発者は、身体のどこかに、プログラミング言語のJavaかRubyに似てない部分に拒否反応を持ってる。

552 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 13:11:10 ]
ここでHaskellは人間の思考過程に最も近いから
考えが即座にコードにうつせるため開発期間が最短であると主張する人がどこからか登場
                    ↓

553 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 13:23:23 ]
                    |
                ( ゚д゚ )↓
                 (⊃⌒*⌒⊂)
                  /__ノ''''ヽ__)

554 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 13:27:58 ]
>>550
それならHaskellもライトウェイトで良くね?

555 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 14:05:36 ]
明示的なコンパイル作業が必要ないってのはLLの必要条件な気がする。

556 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 14:18:04 ]
LLとかWebアプリとか、
だから普及しないとか、
どうでもよくねえ?
好きな事、楽しい事すればいい。

557 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 14:22:47 ]
>>555
runghcがあるじゃないか
もうちょっと速ければと思うことはあるけど

558 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 14:34:05 ]
>>556
そういう立場も理解できるけど、俺は普及してほしい
ライブラリのメンテとか人が足りてないじゃん



559 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 14:46:33 ]
>>552
Prologには負けるんじゃない。

560 名前:36 ◆K0BqlCB3.k mailto:sage [2008/08/22(金) 14:47:15 ]
runghcはオーバーヘッドもかなり大きいみたいだね。

$ cat hello.hs
main = putStrLn "hello"
$ time runghc6 hello.hs
hello

real 0m0.835s
user 0m0.780s
sys 0m0.052s

$ cat hello.rb
print "hello\n"

$ time ruby hello.rb
hello

real 0m0.015s
user 0m0.012s
sys 0m0.000s

561 名前:36 ◆K0BqlCB3.k mailto:sage [2008/08/22(金) 14:48:14 ]
$ cat hello.pl
print "hello\n"

$ time perl hello.pl
hello

real 0m0.007s
user 0m0.004s
sys 0m0.000s

$ cat hello.py
print "hello"

$ time python hello.py
hello

real 0m0.035s
user 0m0.020s
sys 0m0.016s


562 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 15:03:43 ]
LLでHaskell関係のプレゼンとかしてる人いるみたいだけど?

563 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 15:07:56 ]
WebアプリとLL(と呼ばれている言語)との間には全く関係はないけど、
Webアプリのかなり大部分は一般的にLLと呼ばれている言語で書かれているだろう。
そういう"LL"はテキスト処理がしやすいからってのがあるだろうな。
まあHaskellがそういう意味で人気にならなくても別にどうでもいいけど。

ここでmondic Parser Combinatorを持つHaskellが
最もテキスト処理に適した言語であると主張する人がどこからか登場。
                    ↓

564 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 15:38:43 ]
HaskellもLL言語だよ

565 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 15:45:06 ]
これどうなの?
ttp://happs.org/

566 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 16:09:31 ]
Parser Combinatorがあるからテキスト処理ならHaskell最強だろ。







満足した?

567 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 17:42:48 ]
haskellは型推論がちゃんと効いてる使い方が出来れば、LL的な生産性は確保できるだろう。
だがな、至高の存在で良いじゃないか。

haskellの性質上webプログラミングは不得意分野に思うんだが、mod haskellなんて生まれる
分けでもないし生まれたところで破壊的操作がほとんどできないし、ファイル操作は基本的に
苦手でしょ。webは動的言語の親玉が一番向いてるけどs式アレルギーな人が多いからLLに
なってるんでしょうね。

だから、無理にwebに擦り寄らずとも良いと思うんだけどね。むしろ、破壊的操作より安全性を
大切にされる金融などのところで目立つ存在になってくれたらいいんじゃないか?


568 名前:36 ◆K0BqlCB3.k mailto:sage [2008/08/22(金) 18:09:07 ]
>>567
もし金融などで使われることを想定するなら、
haskellの並列処理に関する部分も早く実装してほしいところですね。
(まだ未完成)



569 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 18:44:00 ]
某氏のhapps解説はお流れ?

>>567
> 破壊的操作がほとんどできない
なんで?

570 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 18:58:34 ]
なんでそんなにHaskellの応用分野を限定したがるんだw

>>567
コンパイルするならmod_haskellがあっても恩恵は小さいだろ
>破壊的操作がほとんどできないし
Haskellで入出力書いたことあるか?
>ファイル操作は基本的に苦手
これも良く分からん
flock使うのにわざわざライブラリを落としてこないといけないとか、そういうこと?

571 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 19:43:28 ]
ウイルス対策ソフトのように危機感を煽るのはいいが、
既存のシステムを補強するのではなく全部作り直せというのは、ちょっとね

572 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 19:54:17 ]
>>570
Prologを事務処理に使うと、住所や氏名情報などで爆発的にアトムが
発生し、Heap領域を埋め尽くして、GCが頻発するという事態となる。
もちろん数百万レコードを越える処理単位の話だが。
Haskellの場合この問題は起きないの?

573 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 20:37:03 ]
Webアプリが苦手ってことは無いと思うんだけどな。今後Webベースのアプリは
まだ増殖するだろうから、そっちで使いやすいフレームワークやDSLが出ないと
使う人は頭打ちだと俺も思う。

研究者の論文レベルのものも面白いだろうけど、上から下までHaskellベースで
かかれたWebアプリとかで目立つものが出てほしいよ、個人的には。

574 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 20:53:32 ]
>>572
アトムの爆発ってのはPrologスレで言及されてる現象のことでいい?
そもそもPrologのアトムってのが良く分からんので何が問題なのか理解できん
Lispのシンボルみたいな物と思っていいのかな
それなら相当するものはHaskellにはないよ

575 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 21:35:41 ]
>>574
Lispのシンボルみたいな物、ですね。
記号をどう処理しているのですか。

576 名前:デフォルトの名無しさん [2008/08/22(金) 21:53:05 ]
>>540
30章ってなんの章だったの?

577 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 22:12:26 ]
>>575
「記号」と言われてもいまいちピンと来ないんだが、何にせよ、
普通の手続き型言語が「記号」を処理するのと大差ない方法で処理してると思う

取り得る種類がコンパイル時に決まっているなら列挙型
そうでないなら整数とか文字列
文字列の比較のコストが問題になるなら自分でシンボルテーブルのようなものを用意する、とか

578 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 22:34:03 ]
>>576
>>310-314



579 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 09:45:26 ]
>>572
Prologでも、
1レコード512バイトをsub_atomで30項目に分解したり、更にsplitの
処理をしたりすると確かにアトムが大量発生するだろうが、
Stringとして読み込んで、終始String処理に徹すれば、アルファベットの
数、つまり高々数万のアトムで済むんじゃないの?
Stringすなわちリスト処理になると遅いから嫌なのかな。


580 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 10:00:27 ]
宣言的言語をリアルタイム処理に使いたくない病にかかってる。
資源が十分にあると理屈では分かっていても、終わったら電源切っても大丈夫な処理じゃないと拒否反応がでる。

581 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 10:09:14 ]
>>579
処理速度もあるかも知れませんが、アトムだと、
foo([株式会社|R],R).
と書けるところが、Stringだと
foo(List,R) :- append("株式会社",R,List).
と書かなくてはならないということがあります。
appendを高速化する機構が欲しくなりますね。


582 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 10:35:10 ]
それって代数的データ型を使ってこんな感じで良いんじゃない?

data Atom = Kabushiki | Dummy deriving (Show, Eq)

foo :: [Atom] -> [Atom]
foo (Kabushiki : r) = r


583 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 11:43:27 ]
Prologでまったり Part3
pc11.2ch.net/test/read.cgi/tech/1193354806/

584 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 12:43:04 ]
>>581
この話おかしいよ。
foo([株式会社|R],R). の方は、
すでに株式会社というアトムが切り出されていて、リストの構成要素になっている。
一方、
foo(List,R) :- append("株式会社",R,List). のListはString。ここは、
foo(["株式会社"|R],R).
でなきゃ、フェアじゃない。


585 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 13:58:45 ]
>>572
> Prologを事務処理に使うと、住所や氏名情報などで爆発的にアトムが発生し

第五世代コンピュータプロジェクトの成果を是非参照下さい。

586 名前:36 ◆K0BqlCB3.k mailto:sage [2008/08/23(土) 14:16:16 ]
>>585
よく知らないけどソフトウェア科学会会誌7月号に第五の話題が載っていたよ

587 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 14:21:10 ]
成果って、「prologって役立たずじゃん」という結論を得たこと?

588 名前:36 ◆K0BqlCB3.k mailto:sage [2008/08/23(土) 14:28:53 ]
>>587
それは短絡的な人たちの根拠のないうわさ。
第五は基礎研究なので企業の人たちが求めるような成果が出ないのは当たり前のこと。



589 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 14:31:33 ]
Prologの話は他でやってくれ
んで問題点を整理してまたいらっしゃい

590 名前:36 ◆K0BqlCB3.k mailto:sage [2008/08/23(土) 14:33:31 ]
詳しいことは忘れたけど、
述語論理による仕様記述を使った鉄道のプロジェクトが企業側で行われた例があったような。
なんだったっけ?

591 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 14:45:22 ]
Prologはどうでもいいのだが、Haskellで金融(とくに保険業)のアブリを
開発する場合、何か問題になる点はないのか。

592 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 14:54:20 ]
>>591
必要なメモリサイズを予測しにくい点とか。full lazyな処理系全般に言えると思うけど。

593 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 14:57:02 ]
金融系システムにHaskellを使うメリット自体が思いうかばん。
いいじゃん、Javaでつくるのが流行ならJavaで作らせれば。
どうせ枯れたシステムなんだから。

594 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 15:00:18 ]
>>592
full lazyな処理系って、よくわからない。

595 名前:36 ◆K0BqlCB3.k mailto:sage [2008/08/23(土) 15:11:43 ]
どんな言語で書いたとしても、必要なメモリの量は実際に動かしてみないとわからないよ。

596 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 15:17:46 ]
haskellっていいプロファイラあんの?

597 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 15:26:42 ]
>>595
COBOLなんかは確定してると思うけど。

598 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 15:42:16 ]
>>597
してない。
SORTなどに内部的に使う記憶容量が不明。



599 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 15:43:11 ]
Haskellのようにデフォルトで遅延評価する言語は、
計算をできるかぎり遅延させようとするから、
下手な書き方するとすぐメモリリークする

Haskellのメモリリークは大抵の場合小規模な修正で直るけど、
どこを修正すべきか探すのに慣れとプロファイラが要る

>>596
GHC付属のプロファイラは優秀だと思う

600 名前:36 ◆K0BqlCB3.k mailto:sage [2008/08/23(土) 15:47:59 ]
>>596
profオプションをつけてコンパイルしたらランタイムシステムにプロファイラが組み込まれるよ。
詳しくはマニュアルで。

601 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 16:19:23 ]
>>598
ん?確定はしてなくても最大どれかけかかるかは確定してるでしょ。
グラフ簡約のヒープ消費は予測もつかんぞ。

602 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 16:27:11 ]
>>601
確定してるのかしてないのかどっちだw

603 名前:初心者修業中 mailto:sage [2008/08/23(土) 16:37:52 ]
Haskellでメモリーリークが起きるのですか?

ガベージコレクションにバグがない限り、
メモリーリークが起きるとは思えないのですが…。

FFIを使った場合の事でしょうか…。

604 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 17:15:44 ]
>>599 の例としては↓の話かな。
d.hatena.ne.jp/desumasu/20060909/1157800884

この場合のメモリーリークは単なるメモリの解放忘れって事ではなくて、
期待した解放タイミングと実際のそれとのギャップの事みたいだね。

605 名前:初心者修業中 mailto:sage [2008/08/23(土) 17:42:49 ]
これも「メモリーリーク」と呼ぶのでしょうか?

*Main> foldr (+) 0 [0..1000000]
*** Exception: stack overflow


606 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 18:05:58 ]
プログラマが意図してないで、リファレンスが残るようなコーディングを
しちゃってる、というのをリークに含めることもある。

607 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 18:34:57 ]
>>605
それは「マヌケ」と呼びます。

608 名前:初心者修業中 mailto:sage [2008/08/23(土) 18:57:56 ]
stack overflowが発生する時、

簡単にわかる場合は「マヌケ」
ちょっとわかりづらい場合は「メモリーリーク」

と呼ぶという認識でよろしいでしょうか?



609 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 19:14:20 ]
リークってのは「漏れ」のこと。
GCのある言語だと、>>606しか起こり得ない。
>>605の「溢れ」とは全然違う。

610 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 19:20:46 ]
>>605
それはスタックオーバフロの例外であって、エラーとは違う。
メモリリークしているわけではないよ。

611 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 19:22:12 ]
C言語みたいに型があいまいな言語ではメモリリークが起こりうるが、
Haskellみたいに強い静的型付けされている言語にはメモリリークなんてありえないよー

612 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 19:26:56 ]
スタックオーバーフローとメモリーリークは
現象として全然違うと言う事ですね。
分かります。

613 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 19:53:14 ]
>599や>604が挙げているような例はC言語で
良く言われる「メモリーリーク」とは違う現象だな。

Haskellの場合、遅延評価がデフォーなので
うかつに再帰を使うと計算の途中結果が膨大な
ものになってヒープ領域が溢れてしまう。

Cの場合はただの確保したメモリの解放し忘れ。
Cでも再帰的なメモリー確保をすれば
Haskellみたいな事も起きうるはずだが。

614 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 20:06:48 ]
>>611
強い静的型付けとメモリーリークの有無はほとんど関係がありません。
GCの方がずっと関係が深いです。


615 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 20:09:24 ]
Pascalのnewとfreeだっけ?
あれ考えれば分かるよな。
強い型付けでも簡単にメモリーリークは起きる。

616 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 20:56:45 ]
foldl でも stack overflow するんだよね。
Data.List.foldl' 使えばいいんだけど。

617 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 21:35:43 ]
なんで foldl でスタック溢れるの?末尾再帰が最適化されてないの?

618 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 21:48:31 ]
>>604のリンク先に書いてある
末尾再帰は最適化されるよ



619 名前:初心者修業中 mailto:sage [2008/08/23(土) 23:53:01 ]
>>617
遅延評価だからと認識しています。
↓参考
haskell.g.hatena.ne.jp/jmk/20060710/1152516465

620 名前:617 mailto:sage [2008/08/24(日) 00:40:37 ]
>>618-619
なるほど、非常によくわかりました。
(つーか前出のリンク読まずにレスして申し訳ない)

うーむ、しかし末尾再帰が最適化されることの旨みは、
・ローカルスコープの値をスタックに積む必要がなくなることと
・連続するreturnが省略されること
の2点だと思うけど、foldl のように結局は遅延評価のための
computation がスタックに積まれていて、後から順次簡約するなら
「最適化されている」とは言い難い気もするな・・・。
最適化するための然るべき変形は、一応してあるんだろうけど。

まあ seq 使うとか、回避の仕方がないわけじゃないからいいのかな?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<225KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef