mat's untitled language
 
 
Go to file
mat ess c2c0dacb67 Blocks and statements 2023-04-30 23:05:39 -04:00
docs Blocks and statements 2023-04-30 23:05:39 -04:00
src Blocks and statements 2023-04-30 23:05:39 -04:00
.envrc Initial commit, expression parsing 2023-04-28 03:13:43 -04:00
.gitignore Initial commit, expression parsing 2023-04-28 03:13:43 -04:00
Cargo.lock Initial commit, expression parsing 2023-04-28 03:13:43 -04:00
Cargo.toml Initial commit, expression parsing 2023-04-28 03:13:43 -04:00
README.md Initial commit, expression parsing 2023-04-28 03:13:43 -04:00
build.rs Initial commit, expression parsing 2023-04-28 03:13:43 -04:00
example.mul Blocks and statements 2023-04-30 23:05:39 -04:00
flake.lock Initial commit, expression parsing 2023-04-28 03:13:43 -04:00
flake.nix Initial commit, expression parsing 2023-04-28 03:13:43 -04:00

README.md

mul

mat's untitled language

goals

start simple and grow

while mul's implementation is still getting started, i want to implement features atomically, one at a time, in an end to end manner.

for example, we'll start with a simple system-f/bidirectional system, implement a parser, typechecker, interpreter, and code generator, then gradually layer features onto that, supporting them at every "level" of the compiler.

orthogonal and discoverable

avoid overly redundant or unrelated functionality. make the core set of functionality well documented and easy to inspect. taking cues here from fish shell.

robust static type system

without going to the extent of dependent types, mul's type system should be expressive and flexible.

application-friendly ergonomics without sacrificing performance

mul will take cues from visions for a "smaller" rust that is able to focus on a different set of problems by not specializing in systems programming.

Notes on a smaller Rust

Revisiting a 'smaller Rust'

Rust's Ugly Syntax

in short, we want to take parts of rust's syntax and semantics that work well and are amenable to both machine and human analysis, while leaving behind the components that are designed around control of memory layout + representation, explicit mentions of ownership and borrowing, and other more complicated concepts.

while not prioritizing it in the early implementation, mul will try to learn from rust (and its progeny) to sacrifice as little performance as possible while still offering a substantially simpler interface.

incremental, interactive, intelligent

parsing, typechecking, evaluating, compiling, etc should be usable across a batch compiler, interactive REPL, and IDE tooling. program information should be preserved where possible.