Indeed. I think that is the problem: Julia's "using" statement is tightly coupled to the module import functionality.
>From my understanding, the C++ "using namespace N1::N2::N3" directive simply informs the compiler to use shorthand notation for all variables/functions present in namespace N1::N2::N3. You do not actually "Import" anything new. In fact, with C++: the contents of that module are usually compiled independently in another library file anyways. I don't think the using directive affects the linker either (at least not directly). On Monday, March 2, 2015 at 5:59:30 PM UTC-5, [email protected] wrote: > > The C++ "using namespace" and Julia "using module" are not quite the same > thing. The C++ namespace is a top level entity that is created and > initialized as part of the C++ startup code and the "using" just makes the > names of these global entities available within the scope. The Julia > "using" imports, and thus creates, the module for the first time, and Julia > modules can contain statements that run at initialization, whereas C++ > namespaces can only contain declarations. > > But if the Julia "using" is within the function, when should the actual > import and initialize and execute the statements be done? Every time the > function is called is very expensive. Hoist the import out of the function > to the top level, but doing this naively (ie putting the hoisted import > just before the function) will then affect all code following the function > Have a "pseudo" top- level visible only to the function adds a complete > new complication to the name management code. But then what happens if the > module is imported into two functions, how is its initialization managed? > Or the top level and the function? > > So for now the "simpler is better" approach is to have the user manage > importing at the top level only. > > Cheers > Lex > > On Tuesday, March 3, 2015 at 7:23:33 AM UTC+10, Josh Langsfeld wrote: >> >> It's discussed in the FAQ so there must be a good reason for it, though >> no rationale is mentioned. >> >> >> http://docs.julialang.org/en/latest/manual/faq/#can-i-use-using-or-import-inside-a-function >> >> On Monday, March 2, 2015 at 3:00:21 PM UTC-5, Patrick O'Leary wrote: >>> >>> On Saturday, February 28, 2015 at 11:06:38 AM UTC-6, MA Laforge wrote: >>>> >>>> C++ provides "using namespace X" to "make available" the contents of X >>>> to the current scope. This even works on un-named scopes within a >>>> function: >>>> >>> >>> (etc.) >>> >>> I know this is something that's come up before, and I think rejected--I >>> think because it causes conflicts with multiple dispatch? But I can't seem >>> to find the thread(s). >>> >>> I can't create a hard conflict in a quick mental search for an example, >>> but I can create some level of confusion: >>> >>> module Foo >>> bar::Int = 1 >>> end >>> >>> module Baz >>> bar::Float64 = 27.3 >>> with module Foo # not current Julia syntax >>> bar #which bar is this? >>> end >>> end >>> >>
