langsmith:136
From: Yukihiro Matsumoto <matz ruby-lang.org>
Date: Thu, 7 Oct 2004 00:41:32 +0900
Subject: [langsmith:136] Re: 例外処理:Eiffel とRuby
まつもと ゆきひろです In message "Re: [langsmith:135] 例外処理:Eiffel とRuby" on Thu, 7 Oct 2004 00:06:24 +0900, Fumisky Wells <ttn3w7u2fs mx6.ttcn.ne.jp> writes: |Eiffel の 例外処理の仕様は DBC(Design by Contract) のコンセプトを |反映させた結果かとは思うのですが、Ruby では、同様に rescue 句を |用いながらも、敢えて Eiffel とは異なるようにしたのはなぜでしょうか? | |設計方針とか背景となる考え方とかもしお聞かせいただければうれしいのですが。 RubyとEiffelの類似点は、 * キーワードを拝借(具体的にはrescue) * endを使った櫛形文法 だけで、思想的には類似点はありません。 で、Eiffelについては(OOSCは第1版しか呼んでないし、Eiffel the Languageは7,8年前に一度読んだきりなので)あまり詳しくないので すが、例外は確か「契約(アサーション)を満たしていない」という 一種類だけだったと記憶しています。そこでrescueでは、 * 契約を満たすように操作して再実行 * 例外の伝搬 しか選択できないようになっていたように思います(あ、適当な値 を返すこともできたような。手元に本がないな)。 Rubyの例外は、OSのエラーから、型の不整合から、プロセスの脱出 (exit)にいたるまでほぼあらゆる大域脱出をカバーしていますから、 Eiffelのようなある意味おおざっぱな処理では不都合があります。 エディタを作っていて読み込むファイル名が間違っていただけで、 例外で全体が異常終了してしまうようでは困りますから。 このやり方はEiffel以外の言語では一般的ではないかと思います。 例外の元祖がどこなのかは確認できていませんが、例外のある言語 の中ではかなり古そうなLispやCLUでも似たようなものです。 あ、Rubyではrescue節の中でretryを実行するとbeginからやり直し ますが、この辺にEiffelの影響がほのかにあるような気がしないで もないです。 まつもと ゆきひろ /:|) -- 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 ]