大です

Re the message of ``[ruby-ext:01546] Re: require 'dir/...'?''...

matz / zetabits.com (Yukihiro Matsumoto):
> まつもと ゆきひろです
> 
> In message "[ruby-ext:01545] require 'dir/...'?"
>     on 01/02/28, "Dai.K." <MAP2303 / mapletown.net> writes:
> 
> |  256Racc本を読んでいまして、複数ファイルに分かれたライブラリの require は
> |どうするか、という話ありました。(140-141頁)
> 
> ここ読んで私ちょっと?だったんですが、これってたとえば
> 
>   gtk/button.rb とかがあって、gtk全体をrequireする
> 
> っていうようなシチュエーションなんですかね。

  おそらく。  


> |  僕もいつも迷いますので、標準的な方法を考えませんか?
> |
> |  1. require 'foo/foo'
> |  2. require 'foo/libfoo'
> |  3. require 'foo/all'
> |     (僕は require.rb て名前使ってますが;-)
> 
> とすると、私は
> 
>   4. require 'foo'
> 
> です。つまり、個々のファイルは foo/... にあり、require用に
> foo.rbもあるというイメージですね。「全部のファイルを一斉に
> require してはいけないようなライブラリ」でも個別に foo/...を
> ロードすればよいので問題なし。

  個別にロードすれば問題ないのは、たぶん foo/all.rb でもそうかと。
# だからその問題って具体的にどういうケースなのか分かんない。


> |  あと require を拡張して、require 'foo/' というようになっていたら自動的に
> |foo/all.rb を読むようにしてくれると嬉しい。all.rb は適当な変数で変更可。

  あっと、深く考えずに書きましたが、all.rb を変更可にしちゃまずいですね。その
部分はとりさげ。


> Python は __init__.py を使うようですが。なぜ foo.rb ではいけ
> ない?

  ちょっと見たところ、Perl も 4番の foo ですね。階層化されてるけれど。


  気持ち悪いところはふたつでしょうか。
   a. 関連ファイルは全部ひとつのディレクトリ以下に入ってほしい。
   b. ls して foo.rb と foo/ とふたつ見えるのは汚いし、余分な情報が増える。


a. 関連ファイルは全部ひとつのディレクトリ以下に入ってほしい。

  ライブラリ書いて公開する過程で一番気がかかるのは、名前の衝突です。
  大域スコープに置くのが foo.rb foo/ となるとふたつになるからその分苦痛が増え
ます。
  ルールで決めても、文法レベルでの強制はできないでしょうから、ある程度普及する
までは 3.方式を使うでしょう。


b. ls して foo.rb と foo/ とふたつ見えるのは汚いし、余分な情報が増える。
  美的感覚かなぁ。
  既に今の lib/ruby/version/ は気持ち悪いです。
  foo.rb foo/ にするなら、せめて階層化されないと発狂しそう…。


> Python は __init__.py を使うようですが。なぜ foo.rb ではいけ
> ない?

  僕にはむしろ、4番の方が 3番よりも良いという理由が思いつかないんですが。
  機能的には同じですよね。
  foo/all.rb の名前が予約されるのを嫌うのかな?