Looking at the comment in eval.c concerning #require:

 *  Ruby tries to load the library named _string_, returning
 *  +true+ if successful. If the filename does not resolve to
 *  an absolute path, it will be searched for in the directories listed
 *  in <code>$:</code>. If the file has the extension ``.rb'', it is
 *  loaded as a source file; if the extension is ``.so'', ``.o'', or
 *  ``.dll'', or whatever the default shared library extension is on
 *  the current platform, Ruby loads the shared library as a Ruby
 *  extension. Otherwise, Ruby tries adding ``.rb'', ``.so'', and so on
 *  to the name. The name of the loaded feature is added to the array in
 *  <code>$"</code>. A feature will not be loaded if it's name already
 *  appears in <code>$"</code>. However, the file name is not converted
 *  to an absolute path, so that ``<code>require 'a';require
 *  './a'</code>'' will load <code>a.rb</code> twice.

I am very suprise the features are not converted to absolute paths
before being put in $". This does not seem robust.  For instance:

  foo/
    try.rb
    bar/
      try.rb

> cd foo
> irb

irb> require 'try.rb' => true
irb> Dir.chdir 'bar'
irb> require 'try.rb' => false

Obviously this is likely, but still. Why was this done? For speed gain?

Thanks,
T.