# Code organization to use precompilation with a tiny example

**URL:** <https://discourse.julialang.org/t/code-organization-to-use-precompilation-with-a-tiny-example/65893>\
**Category:** New to Julia\
**Tags:** code-organization\
**Created:** [August 5, 2021, 3:03pm UTC](https://discourse.julialang.org/t/code-organization-to-use-precompilation-with-a-tiny-example/65893 "2021-08-05T15:03:53Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![danilo-bc](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/danilo-bc/32/19590_2.png) [@danilo-bc](https://discourse.julialang.org/u/danilo-bc)\
**Post date:** [August 5, 2021, 3:03pm UTC](https://discourse.julialang.org/t/code-organization-to-use-precompilation-with-a-tiny-example/65893/1 "2021-08-05T15:03:54Z")

</div>

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.
