From: Evan Phoenix Date: 2007-08-04T04:31:27+09:00 Subject: Re: Import gem to Ruby 1.9 --Apple-Mail-1--443621262 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; delsp=yes; format=flowed On Aug 3, 2007, at 12:13 PM, Jonas Pfenniger wrote: > 2007/7/26, NAKAMURA, Hiroshi : > -----BEGIN PGP SIGNED MESSAGE----- > This mail is for the topic > '6. What libraries does RubyGems depend on?' > > NAKAMURA, Hiroshi wrote: > > 6. What libraries does RubyGems depend on? > > YAML/Syck, WEBrick, the digest libraries, rbconfig, rdoc, > thread, > > optparse, forwardable, time, openssl, open-uri, uri, net/http, > > fileutils, zlib, stringio, socket, tempfile, pathname > + test/unit > > Here is a small script to check the number of loaded classes before > and after rubygems. The second number only includes top level classes. > > Last time I checked, rubygems used more than one top level class to > host it's code. > > ----- > def count_classes > x=0; t=0 > ObjectSpace.each_object(Class) do |c| > x+=1 > t+=1 if c.name !~ /::/ > end > [x, t] > end > > puts "Without rubygems : #{count_classes.inspect}" > require 'rubygems' > puts "With rubygems : #{count_classes.inspect}" > > ----- > > Without rubygems : [183, 59] > With rubygems : [469, 76] To this effect, what about structuring rubygems so that not all of it's classes are loaded all the time. There are 2 use scenarios for "require 'rubygems'". One is typically one, to be able to use the code contained in gems, the other is for the 'gem' command to be able to do all it's manipulation and fetching of gems. Currently, "require 'rubygems'" is built for the 2nd scenario, but thats probably incorrect, since that scenario is used vastly less than scenario one. If "require 'rubygems'" only included enough code be able to properly alter the load path to allow a gem's code to be used, it would make almost no impact on performance, where as now, it includes a huge amount of unused code into every runtime. Scenario 2 could easily covered by adding "require 'rubygems/dev'" which would include the current bevy of classes and code. After all, what generic rails app uses the TarReader class that rubygems imports? For that that matter, what part of the rubygems runtime (scenario 1) uses TarReader? - Evan Phoenix > > -- > Cheers, > zimbatm --Apple-Mail-1--443621262 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=ISO-8859-1
On Aug 3, 2007, at = 12:13 PM, Jonas Pfenniger wrote:

2007/7/26, = NAKAMURA, Hiroshi <nakahiro@sarion.co.jp>:
<= SPAN class=3D"gmail_quote">
-----BEGIN PGP SIGNED MESSAGE-----
This = mail is for the topic
'6. What libraries does RubyGems depend = on?'

NAKAMURA, Hiroshi wrote:
> 6. What libraries does = RubyGems depend on?
>=A0=A0=A0=A0=A0=A0YAML/Syck, WEBrick, the = digest libraries, rbconfig, rdoc, thread,
>=A0=A0=A0=A0=A0=A0optpar= se, forwardable, time, openssl, open-uri, uri, = net/http,
>=A0=A0=A0=A0=A0=A0fileutils, zlib, stringio, socket, = tempfile, pathname
=A0=A0=A0=A0=A0=A0 + = test/unit

Here is a small script to check the = number of loaded classes before and after rubygems. The second number = only includes top level classes.

Last time I checked, rubygems = used more than one top level class to host it's = code.

-----
def count_classes
=A0=A0=A0 x=3D0; t=3D0
=A0=A0= =A0 ObjectSpace.each_object(Class) do |c|
=A0=A0=A0=A0=A0=A0=A0 = x+=3D1
=A0=A0=A0=A0=A0=A0=A0 t+=3D1 if c.name !~ /::/
=A0=A0=A0 end
=A0=A0=A0 = [x, t]
end

puts "Without rubygems : #{count_classes.inspect}" =
require 'rubygems'
puts "With rubygems : = #{count_classes.inspect}"

-----

Without rubygems : [183, = 59]
With rubygems : [469, 76]

To this effect, what about = structuring rubygems so that not all of it's classes are loaded all the = time.=A0

There = are 2 use scenarios for "require 'rubygems'". One is typically one, to = be able to use the code contained in gems, the other is for the 'gem' = command to be able to do all it's manipulation and fetching of = gems.=A0

Currently, = "require 'rubygems'" is built for the 2nd scenario, but thats probably = incorrect, since that scenario is used vastly less than scenario = one.

If = "require 'rubygems'" only included enough code be able to properly alter = the load path to allow a gem's code to be used, it would make almost no = impact on performance, where as now, it includes a huge amount of unused = code into every runtime.

Scenario 2 could easily = covered by adding "require 'rubygems/dev'" which would include the = current bevy of classes and code.

After all, what generic = rails app uses the TarReader class that rubygems imports? For that that = matter, what part of the rubygems runtime (scenario 1) uses = TarReader?

=A0-= Evan Phoenix


-- =
Cheers,
=A0=A0zimbatm

= --Apple-Mail-1--443621262--