Project

General

Profile

Bug #9906

duplicated require of '.so' files?

Added by runixo (Martin Sarsale) about 6 years ago. Updated about 6 years ago.

Status:
Rejected
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 2.1.0p0 (2013-12-25 revision 44422) [i686-linux]
[ruby-core:62948]

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?

Also available in: Atom PDF