永井@知能.九工大です.

話の速度に付いていけていないので,
どれにリプライすればいいのかよくわからなくなってますが,
とりあえず,こちらに繋ぎます.

From: matz / zetabits.com (Yukihiro Matsumoto)
Subject: [ruby-ext:01594] Re: require 'dir/...'?
Date: Fri, 02 Mar 2001 09:22:28 +0900
Message-ID: <983492548.879354.25825.nullmailer / ev.netlab.zetabits.com>
matz> で、私が問題視してるのはここです。「全部requireする」っての
matz> は、上で挙げた反対理由はなくなるのかもしれませんが、新たに導
matz> 入する問題が多すぎです。排他できないとか、制御できないとか。
matz> 
matz> もちろん、順序に依存しないように書くとか、標準的にロードしな
matz> いものはサブディレクトリに入れるとかの方法で対応「できる」の
matz> ですが、それは逆に言うと、言語レベルで暗黙にその対応を強要す
matz> ることでもあります。
matz> 
matz> 私の観点からは、得られるもの(all.rb相当の更新が不要)に対して、
matz> 失うものが多すぎるように思います。

一度作って,「ハイ,それまで」ってライブラリならいいのかもしれませんが,
機能拡張なりのメンテを行っていくことを考えると,
「全部requireする」ってのが許されるのは困りものだと思います.

今,仮に,ライブラリ作成者が,「全部requireする」を想定せずに
初期バージョンを作ったとします.
これがたまたま「全部requireする」でも問題がなかったとすると,
ライブラリの利用者が「全部requireする」のを禁止できません.

「全部requireする」が可能なように初期バージョンを作ったとしても,
似た問題が生じます.
バージョンアップ時の何らかの事情で,
「全部requireする」を許さないようにしたくなったとすると,
機能的には完全互換であったとしても,非互換の問題が出てしまいます.

ライブラリに,選択的にロード可能な機能拡張を持たせるような場合も
同じディレクトリにはファイルを置けなくなり,面倒なことになります.
「サブディレクトリまでは見ない」とするとしても,
例えばファイル一つで済むちょっとした拡張であったとしても,
その機能拡張ごとにサブディレクトリを作る必要が生じます.

...という具合に,つらつら考えていると
面倒な事態ばかりが思いつきます.(^_^;

私の場合,require 'foo' に対して

  1. foo.rb
  2. foo.so
  3. foo/__init__.rb (ファイル名はともかく)が存在するなら,そのファイル
  4. 例外発生

という検索順とするなら,まぁ,可かなという感じです.
ライブラリのトップディレクトリのエントリ数の節約以外には
利点は感じませんが...

上記 3 と 4 との間で,foo/__all__.rb が存在するなら,
そのファイルを require した後に,
同ディレクトリのすべてを require するという折衷案的方針も
考えられなくはないですが,何か気持ち悪いですよね.(^_^)
-- 
                                         永井 秀利 (九工大 知能情報)
                                             nagai / ai.kyutech.ac.jp