なかだです。

At Mon, 23 Jul 2001 01:00:03 +0900,
matz / ruby-lang.org (Yukihiro Matsumoto) wrote:
> すいません。これだけ大きなパッチだともうちょっと説明していた
> だかないと挙動を全部追いきれません。なんかあちこちいじってあ
> るし。

  すいません、あいかわらず分かりにくくて。だいたいいくつか書き
忘れてましたし。

(1) requireでファイルを探すときにアーキテクチャ名をパスの一部と
    して追加する。
    rb_find_file_noext()を拡張、拡張子のリストを外部から指定で
    きるようにする(名前も変更)。

(2) 拡張子が指定されていないときは各ディレクトリごとに拡張子を
    付加して検索する。
    拡張子はrb_f_require()から条件によって与える。

    ex.
      $(dir1)/$(arch)/foo.rb
      $(dir1)/$(arch)/foo.$(DLEXT)
      $(dir1)/$(arch)/foo.$(DLEXT2)
      $(dir1)/foo.rb
      $(dir1)/foo.$(DLEXT)
      $(dir1)/foo.$(DLEXT2)
      $(dir2)/$(arch)/foo.rb
      $(dir2)/$(arch)/foo.$(DLEXT)
      $(dir2)/$(arch)/foo.$(DLEXT2)
      $(dir2)/foo.rb
      $(dir2)/foo.$(DLEXT)
      $(dir2)/foo.$(DLEXT2)

(3) .soや.oが指定されたときも同様に各ディレクトリごとにDLEXT
    ->DLEXT2の順に検索する。
    .rbを除く以外は(2)と同様。

    ex.
      変更前
      $(dir1)/foo.$(DLEXT)
      $(dir2)/foo.$(DLEXT)
      $(dir1)/foo.$(DLEXT2)
      $(dir2)/foo.$(DLEXT2)

      変更後
      $(dir1)/foo.$(DLEXT)
      $(dir1)/foo.$(DLEXT2)
      $(dir2)/foo.$(DLEXT)
      $(dir2)/foo.$(DLEXT2)

(4) 拡張子が指定されているときはその名前自体をprovideする。
    rb_provide_feature()で拡張子を付け変えるのではなく、必要な
    場合はrb_f_require()で追加する。

(5) アーキテクチャ名はconfigureで指定する。
    とりあえず、追加したりできるように$LOAD_ARCHという変数に保
    持。一応rbconfig.rbにも設定。

(6) パス名がマルチバイトの一部としてdirectory separaterを含んで
    いても正しく処理する。
    ruby.cのマクロとCheng氏のパッチ[ruby-dev:13847]から流用。

(7) 不必要なdirectory separaterを追加しない。
    ほとんどの環境では問題にならないが、DOS/Windowsでは問題にな
    ることがあるので。

(8) パス名に\0は含めない。
    なんとなくヤバそうというか、Stringとしての操作とchar*として
    の操作に不整合が生じそうだったし、だいたいそんなものが含ま
    れてたらおかしいはずだから。

  まぁこんなとこで、内容は合点していただけたでしょうか。

# 善し悪しやら採否やらはおいといて。

-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦