package malfunction

  1. Overview
  2. Docs
Compiler back-end for functional languages, based on OCaml

Install

Dune Dependency

Authors

Maintainers

Sources

v0.7.tar.gz
md5=e39bddf91323cccb979b525c8a994f3a
sha512=244346b3094d7cd6bffc02208d503bae1a2a6a7e99dee21a51c42bd458250e36ac6ec9832b4cc78447caf1249e4225a8d88b4dbb7b5ed4d340dc5073c65034f2

Description

Malfunction is a high-performance, low-level untyped program representation, designed as a target for compilers of functional programming languages.

Published: 11 Nov 2024

README

README.md

Malfunction is a high-performance, low-level untyped program representation, designed as a target for compilers of functional programming languages.

Malfunction is a revolting hack, exposing bits of the OCaml compiler's guts that were never meant to see the light of day.

"Hello, World" looks like this:

(module
  (_ (apply (global $Stdlib $print_string) "Hello, world!\n"))
  (export))

Malfunction requires OCaml (at least version 4.04.0, and you may see better performance with flambda enabled), which you should install using OPAM. Then, install malfunction using:

opam pin add malfunction git://github.com/stedolan/malfunction.git

You can then compile and run the above example with:

malfunction compile docs/helloworld.mlf -o hello
./hello

The syntax is based on s-expressions, and is designed to be easy to correctly generate, rather than to be particularly beautiful. For instance, there are no reserved words: all user-defined identifiers must be prefixed with $.

Files are compiled as OCaml modules, and may import values from OCaml (e.g. Stdlib.print_string in the example above) and export values to OCaml (using the export form). Modules written in malfunction may be combined with an mli file written in OCaml.

Malfunction makes no effort to check types. Typical programs do go wrong. Compilers targeting Malfunction need to convince themselves that their output won't go wrong, but don't need to explain their reasoning.

For more, read the spec, or the abstract submitted to the ML Workshop, or some examples

There's also an experimental backend for the dependently typed language Idris.

Dependencies (5)

  1. zarith
  2. cppo build
  3. dune >= "2.9.1"
  4. ocamlfind
  5. ocaml >= "4.08" & < "5.4"

Dev Dependencies (1)

  1. omd with-test & >= "2.0.0~"

Used by

None

OCaml

Innovation. Community. Security.