Where is the API for this functionality exposed, so that eg ESS could make use of it? For example, how would one eval or define new functions into a module in the REPL?
Best, Tamas On Mon, Jan 26 2015, Mike Innes <[email protected]> wrote: > It's not an inherent feature of Julia, no, just a tooling thing. Juno, for > example, will allow you to eval directly into modules just fine, including > defining new functions, replacing them, evalling `include`s, and replacing > the module wholesale in order to get around type redefinition issues and > #265. > > It's a really nice workflow IMO, and it's about as interactive as it gets, > but it's perhaps a bit less obvious than I thought – I really need to add > some workflow tips of my own to the Juno docs. > > (It's also especially great for working with Base / bigger packages etc. > since you can modify things without recompiling everything. It would be a > great feature if the REPL was able to "step into" modules other than Main > so that everyone can use this) > > On 26 January 2015 at 14:54, Tamas Papp <[email protected]> wrote: > >> So the only the global name space is for "tinkering" (iterative, >> interactive development), and modules are for more-or-less stable code >> --- is this correct? >> >> Is this an inherent feature of the architecture of Julia, or can one >> expect this to change as issues (especially #265) are resolved? >> >> Best, >> >> Tamas >> >> On Mon, Jan 26 2015, Tim Holy <[email protected]> wrote: >> >> > You can redefine a function like this: >> > >> > function MyModule.myfunction(args...) >> > stuff >> > end >> > >> > Two caveats: >> > - myfunction has to already exist in MyModule for this to work---you >> can't add >> > new names to an already-closed module. >> > - Anything that has already been compiled and uses myfunction won't >> "hear" >> > about the new definition unless you reload the whole module (see issue >> #265). >> > >> > --Tim >> > >> > >> > On Monday, January 26, 2015 02:54:03 PM Tamas Papp wrote: >> >> Thanks to everyone for the replies. >> >> >> >> So do I understand the following correctly: if I separate my functions >> >> and runtime code (eg MyModule and MyModuleRun), and then want to >> >> redefine a single function in the first, then I have to reload the whole >> >> module again? >> >> >> >> Julia seemed so ideal for exploratory programming at first, but then it >> >> looks like I cannot manipulate the image freely and restarts are >> >> required all the time, which is somewhat time-consuming. Perhaps I am >> >> missing something important in my understanding, still trying to use >> >> Julia similarly to Common Lisp, which is very flexible in this respect. >> >> >> >> Best, >> >> >> >> Tamas >> >> >> >> On Tue, Jan 20 2015, Tim Holy <[email protected]> wrote: >> >> > My workflow (REPL-based, Juno in particular is probably different): >> >> > - Open a file ("MyModule.jl") that will consist of a single module, >> and >> >> > contains types & code >> >> > - Open a 2nd file ("mymodule_tests.jl") that will be the tests file >> for >> >> > the >> >> > module. Inside of this file, say `import MyModule` rather than `using >> >> > MyModule`; you'll have to scope all calls, but that's a small price >> to pay >> >> > for the ability to `reload("MyModule")` and re-run your tests. >> >> > - Open a julia REPL >> >> > - Start playing with ideas/code in the REPL. Paste the good ones into >> the >> >> > files. And sometimes vice-versa, when it's easier to type straight >> into >> >> > the >> >> > files. >> >> > - When enough code is in place, restart the repl. Cycle through >> >> > >> >> > reload("MyModule") >> >> > include("mymodule_tests.jl") >> >> > <edit these two files> >> >> > >> >> > until things actually work. >> >> > >> >> > --Tim >> >> > >> >> > On Tuesday, January 20, 2015 01:09:01 PM Viral Shah wrote: >> >> >> This is pretty much the workflow a lot of people use, with a few >> julia >> >> >> restarts to deal with the issues a) and b). I often maintain a >> script as >> >> >> part of my iterative/exploratory work, so that I can easily get to >> the >> >> >> desired state when I have to restart. >> >> >> >> >> >> -viral >> >> >> >> >> >> On Tuesday, January 20, 2015 at 4:15:13 PM UTC+5:30, Tamas Papp >> wrote: >> >> >> > Hi, >> >> >> > >> >> >> > I am wondering what the best workflow is for iterative/exploratory >> >> >> > programming (as opposed to, say, library development). I feel >> that my >> >> >> > questions below all have solutions, it's just that I am not >> experienced >> >> >> > enough in Julia to figure them out. >> >> >> > >> >> >> > The way I have been doing it so far: >> >> >> > 1. open a file in the editor, >> >> >> > 2. start `using` some libraries, >> >> >> > 3. write a few functions, load data, plot, analyze >> >> >> > 4. rewrite functions, repeat 2-4 until satisfied. >> >> >> > >> >> >> > I usually end up with a bunch of functions, followed by the actual >> >> >> > runtime code. >> >> >> > >> >> >> > However, I run into the following issues (or, rather, >> inconveniences) >> >> >> > with nontrivial code: >> >> >> > >> >> >> > a. If I redefine a function, then I have to recompile dependent >> >> >> > functions, which is tedious and occasionally a source of bugs >> >> >> > (cf. https://github.com/JuliaLang/julia/issues/265 ) >> >> >> > >> >> >> > b. I can't redefine types. >> >> >> > >> >> >> > I can solve both by restarting (`workspace()`), but then I have to >> >> >> > reload & recompile everything. >> >> >> > >> >> >> > I am wondering if there is a more organized way of doing this --- >> eg >> >> >> > put >> >> >> > some stuff in a module in a separate file and just keep reloading >> that, >> >> >> > etc. Any advice, or pointers to tutorials would be appreciated. >> >> >> > >> >> >> > I am using Emacs/ESS. >> >> >> > >> >> >> > Also, is there a way to unintern symbols (a la CL) that would >> solve the >> >> >> > type redefinition issue? >> >> >> > >> >> >> > Best, >> >> >> > >> >> >> > Tamas >>
