On 2011-10-18 13:48, Martin Nowak wrote:
On Tue, 18 Oct 2011 13:23:02 +0200, Jacob Carlborg <[email protected]> wrote:
On 2011-10-18 09:38, Martin Nowak wrote:
http://prowiki.org/wiki4d/wiki.cgi?LanguageDevel/DIPs/DIP14
What happens if you import a the same file twice using different
paths, i.e. relative and absolute path?
Will the imported files need a module declaration or will the compiler
just care about the path?
The module name is determined by the module declaration or implicitly by
the basename of the file.
Module collisions are already detected based on the module name.
You can actually import two identical modules through different
files/symlinks as long
as they don't have a module declaration.
This does not differ from the current behavior.
martin
What happens then, to module constructors and similar? What concerns me
is that something similar to Ruby 1.8 could happen.
In Ruby when the compiler encounters a "require" it will load the file
specified in the require call. Meaning any top level code will be
executed. If you require the same file again, i.e. from another file it
will not execute the required file again because it's already loaded.
The problem with this is that the load path which stores all loaded ruby
files does not sore the full path name of a ruby file, it stores what
every you called "require" with.
If you then require the same file using two different paths, i.e.
relative and full path, the required file will be executed again,
possibly resulting in warnings like:
warning: already initialized constant FOO
This is fixed in Ruby 1.9 by always storing full paths to required files
in the load path.
--
/Jacob Carlborg