[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[b-free: 1430] Re: 例外処理と RTTI の OSでのサポート (Re: オブジェクト指向のOSへの適用)
References: <3528BFA2.2DA12FDA@bridgew.edu> <19980407163521N.night@soft.hitachi.co.jp>
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
Ryuichi Naitoh wrote:
>
> 隆一です。
>
> 結局は便利さと一般性のトレードオフだと思うんですが。。。
> 特定の言語にしかない機能を OS がサポートするのも
> 無駄ではないでしょうか?
うーむ。
特定の言語にしかない機能ですか。
言語によると思いますが。
それに、system で使う機能を流用できれば、それに越したことはないと思いま
す。
> えーと、だからOOという一般的なオブジェクト指向を表すような言葉と例外
> 処理とは結びつかないと思います。
そうですねぇ。
まあ、message 伝達と見れないこともないですが。
> 例外処理と結びつけるならば、C++ とでしょう。鈴木さんのOOについての議
> 論は、ちょっと C++ という特定の言語に偏りすぎているような気がします
> (RTTI についても同様)。
でも、現在の商業用の OOP が C++ 中心な訳ですから、良いんじゃないですか?
前に書きましたが、OOPといっても、動的型検査をするもの、静的型検査をす
るもの、多重継承を許すもの、許さないものと、大分色合いが違います。だか
ら、C++ と Smalltalk を同列に議論して、OOP の議論を一般化する必要もない
気がします。
> # Java も C++ と同じように例外処理はあるけど、setjmp/longjmp はないと
> # 思う。。。
setjmp/longjmp は、いわゆる一つの「汚い関数」ですから。
Java のように、security が大事な言語では、真っ先に言語からはずされるでし
ょうね。
> C++ の場合だと、longjmp で大域脱出を行ってしまうと、オブジェクトの
> destructor が実行できないためでは? longjmp はプログラマの思うまま、
> いつでもどこでも好きなところに飛ぶことができ、コンパイラで制御できませ
> ん。
destructor が呼ばれないからと言うのは、正解です。
その他に、alloca() なども、同様の(汚い)制限があります。
Cは何せ「構造化 assembler」ですから。(笑)
多少の risk は承知で、高速化のために、いろんな事をやりますね。
逆に、Cで program するときは、生成される assembler code をある程度想定
して書くものだと思います。
# これは、僕の program style。>「想定して書く」
# 人により、異論在るでしょうねぇ。
ちなみに、Cにあまり慣れていない人(はここにはいない気もするけど)のため
に補足すると、longjmp できるのは呼び出し側の関数でしかないことを付け加え
ておきます。関数の call tree を一気にとばして逆戻りはできるけど、関数を
超えた goto の様な使い方は出来ません。
よく使う例として、関数の再帰の末端で error を発見した場合に、一つ一つ、
呼び出し側に error を通知しながら main() へ戻る代わりに、一気にその末端
から main() へ longjmp できます。それによって、再帰関数では error の伝播
に関する処理を書く必要が無くなり、program はより分かり易く、小さく、高速
になると言う仕掛けです。
実際に longjmp と setjmp のやっていることは、(library source をみれば一
目瞭然ですが)registers の値の保存と回復に他なりません。
> C++ は、プログラムの裏側でコンパイラがごそごそやっている部分がありま
> すから(constructor/destructor が暗黙で呼ばれたりする)、setjmp/longjmp
> の処理と合わない部分があるということでしょう。
ごそごそやっているのは、むしろ、例外処理の方ですね。
生成子・破壊子は、呼び出される順序も何も明確に決まっていますから。
> しかし、RTTI の機能にしても例外処理と同じく、C++ の特有の機能であって、
> 一般的なオブジェクト指向の機能とは言えないでしょう(それ以前に、OS に簡
> 単に組み込める方法があるんだろうか?)
これは、OSをOOで作るという話でないと、組み込みにくいでしょうね。
要は、「動的型検査」の機能ですから、OSが型を扱うかどうかという話になり
ます。
>
> p----------------------------------------------------------------------q
> | FROM R.Night |
> | E-mail: |
> | rnaitoh@st.rim.or.jp |
> | Key fingerprint = 89 EB 77 95 40 C0 3C CC 37 A1 A7 FA 1C 66 FF D0 |
> b----------------------------------------------------------------------d
-Aki.