I think it would be worthwhile to point out  that enclosing  the code of 
one's "scratch" file  in a module  has a number of advantages.

1. The  global workspace is not polluted  with too many variables and  
conflicts are avoided.
2. The  variables  defined within that module  are accessible from the REPL 
as if the variables were defined at the global level.

Example:

module m1

using JFinEALE

t0 = time()

rho=1.21*1e-9;# mass density
c =345.0*1000;# millimeters per second
bulk= c^2*rho;
Lx=1900.0;# length of the box, millimeters
Ly=800.0; # length of the box, millimeters

fens,fes = Q4block(Lx,Ly,3,2); # Mesh
show(fes.conn)

end

julia> include("./module_env.jl")
Warning: replacing module m1
[1 2 6 5
 5 6 10 9
 2 3 7 6
 6 7 11 10
 3 4 8 7
 7 8 12 11]
julia> m1. # I hit the tab key at this point, and I got this list of 
variables that I can access
Lx   Ly    bulk  c     eval  fens  fes   rho   t0

I'm sure this is no news to the Julian  wizards, but to a newbie like me it 
is useful information.  (I haven't seen this in the documentation.   
Perhaps it is there,  but  if that is not the case I would be all for 
adding it in.)

Petr

On Tuesday, January 20, 2015 at 1:45:02 PM UTC-8, Jameson wrote:
>
> My workflow is very similar. I'll add that I'll make a throwaway module 
> ("MyModuleTests") so that I can use "using" in the test file. Doing this at 
> the REPL (defining a new module directly at the prompt) is also a nice way 
> of encapsulating a chunk of code to isolate it from existing definitions 
> (including old using statements). It's also similar to how I'll use a large 
> begin/end block to group a large chunk of initialization code so that I can 
> iterate and rerun it easily. 
> On Tue, Jan 20, 2015 at 4:34 PM Tim Holy <[email protected] <javascript:>> 
> 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