/fmm

The uncurried minimal functional programming language for CPS transformation

Primary LanguageRustApache License 2.0Apache-2.0

F--

GitHub Action License

The uncurried minimal functional programming language

It's designed to be a compiler target for high-level functional programming languages.

Features

  • SSA
  • Minimal
    • Only 4 control instructions
      • branch
      • call
      • if
      • return
    • No backward jump
  • Portable
    • Pointer-sized integer
    • C-like union type
    • Boolean type
  • Structural typing
  • CPS transformation
  • IR builder library

Backends

  • LLVM
  • C
    • No guarantee for tail call optimization

Limitations

  • Inductive types
  • Weak typing
  • No type inference

Calling convention compatibility table

Caller \ Callee Target (C) Tail Source (CPS)
Target (C) x x *1
Tail x x *1
Source (CPS) x x x
  • *1: Suspension in functions is not supported.

Design notes

  • Expressions have no side effect.
    • You can use them in constants.
  • Instructions can have side effects.

License

Apache 2.0