Skip to content
mag-languagePublic

About

The Mag Language Runtime

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

66 Commits

Folders and files

Repository files navigation

mag banner

Mag

Mag is an optionally typed, expression-oriented programming language with multimethods and pattern matching.

Quick start

cargo run          # start the REPL
cargo run -- run <file.mag>   # run a source file
cargo run -- --debug          # REPL with instruction/register output

Language overview

Arithmetic and comparisons

>>> 1 + 2
3
>>> 10 / 4
2.5
>>> 3 > 2
true

Multimethods

Define the same method name multiple times with different signatures. The runtime picks the right one based on the argument:

>>> def fib(0) 0
>>> def fib(1) 1
>>> def fib(n Int) fib(n - 1) + fib(n - 2)
>>> fib(10)
55

Type-based dispatch

Type annotations on parameters create distinct dispatch entries:

>>> def double(n Int) n * 2
>>> def double(n String) n + n
>>> double(5)
10
>>> double("hi")
hihi

Conditionals

>>> if 3 > 2 then print("yes") else print("no") end
yes

Variables

>>> var x = 42
>>> x
42

Inside a method body, var binds a local variable:

>>> def greet(name String)
...   var msg = "hello " + name
...   msg
... end
>>> greet("world")
hello world

Early return

>>> def abs(n Int)
...   if n < 0 then return 0 - n end
...   n
... end
>>> abs(-5)
5

Credits

Mag is based on the Magpie language by Robert Nystrom. His blog posts are the foundational inspiration for this project.

License

Licensed under the MIT license.

About

The Mag Language Runtime

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages