Generate all the Things!
Drasil is a framework for generating all of the software artifacts from a stable knowledge base, focusing currently on scientific software. The main goals are to reduce knowledge duplication and improve traceability. We also are extreme in our drive to reuse everything. We hope that maintainability, verifiability, traceability, and other software qualities will also be improved as a side-effect of our methods.
Drasil is used to generate all requisite software artifacts from a common knowledge-base using recipes written in a Domain-Specific Language (DSL). These recipes allow us to specify which pieces of knowledge should be used in which artifacts, how to transform them, and more.
Drasil is being designed and implemented using a grounded theory approach. To determine what is needed and make the design general, we are concurrently implementing six examples (case studies) in Drasil. (The specific examples are listed below under "Building specific examples.") These examples were first written using a typical "manual" approach. The full files for the case studies are available in a separate case studies repo.
For more information on Drasil, please read our position paper or take a look at our poster.
- Ensure you have Stack installed (if you have the Haskell Platform, you should already have Stack).
- Run
stack setup
while in ./code/ - Use the
make
command to build the current version of Drasil. This will build and run all of the examples as well. - You can find the generated output in the build folder that appears. Each example will have its own subdirectory.
Simply run: make argument
to build the corresponding example, where argument is detailed below:
Argument | Example |
---|---|
gamephys_diff | Chipmunk2D |
swhs_diff | Solar Water Heating System with PCM |
glassbr_diff | Glass-BR |
tiny_diff | HGHC toy example |
ssp_diff | Slope Stability Analysis |
nopcm_diff | minimal SWHS example, with PCM removed |
Please note that if make
has been used, docs are already generated automatically and can be found in build.
Automated testing can be done on these examples.
After building, you can run the examples by using stack exec NAME
where NAME is detailed below:
NAME | Example |
---|---|
chipmunkdocs | Chipmunk2D |
swhs | Solar Water Heating System with PCM (SWHS) |
glassbr | Glass-BR |
tiny | HGHC toy example |
ssp | Slope Stability Analysis (SSP) |
nopcm | SWHS without PCM (NoPCM) |
This runs the examples manually from the .stack-work folder after building, and the generated docs will appear in this folder (i.e. in the SRS and Website folders). Due to this placement, these generated versions will not be subject to automated tests.
You can run make docs
from the ./code folder to build the documentation.
See the README in ./code/ for more information.
Dan
- Subdirectory for Dan Szymczak's work. Mostly papers and presentations
GOOLCodeGen
- An isolated compilation space for creating GOOL code for the examples.
Presentations
- Presentations on LSS/Drasil
RelatedCode
- Contains the Generic Object Oriented Language (GOOL) code.
Steve
- Steven Palmer's work
WindowsFix
- Contains registry files for adding and removing the autorun of the command
chcp 65001
. This is to fix an issue with unicode characters. ONLY affects Windows machines.
code
- The main folder for Drasil source code and example implementations
notes
- Assorted general/administrative notes
.gitattributes
- Used by git
.gitignore
- Used by git (specifies which file(type)s to ignore when committing)
.travis.yml
- Used for continuous integration with Travis CI
LICENSE
- License information
README.md
- This file