The Disciplined Disciple Compiler (DDC)
DDC is a research compiler used to investigate program transformation in the presence of computational effects. It compiles a family of strict functional core languages and supports region, effect and closure typing. This extra information provides a handle on the operational behaviour of code that isn't available in other languages. Programs can be written in either a pure/functional or effectful/imperative style, and one of our goals is to provide both styles coherently in the same language.
State of Play
DDC is at a stage where it will compile first order programs to executables, and parse and type-check higher order programs. Back-end support for higher functions isn't finished, and we don't have a garbage collector yet. See the Release Notes for a summary of what works.
- First order list functions that compile and run.
- Higher order list functions and the effect system.
- Mutable references, region extension and type-safe freezing.
The current release is DDC 0.4.1 (March 2014). Release Notes.
DDC consists of the following packages. To get them all just install ddc-tools, and the others will be installed as dependencies.
- ddc-tools Command line tools. This is the user interface for the other packages.
- ddc-source-tetra Parser and desugarer for front end Disciple Tetra language.
- ddc-core-tetra Core language fragment using computation types instead of latent effects.
- ddc-core-eval Provides a single step evaluator (interpreter). It is a direct implementation of the operational semantics.
- ddc-core-salt Intermediate representation for C like languages, and C code generator.
- ddc-core-llvm LLVM code generator.
- ddc-core-simpl Implements simplifying code transformations and analyses.
- ddc-core Defines the abstract syntax, type checker, and substitution operators.
- ddc-interface User interface library.
- ddc-build Build framework.
- ddc-driver Top-level compiler driver.
- ddc-base Re-exports the main external dependencies of the Disciplined Disciple Compiler project.
GitHub page: https://github.com/DDCSF/ddc
- Development Builds
- Coding Conventions
- Build Bots and Servers
- Haddock Code Documentation
- Memory and CPU Usage Profiling
- Debugging Help
- Making Patches
- Release Process
How to get help
- Ask questions on disciple-cafe at Google Groups.
- Ask in the #disciplined channel on the freenode IRC network.
How you can help
- Download the compiler, do the tutorial, write programs.
- File bug reports, fix tickets on the trac.
- Complain if you can't work something out.
- Mechanized soundness for a type and effect system with region deallocation, Lippmeier, In Submission.
- Rewrite Rules for the Disciplined Disciple Compiler, Robinson, UNSW 2012
- Type Based Aliasing Control for the Disciplined Disciple Compiler, slides, Ma, UNSW 2012
- Type Inference and Optimisation for an Impure World, Lippmeier, ANU 2010
- Witnessing Purity, Constancy and Mutability, slides, Lippmeier, APLAS 2009