[ruby-dev:31878] Re: Import RubyGems to Ruby 1.9

From: "NAKAMURA, Hiroshi" <nakahiro@...>
Date: 2007-09-28 02:24:08 UTC
List: ruby-dev #31878
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Tadayoshi Funaba wrote:
> 今更って感じかもしれないけど、require 'rubygems' しただけで、結構いろ
> いろ読んじゃいますよね。
> 
> $ ruby -r rubygems -e 'p $"'
> ["rbconfig.rb", "rubygems/rubygems_version.rb", "thread.so", "thread.rb", "rbconfig/datadir.rb", "rubygems/user_interaction.rb", "socket.so", "timeout.rb", "net/protocol.rb", "uri/common.rb", "uri/generic.rb", "uri/ftp.rb", "uri/http.rb", "uri/https.rb", "uri/ldap.rb", "uri/mailto.rb", "uri.rb", "net/http.rb", "stringio.so", "yaml/error.rb", "syck.so", "yaml/ypath.rb", "yaml/basenode.rb", "yaml/syck.rb", "yaml/tag.rb", "yaml/stream.rb", "yaml/constants.rb", "rational.so", "rational.rb", "date/format.rb", "date.rb", "yaml/rubytypes.rb", "yaml/types.rb", "yaml.rb", "zlib.so", "rubygems/remote_fetcher.rb", "forwardable.rb", "digest.so", "digest.rb", "digest/sha2.rb", "parsedate.rb", "time.rb", "rubygems/source_index.rb", "rubygems/version.rb", "rubygems/specification.rb", "openssl.so", "openssl/bn.rb", "openssl/cipher.rb", "openssl/digest.rb", "openssl/buffering.rb", "fcntl.so", "openssl/ssl.rb", "openssl/x509.rb", "openssl.rb", "rubygems/gem_openssl.rb", "rubygems/security.r
b", "rubygems/custom_require.rb", "rubygems.rb"]

ruby-coreのほうでのRubyGemsチームとの議論によれば、以下が必要になるそう
です。

     YAML/Syck, WEBrick, the digest libraries, rbconfig, rdoc, thread,
     optparse, forwardable, time, open-uri, uri, net/http, fileutils,
     zlib, stringio, socket, tempfile, pathname, test/unit

で、YAML/SyckとWEBrickへの依存は外せるかも、という話になってます。

> gem コマンドがどんな風に構成されていても気にならないのですが、利用者の
> 環境に影響を与える部分は気になりますが、こういうもんなんでしょうか。

先にrequireされると「利用者の環境に影響を与える」ということはない、とい
う前提にたっているのだと思います。で、その前提は守られるべきだとも思いま
す。なので、「こういうもん」じゃないでしょうか。

YAMLやActiveSupportみたいに各クラスにメソッドを追加するのは、ライブラリ
としては勘弁してほしい。

> たとえば、この場合、date が既に読まれていますが、別の版の date を利用
> することは可能ですか。

rubygemsを読んだ後に$LOAD_PATHを変える、そして別のものを読みたい、という
ことですよね。それは(やろうとすればなんでもできるものの)、Rubyとしては
想定外、ということになると思います。'date'というfeatureはプロセスに対し
て1つだけ。

なので、-Iで適切な場所を$LOAD_PATHに加えて、rubygemsにも「別の版」のdate
を読ませないといけない。

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (Cygwin)

iQEVAwUBRvxlqR9L2jg5EEGlAQKHLAf+MFaY9bmPQofBtEaY7TtkZ9QW+6h8RkAE
p18qyDoGxPpFe39D5uDTihGPMmoaV35MVvrFNDjlJmgWFN9i6Vj3IYKdRP5DRu3D
hFg/DgTXV0CaeQ4T9qR5qm0/SLWI/QGS/S/wgTiuSoUApzWNg74a5zxtjHk8tUTA
Yx0ItywvdtakUxHh/fQYXHav04CPpiRwPJ9a5U7NBd2rfSv0E/FpDFpH5YzHH6F/
vEmYFrB2pYBHplbc0tjBk/Tbysb2iS2jkMTLtKo5rdiOdDW7Qjml0zSnZMTVZHD9
eQdX1xxnd0QT8tEmUHF/imOLjq+zqtV63CB0dipQmD5fmyWnoUESWw==
=e6Ps
-----END PGP SIGNATURE-----

In This Thread