There is https://github.com/JuliaLang/julia/issues/4600 but there was recently quite some dicussion on the julia-dev mailing list as well as https://github.com/JuliaLang/julia/issues/8014
Cheers, Tobi Am Montag, 25. August 2014 16:29:03 UTC+2 schrieb Andrei Zh: > > Valentin, thanks for your answer, but it seems like I need to give you > some more context (sorry for not mentioning it earlier). I'm trying to > repeat my experience of interactive development in languages like Python or > Lisp. In these languages I can load some module/file contents to REPL > ("__main__" module in Python, "user" namespace in Clojure, etc.) and play > around with the code just like if I was "inside" of module under > development. E.g. I can modify some function, send new definition to REPL > and immediately try it out. I can also import any other > modules/packages/namespaces. In Python, for example, being in __main__ > (with loaded definitions from target module) I can refer to any other > module on PYTHONPATH by its full name. Same thing with Clojure - any > namespace on CLASSPATH is available for loading. > > In Julia there's Main module too. I can load some code and play around > with it, just like in REPLs of other lanuages. E.g. I can start editor, > open some file "linreg.jl", send all its contents to REPL, see how it > works, update, reload, etc. Works like a charm... until I try to import > another module. > > Unlike Python or Clojure, Julia's module system is decoupled from source > files and directory structure. Correct me if I'm wrong, but it seems like > there's no way to load module other than include() its source file. At the > same time, I cannot include files all here and there. E.g. in example above > when I work on module A (from REPL/Main) I cannot include "P.jl", because > "P.jl" contains recursive include() of "a.jl", and they just re-include > each other endlessly. > > So the only way we can make it work is to load module system from the top > level ("P.jl") and then refer to other modules with respect to it (e.g. > like "using .A" or "import ..U"). It works fine with third party packages, > but I find it really frustrating when working on some internal module (e.g. > A). > > Thus any tips and tricks on loading modules when working from REPL/Main > are welcome. > > > > On Sunday, August 24, 2014 5:38:53 PM UTC+3, Valentin Churavy wrote: >> >> What you are looking for is described in >> http://julia.readthedocs.org/en/latest/manual/modules/#relative-and-absolute-module-paths >> >> <http://www.google.com/url?q=http%3A%2F%2Fjulia.readthedocs.org%2Fen%2Flatest%2Fmanual%2Fmodules%2F%23relative-and-absolute-module-paths&sa=D&sntz=1&usg=AFQjCNFxpHj9YNC1JQ2Aag3qLpF97leT0w> >> >> in P.jl you include all your submodules >> module P >> include("u.jl") >> include("a.jl") >> include("b.jl") >> >> using .A, .B >> >> export f, g >> end >> >> u.jl >> module U >> g() = 5 >> f() = 6 >> end >> >> a.jl and b.jl both lokk like this >> >> module A >> import ..U >> >> f = U.f >> g = U.g >> >> export f, g >> end >> >> so one dot as a prefix looks in the namespace of the current module and >> two dots as prefix looks in the namespace of the parent module. >> >> Hope that helps >> >> On Sunday, 24 August 2014 14:10:58 UTC+2, Andrei Zh wrote: >>> >>> Let's say I have following project layout: >>> >>> P.jl that contains module P -- main package module, exposes code from >>> a.jl and b.jl >>> a.jl that contains module A and >>> b.jl that contains module B -- some domain specific modules >>> u.jl that contains module U -- util functions >>> >>> Now I want to use functions in U from modules A and B. In simplest case >>> I would just include("u.jl") inside of a.jl and b.jl, but this way >>> functions from U will be defined in both - A and B. So I really want to >>> import U, not include u.jl, but I can't do this since u.jl is not on the >>> LOAD_PATH (and messing with it manually looks somewhat bad to me). >>> >>> Is there some standard way to tackle it? >>> >>> (Note, that A, B and U are here just for code splitting, other ways to >>> do same stuff are ok too.) >>> >>