[前][次][番号順一覧][スレッド一覧][生データ]

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      ]