Ralph... thanks for the clarifications and suggestions.  I'll test them out.

Nick

On Saturday, November 19, 2016 at 11:47:23 AM UTC-6, Ralph Smith wrote:
>
> Unlike Matlab, Julia doesn't give special treatment to script files.
> By "script" we usually mean a file containing a series of expressions
> (which can include type and function definitions) intended for
> evaluation in the Main module.  The Main module is where expressions
> typed interactively at the REPL or IDE, or read from the file
> specified on the Julia command line, are evaluated. Source files
> implementing parts of other modules differ only in intention.
>
> 1) Each module has its own so-called "global" scope, which is where the
> contents of "included" files are evaluated. Thus "include" does not
> just paste text into your function, as it would in Fortran or C. In
> fact, the inclusion is done when the surrounding code is *run*, so the
> module being modified may not be the one where the function is
> defined; "include" should not normally appear in functions. This
> behavior is not yet clearly documented.
>
> 2) Global variables have some performance drawbacks, so are not
> recommended for your situation.  What I do is to define a composite
> type (e.g. "Context") containing most of the run parameters and
> widely needed arrays, construct an instance of it in my "main()"
> function, and pass the "context" variable as an argument to everything
> else.  The "Parameters" package provides some nice macros and methods
> for usage like this.
>
> 3) Most of us find it wise to organize the pieces of even mid-size
> projects into modules. You don't need to make them full packages:
> just "include" the top-level module files in your main script. Then
> you can access their components with "MyModule.thing", or via "using"
> and "import" if you prefer.
>
> Finally a couple of syntax points: you need the word "function" in the
> definition of "main()", and Julia doesn't have the "++" operator.
>
>
>
> On Friday, November 18, 2016 at 1:25:05 PM UTC-5, Nicholas Mueschke wrote:
>>
>> Question #1:  If main entry point to run a calculation "main()" is a 
>> function, it gets its own variable workspace, right?  Now, if I write a 
>> script (not a function) and use include("some_script.jl") with main(), does 
>> Julia just inline that code within main()?  In terms of scope, should the 
>> script file be able to see all of the variables in the scope of main()?  In 
>> Matlab that would be true.  In Fortran/C that wouldn't.  I guess, I'm not 
>> sure what scope implications there are for Julia script files.
>>
>> Question #2:  If I've defined a bunch of functions as shown in the 
>> pseudocode above, what is the most performant way to have the large 1D 
>> arrays accessible within the scope of each function.  As you can tell, I'm 
>> trying to avoid writing functions that accept a long list of input 
>> parameters.  The old Fortran solution is to simply make the arrays global, 
>> so that each function can access them as needed.  How terrible is that idea 
>> within the Julia framework?  Also, how can I even do that?  I've tried 
>> writing a script (not a function) to declare a long list of global 
>> variables and then used include("DeclareGlobalVariables,jl) within my main. 
>>  But, when I return to main(), those variables do not show up in the 
>> workspace for main???  What am I missing?
>>
>> Question #3: I come from a VisualStudio IDE background, so I'm having 
>> trouble figuring out how to organize a Juila project.  I'm trying out Atom 
>> for my first Julia tests.  For a project that's bigger than just a script 
>> or a few functions, should I be defining a defining main entry point 
>> function within a module?  Why Does Julia force modules to be added as 
>> packages so they can be loaded with the "using" command?  That seems 
>> strange.  Or, should I just write everything as a collection of files with 
>> functions in them and not worry about modules?  Simple REPL and one file 
>> Julia examples are everywhere.  There are also large coding 
>> projects/libraries/utilities on github as examples, but I'm having trouble 
>> figuring out the structure of these larger projects.  I guess, I'm 
>> somewhere in between these two cases, where I'm just want to crunch some 
>> numbers, but I'm a little more complicated/sophisticated than the single 
>> file examples.  What's the best way to proceed with such a project/file 
>> structure?
>>
>> Thanks in advance for any help.
>>
>> Nick
>>
>>
>>
>>
>>
>>
>>

Reply via email to