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
>

Reply via email to