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
>>

Reply via email to