正しくTogetter / min.tにログインできない不具合が発生中です。X側の修正をお待ちください(詳細はこちら)

末尾再帰最適化/末尾呼び出し最適化 on JVM

みんなだいすき
26
前へ 1 ・・ 3 4 ・・ 7 次へ
ぼろんじ @boronology

http://t.co/Ox4MMcNl によると「recurはClojureにおける唯一のスタックを浪費しないループ構造です。末尾再帰の最適化はありませんしや未知の束縛のループのために自分を呼び出すような使い方はできません」……かな?

2012-03-28 15:00:50
そうこど @sowcod

つい最近末尾再帰という言葉を覚えたからTLのその話題が目につくようになったのか、はたまた俺が末尾再帰という流行を先取りしていたのか。

2012-03-28 15:01:05
集会の自由 @oskimura

Scalaは最後に自分自身を呼び出している場合のみ末尾再帰になるらしい。まぁ当然のような。

2012-03-28 15:01:28
Jun Furuse 🐫🌴 @camloeba

ジャンプの先にジャンプ置いたらサイズ制限は回避できますか? RT @esumii 野暮きわまりない蛇足。(相互再帰ではなく単独再帰で、関数本体がでかすぎなければ)JVMでも普通に末尾再帰最適化できます

2012-03-28 15:01:53
ゆきねこなんとか @yuki_neko_nyan

末尾再帰最適化のことを略して末尾再帰っていうのはちょっとあれじゃないかなーっと。

2012-03-28 15:02:07
Takuo Watanabe @wtakuo

末尾再帰とTCOを混同されていませんか.末尾再帰は単に末尾位置における再帰呼び出しのことで,TCOを行うかどうかは無関係です. RT @kazu_yamamoto: 末尾再帰とは、関数を飛び出すかもしれないジャンプのことです。スタックを消費しないことが大事。← 僕の理解

2012-03-28 15:02:36
SKS rep @repeatedly

@oskimura Scalaは確かループに変換していたはず.Scala強い…

2012-03-28 15:03:59
山本和彦 @kazu_yamamoto

.@wtakuo ああ、すいません。TCO というべきでした。しかし、遅延評価だとどっちも同じ意味のような気もします。

2012-03-28 15:05:09
Takuo Watanabe @wtakuo

だから言語や実装に関係なく,たとえコールスタックを消費しても「末尾再帰はできる」と言ってよいはず.

2012-03-28 15:05:20
S (ツイートはスレッド全体をご確認ください) @esumii

@camloeba あれ、突っ込まれると私のボロがでそうですが、JVMの1メソッドの最大サイズ制限が64KBで、メソッドをまたぐジャンプができないから…という問題なので、「ジャンプ先にジャンプ置く」だけでは何も変わらないですよね?

2012-03-28 15:05:22
S (ツイートはスレッド全体をご確認ください) @esumii

野暮な蛇足の続き。末尾呼び出し≠末尾呼び出し最適化≠末尾再帰最適化≠末尾再帰

2012-03-28 15:06:50
Jun Furuse 🐫🌴 @camloeba

@esumii ああ、あれはメソッドサイズの制限で、ジャンプ幅をケチってる訳じゃないのですね!

2012-03-28 15:07:39
山本和彦 @kazu_yamamoto

.@esumii う、そこまで区別しないといけませんか。

2012-03-28 15:07:56
山本和彦 @kazu_yamamoto

.@camloeba @esumii スタックを消費せずに、関数外へ飛び出す方法がないのが問題だった気がします。

2012-03-28 15:08:47
Ryoma Sin'ya @sinya8282

TCOとTCE同じかな? 前者のほうが広そうだが。

2012-03-28 15:09:11
natsutan @natsutan

ん、 末尾再帰最適化 ⊂ 末尾呼び出し最適化 ちゃうの?

2012-03-28 15:09:38
Jun Furuse 🐫🌴 @camloeba

てことは JVM で関数型言語作るときは関数が大きかったら細切れにする必要があるの…こりはシンドイ

2012-03-28 15:10:39
🎀にゃおきゃっと🐈Nyaocat🎀 @nyaocat

@natsutan 末尾呼び出しは再帰以外の呼び出しも含むのでは?(今twtr開いたので流れ読めてませんが

2012-03-28 15:10:46
natsutan @natsutan

@nyaocat 僕も流れ読めてませんが、末尾呼び出しの最適化の特殊な形(飛び先が自分)が末尾再帰の最適化じゃないのって言いたかったです。

2012-03-28 15:11:59
S (ツイートはスレッド全体をご確認ください) @esumii

@esumii 相互再帰でない末尾再帰を最適化して(Javaの)stack inspectionに影響する場合ってどんな場合よ?と自己ツッコミでボロを出しておく。

2012-03-28 15:12:27
山本和彦 @kazu_yamamoto

.@camloeba 今のところ、相互再帰は一つの関数にして、関数内でジャンプ。関数が大きくてジャンプできないならトランポリン。というのが、現実的だと思います。

2012-03-28 15:12:35
Yasushi Abe @yasushia

http://t.co/yvCJK5hA これで知ったので末尾再帰はgotoと等価、と大体理解しました

2012-03-28 15:12:55
ぼろんじ @boronology

まあClojure、普通に再帰書いたら末尾再帰であろうとなんであろうと最適化はされなかったはず。なのでrecurを使いましょうということだけど中で何が起こってるのかは……

2012-03-28 15:13:49
山本和彦 @kazu_yamamoto

.@ichimal 記号処理は、SICP でやった程度の知識しかありません。orz

2012-03-28 15:15:05
前へ 1 ・・ 3 4 ・・ 7 次へ