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