A low-level functional language

For exploring refinement types, lifetime inference, and algebraic effects

Ante is in active development

Ante is currently in active development and the compiler is in a very early state. In addition, the features listed on this website detail the language itself rather than the subset that is implemented by the current compiler. If you are interested to see which features are implemented, please look at the github page linked below. Otherwise, if you just want to see the current design of the language, check out the language tour.

Goals

Ante aims to help bridge the gap between low-level languages like C++/Rust and higher level garbage-collected languages like Java, OCaml, or Haskell. Another key goal is experimentation with novel features like refinement type inference, always-incremental compilation, lifetime inference, and algebraic effects.

Refinement Types

Refinement types can prevent bugs like array index out of bounds errors at compile-time. They can also be inferred to cut down on the number of annotations required.

Expressive

Common patterns like error handling and looping have syntax sugar to cut down on repetitive code while keeping things explicit.

Simple Module System

Ante’s module system mirrors the file tree and is easy to understand and easy to build as a result.

Always-Incremental Compilation

Incremental compilation metadata is distributed along with source code. This avoids the need for each user to rebuild most libraries or applications.

High & Low Level language

To try to bridge the gap between high and low level languages, ante adapts a high-level approach by default, maintaining the ability to drop into low-level code when needed.

Novel Memory Management

Ante plans on using lifetime inference for temporary references to help simplify memory management. The design for this isn’t finalized yet though and is subject to change, beware!

The compiler is on GitHub

All are welcome to contribute!

github.com/jfecher/ante