A compiler from a small functional language to C. Especially features algebraic effects and handlers with multishot continuations, and a static type system with inference of types and effects, with subtyping.
Switch branches/tags
Nothing to show
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
alphalib Add prototype implementation of typed effects (infers types less gene… Jan 15, 2018
kremlin Add initial provided code. Dec 16, 2017
report Add comment on bisubstitutions when instanciating polymorphic types. Feb 16, 2018
test Add prototype implementation of typed effects (infers types less gene… Jan 15, 2018
tests Fix infinite loop in type simplification (fixes #2) Dec 10, 2018
.gitignore Add report.bib and extend .gitignore with LaTeX generated files. Feb 16, 2018
.merlin Add initial provided code. Dec 16, 2017
Apply.ml Fix an issue with function calls with too many or too few arguments (f… Dec 10, 2018
CPS.ml Add higher-order CPS translation. Jan 11, 2018
CPS.mli Add initial provided code. Dec 16, 2017
Cook.ml Fix infinite loop in type simplification (fixes #2) Dec 10, 2018
Cook.mli Add type checking and type inference. Dec 28, 2017
Defun.ml Fix an issue with function calls with too many or too few arguments (f… Dec 10, 2018
Defun.mli Fix an issue with function calls with too many or too few arguments (f… Dec 10, 2018
Dispatch.ml Fix an issue with function calls with too many or too few arguments (f… Dec 10, 2018
Error.ml MLsub: finally completely working. Jan 17, 2018
Error.mli MLsub: finally completely working. Jan 17, 2018
Finish.ml Get rid of some warnings Feb 16, 2018
Finish.mli Add initial provided code. Dec 16, 2017
LICENSE Add LICENSE file. Mar 10, 2018
Lambda.ml Get rid of some warnings Feb 16, 2018
Lexer.mll Add effect arguments in polymorphism Feb 12, 2018
Main.ml Fix an issue with function calls with too many or too few arguments (f… Dec 10, 2018
Makefile Fix an issue with function calls with too many or too few arguments (f… Dec 10, 2018
Parser.mly Add effect arguments in polymorphism Feb 12, 2018
README Extend README a bit Feb 16, 2018
RawLambda.ml Add effect arguments in polymorphism Feb 12, 2018
Tail.ml Effects almost working Jan 4, 2018
Top.ml Fix an issue with function calls with too many or too few arguments (f… Dec 10, 2018
_tags Add initial provided code. Dec 16, 2017
prologue.h Add prototype implementation of typed effects (infers types less gene… Jan 15, 2018

README

joujou is a compiler from a small functional language to C.

It supports curried functions, algebraic data types and deep pattern matching,
algebraic effects (with multishot continuations), a static type system with
inference of types and effects, supporting subtyping. It also has a generational
garbage collector included in compiled programs (only the minor generation is
actually collected for now, though).

Its compilation scheme rests on continuation-passing style transformation and
defunctionalisation -- as such, compiled programs are not very efficient. It
however supports efficient application of a n-ary function to all of its
arguments, without building intermediate closures.

Note: see report/report.pdf (in French) for details about the implemented features.