From: Shin-ichiro Hara Date: 1997-03-30T18:36:07+09:00 Subject: [ruby-list:2504] Re: WWW library 原です。 > あすなろ後藤です. > 僕は python のライブラリをちょっと使っただけですが, > 仕様は悪くないと思います. そうですね。非常にすっきりしていますね。Python の 「Internet and WWW Services」をのぞくと cgi --- Common Gateway Interface, used to interpret forms in server-side scripts. urllib --- Open an arbitrary object given by URL (requires sockets). httplib --- HTTP protocol client (requires sockets). ftplib --- FTP protocol client (requires sockets). gopherlib --- Gopher protocol client (requires sockets). nntplib --- NNTP protocol client (requires sockets). urlparse --- Parse a URL string into a tuple (addressing scheme identifier, network location, path, parameters, query string, fragment identifier). sgmllib --- Only as much of an SGML parser as needed to parse HTML. htmllib --- A (slow) parser for HTML documents. formatter --- Generic output formatter and device interface. rfc822 --- Parse RFC-822 style mail headers. mimetools --- Tools for parsing MIME style message bodies. というのが並んでいます。他に lib の WWW 関連は、 SocketServer BaseHTTPServer SimpleHTTPServer CGIHTTPServer というところですか。納得のいくカテゴリの分け方です。(それにく らべるとJava の java.net.URL* はあまり参考にならない。) 大体5千行ぐらいですかねえ。 > 僕が想像している基本方針としては URL をネットワークな > オブジェクトにしたいなら, まず基本的なスキームを扱う仕様を > 決めてそれで Mixin するのがいいのではないかと思います. モジュールにするということですか?URL クラス自体は、ホスト名、 ポートなどのリソースや、ソケットハンドル、接続状況の状態など を保持しているはずですから、モジュールでなくクラスにすべきで すよね。それとも、Socket を必要としない部分をモジュールにす るということかな。 > でもポリモルフィズムもある程度考慮した方がいいような気も > しますけどどうでしょうか? ポリモルフィズムを考慮するとはどういう意味でしょうか? > ただし実際にはこれ以外に time out とか割り込みで中断と > いったこともハンドルできるように例外のためのメソッドも > 欲しいですね. 同感です。しかしここが私がライブラリを書こうとしてとても難 しいと感じた所です。つまり、/usr/local/lib/ruby に入れるラ イブラリとしては、 (1)なるべくシンプルであること (2)ユーザーによる拡張が容易なこと (3)実用的なこと が必要だと思いますが、(3)を立てて、最初から timeout とか 割り込みに対する処理を書き込んだり、(2)を立てて、インタ ーフェースをたくさん作り込んだりすると、(1)が失われてし まうんですよね。たとえば、私が作りかけている hcp.rb(ホーム ページの再帰的取得プログラム)では、イメージをダウンロード 中に、ftp の hash の様に # マークを出力します。この手の事は ブラウザを作るときも必要ですが、その様な機能を後で簡単に付 け加えたりできるライブラリであって欲しいと思います。しかし、 そのためにベーシックな url-lib.rb が不自然な形になって欲し くはないわけです。この辺は ruby の達人にコツを教えていただ きたいところです。 このさい(1)、(2)を捨てて、徹底的に作り込んだ、メッソ ッドのデパートにしてしまうという手もあるかな?:-) でも、巨 大なライブラリだと、そのライブラリを使いこなすより自分で書 いちゃった方が早いなんて思われるのが関の山で。 ライブラリの規模、その上でどんなアプリケーションを作りたい かといのもある程度決め手おいた方がいいですかね。