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