I’ve read a few good (and recent) threads on how to organize code to achieve what I need, but I want advice on a really tiny example.
Suppose I’m currently tasked with building a calculator program.
I want to make separate modules for each low level functionality: Adder, Subtractor, Multiplier, Divider.
Then I want to have higher-level abstractions which make use of such modules to make applications (in this case, a Calculator app).
I want to keep low level modules in a place called “BuildingBlocks” and I want to keep Calculator and others in a “Projects” folder.
This structure is important because I want to keep adding different building blocks and making different projects with them. For example, maybe I find a novel way to do multiplication and want to try out that algorithm for a specific problem. Then I want to create a specific calculator app that uses that case.
The main objectives of this example are:
- To be able to have some people writing building blocks and other people writing “apps”
- To have the building blocks be precompiled so apps don’t have compilation latency when executing functions for the fist time
- To have all building blocks previously tested and testable using Pkg functionality
Constraints
- All source code is under the same git repository (git submodules may be used, but is a bit of a pain to set up)
- Git has to be local/locally hosted, with as few plugins as possible
- Although Julia has multiple dispatch and I can easily define two types for these two multiplication routes, for the sake of the example, I want them to be in different modules/packages.
Questions:
- Is there any downside to using this folder structure?
<git_root>/Projects/Calculator/src/Calculator.jl <git_root>/BuildingBlocks/<Adder/Sub<etc>
- In Calculator.jl, how do I do “using Adder.jl”?
- Is there any online tutorial about this topic that is not in pure text? Code snippets and exercises would be greatly appreciated
- Would it be recommended to create a new Julia environment for each new project in Projects?
Thanks for reaching this point of the post
I only made a few small coding projects where I create a single .jl file to write functions that solve problems and the problems themselves in some main.jl or runtests.jl.