From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) Date: 1998-03-17T17:51:58+09:00 Subject: [ruby-dev:1843] Re: trap and throw problem けいじゅ@日本ラショナルソフトウェアです. In [ruby-dev :01840 ] the message: "[ruby-dev:1840] Re: trap and throw problem ", on Mar/17 17:25(JST) Yukihiro Matsumoto writes: >まつもと ゆきひろです >|そうなんだ... 知らなかった... というかあたりまえかあ... >重要ですから知って下さいね. 失礼しました(__;;; >問題を整理しましょう. > > シグナルハンドラを設定した時,getsの入力待ちで割込みが入っ > た.そのハンドラの中で > > IOを行う -> 動作は保証されない これは理解しました. > raise/throw -> 現在バッファに読み込まれた分は捨てられる > 可能性あり どっちか分からないというのも困るので, いっそのこと捨ててしまって もらう方がありがたいと思うんですが... # そうすると残っている問題も解決するかも... > になります. >これは作者は「仕様である」と考えています. >|いや. すでに, rbc側で対応しているんで, いいんですけども... ruby側でし >|てくれれば, もっと簡単になるかなと思っているだけです. >| >やはりハンドラでいろいろしようというのが間違いだと思いますが…. 色々はしていませんよ. rbcの中で: 1. gets()の時はこれまで入力したのをキャンセルして, トップレベルに戻る. 2. eval中はそのevalをやめて, トップレベルに戻る. (2)はどうしてもthrow or raiseしないとだめでしょ? それに, eval中に gets()なんかされていると, gets()中にthrowすることになるので, まだ, 完 全な解決になっていないんですよね... >|# あと, readlineが... > 前田サーン >readlineでナニをしろという意味でしょう? [ruby-dev:1796]で以下のように書きましたよね: >ててどうこう,と書きましたが,そういえばrubyのシグナルの実装 >は > 基本はフラグを立てるがシステムコールやライブラリルー > チンの中では割込みがかかるように,直接呼び出す >のでした.これをしないと,たとえばgetsの中で^Cを押しても >enterキーを押すまでハンドラが動かなかったりして非常に使いに >くいのでした.どうしたもんだか. 最後と同じ現象がreadlineでも起こっているんです. __ ................................石塚 圭樹@日本ラショナルソフトェア... ----------------------------------->> e-mail: keiju@rational.com <<---