なかだです。

At Wed, 1 Aug 2007 13:18:30 +0900,
NAKAMURA, Hiroshi wrote in [ruby-dev:31320]:
> 1. ruby/1.9.1のRubyGemsは、プラットフォーム依存のgemを扱うべきか?
> 
>   - ruby/1.9.1のRubyGemsに、バイナリgemの取り扱いは必要か?
>     誰からも反対がなければ、この件はRubyGemsチームに任せる。
>     (注: プラットフォーム依存のgemは現行未対応で、RubyGemsチームとして
>           は、今月中に対応予定だそうな)

gems自体は拡張ライブラリは含んでないんですよね。

> 2. RubyGemsは、ruby/1.9.1に、requireをフックする機能の追加を
>    必要とするか? 要件は?
> 
>   - RubyGemsはパッケージングシステムの1つとして標準添付するのみ。なの
>     で、とりあえずコマンドラインオプションの-rによるrequireをフックする
>     機能だけ追加すればよい(注: 現状のrubyではフックできない)

「パッケージングシステムの1つ」という位置づけであれば、「他のパッ
ケージングシステム」も考えられるわけで、グローバルのrequireを銘々
が直接置き換えるというのは望ましくないと思います。

>   - 中田さん、以前にこの機能について途中まで考えた、と聞いたんだけど、
>     なんか共有できるネタはない?

まず、今のrequireのやってることを、ロード済みのライブラリのチェッ
クとか排他処理とかラッパーとか$SAFEの処理とかを除いて簡単にいう
と、概ねこんなところ。

  def require_internal(feature)
    exts = loadable_exts(feature)
    found = nil
    $LOAD_PATH.find {|path| found = find_file(path, feature, exts)} or
      raise LoadError, "no such file to load -- %s", feature
    load_file(found)
  end

この中で、find_fileとload_fileで示した部分を、それぞれ以下のよう
に(Stringじゃなかったら?)メソッドを呼ぶ形にしてはどうか、という
のが一案。

  path.find_file(feature, exts)
  found.load_file()

登録しておいたブロックが呼ばれる、というのも最初に考えてたんで
すが、これだと不要な場合にも呼ばれるという点がいまひとつ。

>   - I was hoping we could use rb_funcall to invoke a Kernel#require in
>     require_libraries() rather than calling the C rb_require directly.
>     Is this possible? (注: 中田さんよろしく)

上で書いた理由から、できればこれは避けたいというのが個人的希望。

> 3. 標準インストーラは、BINDIRに、RubyGems関連のどんなコマンドを
>    インストールするべきか? 従来のコマンドにはこれだけある;

>   - gemコマンドだけインストールする。
>     (注: 他のコマンドは、RubyGemsチームによってgemコマンドに集約予定)

cvsとかsvnのようにサブコマンドにするということですよね。その場
合はシェル用のcompletionの設定も一緒にインストールしてほしいで
すが。

> 4. $LOAD_PATHの順序はどうなるべきか?

>   4-2. rubygemsをrequireした後は:
>     [-I, ENV_RUBYLIB, GEMs, SITELIBDIR, RUBYLIBDIR, .]
>    - これについてはRubyGemsチームに任せるべき。だってopt-inだし。

requireの枠組だけ作っておくだけにして、そのへんのポリシーは任せ
ていいんじゃないでしょうか。

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