杉浦です。

>>> In Message "[ruby-ext:02218] Re: VFS for ruby"
>>>            <87k77abdmt.fsf / serein.a02.aist.go.jp>,
>>> Tanaka Akira <akr / m17n.org>  said;
> > で、本題なのですが、このライブラリについて色々コメント(or patch)を
> > 頂けませんか。私が ruby やオブジェクト指向についてあんまり理解していない
> > 事もあり、色々と直した方が良い所があると思われます
> > # 特に組み込み File クラスを乗っ取る辺りのコードは、もうちょっと良い
> > # 方法が無いものかと。

> コードではなく、モチベーションに対するコメントになりますが

ありがとうございます。

> クラスメソッドはあまり気にしないほうがいいのではないかと思っています。

> VFS というのは、要するにファイルシステムみたいなものを polymorphic に
> 扱う機構なので、ファイルシステムへの API が OOP としてまともであれば自
> 然と使えるはずのものです。

なるほど。

現状で殆ど全てのクラスメソッドは File.foo(fname) -> File.new(fname).foo
のような変換をかけるだけの wrapper にしてあります。これはこの方向で良さそう
ですね。

> それが Ruby でそうなっていないのは、ファイルシステムへの API が OOP と
> してまともでないからです。具体的には、文字列をパス名に使っているのが問
> 題です。パス名に独自のクラスを作って、パス名のインスタンスメソッドを通
> してアクセスするようになっていれば、URI にも同じ名前のメソッドを用意す
> るだけで VFS みたいなことが実現できます。
<Snip...>

現時点でで参考になるような実装はありますでしょうか?
# Java?

現状、これに近い物にはなっていると思うのですが、田中さんのイメージに
あっているかどうかいまいち自信がありません。

File.new("url") で各スキームハンドラ固有のインスタンスを返します。
これは path (と言うより url) だけを必ず覚えていて、インスタンス
メソッドでその URL から導かれる実際のファイル(じゃないかもしれませんが
とにかくデータの実体)に対して操作をすると言うスタイルです。

ただ、パス名(URL)をそのまま String で持っているので、やはりここは直した
方が良さそうですね。

> だいたい、他のクラスに比べて
> File や Dir はクラスメソッドがすごく多くて、OOP としての設計の失敗を表
> しています。あれは OOP ではありません。
> (と、LL Saturday でまつもとさんに主張したなぁ)

> というわけでクラスメソッドで思い悩むよりは「操作する為には基本的にイン
> スタンスメソッドを呼ぶ」というのを普及させるのが適切だと思います。

一応この方向ではあるつもりです。
ただ、現状との互換性は(少なくとも暫く)維持したいと思っています。

> なので、インスタンスメソッドを使いやすくするのが肝要で、たとえば URI
> は生成するのが面倒だというなら URI リテラルを導入する(させる)とか、そ
> ういう方向がよろしいんではないかと思います。

> というか、私はそういうのがいいと思っているから、open-uri.rb や
> pathname.rb を作っていたりするわけですが。

> あと、VFS という名前のクラスやモジュールがもし必要だとしたら、文字列か
> らパス名や URI に変換する所くらいかなぁ、と思っています。

すみません、イメージがいまいち掴めていません。
この場合、パス名や URI のクラスが実際の操作を受け持つと言うことでしょうか?

-- 
Tatsuki Sugiura   mailto:sugi / nemui.org