まつもと ゆきひろです

In message "[ruby-dev:3267] [REQ] Thread.abort_on_exception and abort and exit"
    on 98/07/13, 石塚圭樹 <keiju / rational.com> writes:

|けいじゅ@日本ラショナルソフトウェアです.

|>というものですが.abort_on_exceptionは名前からしてabortと同
|>じ動作をすべきのように思えます.が,例外をmain_threadに送り
|>つけるという仕様でも妥協できます.
|>
|>どっちがよいんでしょうねえ.
|
|やはり, デバッガとの兼ねあわせを考えると, 後者の方がありがたいですね.

まあ,そう実装するのはそんなに大変じゃないんで構わないんです
けど,これを決める前にabortの仕様を決めた方が良いように思い
ますね.

|>でも,例外としてキャッチできるならraiseでよいじゃないかって
|>気もしますよね.abortならちゃんとabortしなきゃ.
|
|でも, exitも例外としてキャッチできますよね. だから, abortも例外でよい
|ような気がします.

その場合exitとabortの違いはなんになるんですかね?
その辺を明確化したいですねえ.

|ところで, exitの動作ですけど...

|これだと例外をキャッチできないんですね. でも, 他のスレッド特にメインス
|レッドとしてはこのままexitされても嬉しくないですよね?

おっしゃることはわかります.しかし,

|3. 他のスレッド全てにもSystemExit例外を起こし, 全スレッドが全て例外を
|   キャッチしない時のみ実際にexitする.

現在の実装では実際に実行を中断しないとキャッチされるかどうか
分かりませんから,「全て例外をキャッチしない」場合を判定する
ために全部のスレッドに割込みがかかっちゃいます.これは多分望
ましくないと思います.

という理由で3は望ましくないと思います.残るは1,2の

|1. exitを実行したスレッドがrescueしなかった時は, メインスレッドに
|   SystemExitを再送する.
|
|2. exitはSystemExitをメインスレッドに投げる.

メインスレッドがなにを実行しているか分からない状態でいきなり
送られても困るんじゃないでしょうか.しかも,Interruptのよう
な割込み由来のものではなく,exitはプログラムが自発的に自分に
対して呼ぶものですから.

3と違って全くダメというわけではないですし,現在の仕様では他
のthreadでexitが呼ばれるとハンドルできないという問題はあるの
で(私自身は問題ではないと思っているのですが),もう少し議論が
進めば採用できると思いますが.

                                まつもと ゆきひろ /:|)