Should we capture this in the documentation somewhere? This is generally a 
useful set of hints for newcomers.

-viral

On Wednesday, January 21, 2015 at 5:38:29 AM UTC+5:30, Tim Holy wrote:
>
> Agreed there are advantages in putting ones test script into a module. 
> There 
> is also at least one disadvantage: if you get an error, you don't already 
> have 
> the "state" prepared to examine the variables you'll be passing as 
> arguments, 
> try the call with slightly different arguments, etc., from the REPL. 
>
> But this is a small point, and either strategy can work fine. 
>
> Best, 
> --Tim 
>
> On Tuesday, January 20, 2015 04:01:14 PM Petr Krysl wrote: 
> > 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