Bug #9906
closedduplicated require of '.so' files?
Description
Dear all,
We are trying to get rid of autoload;
We could require everything in the first line of the file but instead we
prefer to require only what we need, when we need it.
So, instead of
require "digest/md5"
def foo(n)
Digest::MD5.hexdigest(n)
end
we would like to do:
def foo(n)
require "digest/md5"
Digest::MD5.hexdigest(n)
end
The problem we've found, is that duplicate require(name)
, satisfied by
".rb" files are only executed once; but when file loaded by
require(name) is a '.so', next requires with the same name will be
executed again and again.
Example:
$ cat require-rb.rb
def foo(n)
require "set"
Set.new([n])
end
1000.times{|n|
puts foo(n)
}
$ strace -e trace=file -o require-rb.log ruby require-rb.rb
$ grep -c -E 'open.*/set' require-rb.log
8
$ cat require-so.rb
def foo(n)
require "digest/md5"
Digest::MD5.hexdigest(n.to_s)
end
1000.times{|n|
puts foo(n)
}
$ strace -e trace=file -o require-so.log ruby require-so.rb
$ grep -c -E 'open.*/md5' require-so.log
16001
Is this a bug or a feature?