langsmith:147
From: SASADA Koichi <ko1 atdot.net>
Date: Fri, 8 Oct 2004 22:21:18 +0900
Subject: [langsmith:147] Re: 例外処理:Eiffel とRuby
Fumisky Wells <ttn3w7u2fs mx6.ttcn.ne.jp> wrote :
[ [langsmith:138] Re: 例外処理:Eiffel とRuby ]
at Thu, 7 Oct 2004 11:29:28 +0900
ささだです。
> さて、例外処理の実装として、
例外処理のデザインですよね。
さて、私は例外処理の実装について興味があるんですが、
1) 例外ハンドラテーブルを用意して、スタック巻き戻しの際に逐
次参照していく(JavaVM など)
2) 例外ハンドラが必要な場合はそのつどどこかに「なんらかの値」
を積み、例外発生時、その積んだ「なんらかの値」をポップして
その「なんらかの値」に応じた処理を行う(現在の ruby など)
が考えられると思います。(他にもあれば教えてください)
そもそも Eiffle のモデルではスタック巻き戻しをしないよう
な話だと思うので(OOSCを斜め読みしただけだからあんまり知り
ません)まぁ除外するとして(goto だけで実装できる・・・のか
な?)、ほかの例外処理はこれに類する機構があるのではないか
と考えます。shiro さんの投稿を読んで推測すると、srfi-18 で
は、これは必要ないかな。想像するに、srfi-34 では、
continuation stack を用意しておいて、例外があれば、そいつを
実行してみる、とかでしょうか。
Scheme の話を元に考えてみると、1, 2 も continuation stack
を用意するが、その積む場所を stack frame に用意して、1 はそ
の情報をコンパイル時に決定し、2 は実行時に生成するもの、と
考えられるという感じでしょうか。
1 は例外以外の処理のコストを軽くする(無くす)、2 は例外
発生時のコストを軽くする(1hop で例外情報にアクセスできる)
という利点がある、という感じでしょうか。あと、もしかしたら
2 じゃないと実装できない言語もあるのかもしれないなぁ、とうっ
すら想像しますが、とりあえず思いつきません。
なんかくどくど書いてますが、実装について、効率的な手法と
か、こんな苦労があった〜とかいう実装話とかあったら教えてく
ださい(結局それかよ)。
ちなみに、Ruby では、
v = 1 +
begin
raise
rescue
2
end
みたいな式が書けるため、単純に例外発生時に移る program pointer
だけでは足りません(単純なスタックマシンの場合)。復帰する
ときの stack pointer の情報も必要になります。本当にコンパ
イル時にそこまで復帰できるのか不明。できると思うんですけど
ね。nレベル(n>=2)スタックキャッシングとかと併用すると、本当
にできるのか、ちょっと心配。手法 2 だと、そんな心配要らなく
て、何も考えずに達成できるんですけどね。
--
// SASADA Koichi at atdot dot net
//
// また、趣味の偏った話を書いてしまった
--
ML: langsmith quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml
135 2004-10-07 00:06 [ttn3w7u2fs mx6.ttcn.] 例外処理:Eiffel とRuby 136 2004-10-07 00:41 ┗[matz ruby-lang.org ] 138 2004-10-07 11:29 ┗[ttn3w7u2fs mx6.ttcn.] 139 2004-10-07 12:35 ┣[matz ruby-lang.org ] 144 2004-10-07 21:49 ┃┗[randy mvd.biglobe.ne] 145 2004-10-07 22:04 ┃ ┗[matz ruby-lang.org ] 146 2004-10-08 21:59 ┃ ┗[randy mvd.biglobe.ne] 150 2004-10-11 00:16 ┃ ┗[ttn3w7u2fs mx6.ttcn.] 151 2004-10-11 00:52 ┃ ┗[matz ruby-lang.org ] 154 2004-10-13 00:00 ┃ ┗[ttn3w7u2fs mx6.ttcn.] 155 2004-10-13 01:30 ┃ ┗[matz ruby-lang.org ] 140 2004-10-07 14:23 ┣[takehiko eel.rdc.tos] 141 2004-10-07 14:33 ┃┗[matz ruby-lang.org ] 143 2004-10-07 16:50 ┃ ┗[takehiko eel.rdc.tos] 142 2004-10-07 15:20 ┣[shiro lava.net ] 156 2004-10-14 12:32 ┃┗[maeda-langsmith atus] -> 147 2004-10-08 22:21 ┗[ko1 atdot.net ] 148 2004-10-09 06:42 ┗[shiro lava.net ]