«前の日記(2003年05月02日) 最新 次の日記(2003年05月04日)» 編集

Matzにっき

<< 2003/05/ 1 1. [本] 『たのしいRuby』増刷決定
2. ディスクロージャ
2 1. 小切手換金
2. [XP] ペアプログラミング
3. [Ruby]1.8 ToDo
3 1. [Ruby]アジャイルな言語デザイン
4 1. [教会] 命名
5 1. [Ruby]feature freeze
2. [Ruby]call+yield vs Proc+Block
3. [Ruby]Object#methods(false)
4. [家族] 子供の日
6 1. [日記] みつかった
2. Matzさん
3. [Ruby]ProcとBlock
4. 模様替え
5. 昨日の疲れ
7 1. [本] 『達人プログラマー』
2. [XML] 純粋XML批判
3. [Ruby]下手な考え休むに似たり
8 1. [格言]Quote of the Day
2. [家族]風邪再来
3. [プレゼン]IPSJ-HI 103
4. [YAML]XMLとYAML
9 1. [原稿]Linux Magazine
2. [本]Amazonアソシエート
3. [家族][TV] 録画失敗
10 1. [YAML]YAMLの弱点
2. [家族]草とり
3. [blog]ブログとWeb日記
4. [本]絵本読み聞かせ
11 1. [教会]米子の教会
2. [家族]母の日
3. [車]マニュアル車
12 1. [YAML]XMLとYAMLの比較
2. [XP]XP実況
13 1. [原稿] 原稿提出
2. [Ruby]stdin, stdout, stderr, $defout, $deferr
3. [Ruby]メソッド結合
4. [Ruby]メソッドフック
5. [Ruby]正規表現の$と\Z
14 1. [blog]blogの定義
2. [Ruby]メソッドフック(その2)
3. ツッコミ
4. プロレス
15 1. [Ruby]$stdin, etc.
2. [Ruby]feature freeze
3. [Ruby]リファレンス本
4. [tDiary]calendar3
5. [映画]『サイン』
16 1. [Ruby]feature freeze
2. 東京へ移動
3. [プレゼン]IPSJ-HI 103
17 1. [Ruby]直したバグ
2. [家族]帰郷
18 1. [教会]岡山
19 1. [Ruby] 直したバグ
2. [Ruby] 残っている件
3. [tDiary]リンク元
4. インターネット物理モデル
20 1. [Ruby]直したバグ
2. [Ruby]変更した仕様
3. [Ruby]1.8仕様への移行パス
4. クマムシ
5. [教会]インスティチュート
21 1. しゃべリッチ
22 1. [OSS]日本発オープンソース
2. しゃべリッチ(その2)
3. [OSS]FUD
23 1. [OSS]ハッカー甲子園
24 1. [OSS]スラッシュドット効果
2. 結婚披露宴
25 1. [教会]出雲訪問
26 1. [本]Amazonおすすめの本
2. [Ruby]Block/Proc分離
3. [本]Amazonのおすすめ(その2)
27 1. メイド喫茶
2. [プレゼン]IPSJ-HI103資料
3. [プレゼン]脳力
28 1. [OSS]42件
2. [OSS]IPAヒアリング
3. [OSS]ソフトウェアの自由
29 1. [映画]『アンブレイカブル』
2. [OSS]オープンソースの定義と思想
3. [OSS]42件の収束
30 1. [プレゼン]日経ソフトウエア5周年セミナー
2. [OSS]オープンソースとフリーソフトウェア
31 1. 台風
2. [教会]神殿
3. 欠航
4. 帰宅
5. 新幹線の中で見たイヤなもの
>>

2003年05月03日 憲法記念日 [長年日記]

_ [Ruby]アジャイルな言語デザイン

Module#instance_methodsなどは引数が省略された場合、 あるいは引数として偽を指定した場合にはそのクラスで定義されているメソッドのリストを、 真を指定した場合にはスーパークラスまでさかのぼってメソッドのリストを返します。

しかし、Rubyのような言語にとって継承は単なる実装の共有が目的ですから、 興味があるのは「そのクラスのインスタンスが持っているメソッドのリスト」のはずです。 ということは、現在のデフォルトは間違っていることになります。 またやっちゃった。

そこでさっそく修正しました。

ところが直後に、この修正によってirbが動かなくなったとDave Thomasから報告がありました。 具体的にはdelegate.rbがこの変更に対応していなかったせいです。 この問題そのものはdelegate.rbを修正することで簡単に直せたのですが、 この一件で大きな矛盾が明らかになったような気がします。

つまり、言語またはライブラリのデザインに間違い(使いにくさ、一貫性のなさ)があったとき、 長期的な観点からは修正した方が良いに決まっています。 間違い、一貫性のなさは言語の良さを損ねます。 しかし、その修正の結果、非互換が生まれれば、少なくとも短期的には多くの問題が生じます。 ユーザが多ければ多いほどその問題は深刻になります。

かつて、Rubyのユーザがわずかであった頃にはこれはあまり問題ではありませんでした。 しかし、いやまRubyユーザは世界中に数えきれないほどいます。 ささいな変更でも影響がばかにできなくなっています。

短期的な視点に立って欠点を放置するか、長期的な視点に立って欠点を修正するか。

アジャイルな立場からいえば、変化を恐れず対応するべきなのでしょうが、言語の場合には

  • インタフェースが大規模かつ複雑
  • その直接の利用者がプログラム
  • ユーザがとてつもなく多い

という点で、急激に変化してはいけない傾向があります。 アジャイルの指導者の一人であるDave Thomasに相談しましたが、 彼にも良いアイディアはないようです。

結局今回の問題は、

  • 2004年1月まで変更は先送り
  • その間はwarningを出す

という方向で結論を出しましたが、変化に強い言語デザインとはどのようなものかということについては 結論が出ないままなのです。


«前の日記(2003年05月02日) 最新 次の日記(2003年05月04日)» 編集