[過去ログ] 次世代言語11[Rust Swift TypeScript Dart] (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
937(1): デフォルトの名無しさん [sage] 2018/07/03(火) 00:16:39.10 ID:ulFfuTSn(1) AAS
何故breakにしたんだろねRuby。returnじゃ駄目だった理由が分からない
948: 857 [sage] 2018/07/03(火) 09:12:56.01 ID:0xlHwX4q(1/2) AAS
>>937
いや、next はともかく、 break は lexical scope の範囲内では実装出来ないんだよ。
break が for や while でキャッチされる特殊な例外扱いならば、こんなおかしな事にならず、Proc 内でも break 使える様に出来たのに。
>>938938(1): 844 [sage] 2018/07/03(火) 01:06:30.72 ID:LtnxPY8P(1) AAS
Ruby では、break, return、例外も、単一の同じ仕組みを使っている。
コールスタックをさかのぼるポインタ。
つまり、どこから呼ばれて、どこへ戻るか
breakは、1つ外側のスコープへ戻る。
returnは、最も外側のスコープを抜ける
(レキシカル)スコープチェーンと、コールスタックの2大柱。
実装系・VM を作るには、この本がおすすめ
Rubyのしくみ、2014
Rubyの実装系、Ruby1.9のRuby仮想マシンの内部の仕組み
ここでいっているスコープは、 dynamic scope であることに注意ね。
内部イテレータでは、本来 break は例外と同じ方法でしか実装出来ない事を理解いただいて何よりです。
でも、ruby では、 Proc で break 呼び出したときの例外が LocalJumpError になっていて、どういう扱いにしたいかよく分からないんだよね。
for, while 内の break との整合も取れないし
まあ、次世代言語の話じゃないんで、そろそろ突っ込みは止めときます。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.032s