Note that the .expected files are the expected output of the corresponding .umi files.
Int !(Int n, Void _) {
if n == 0 { 1 }
else { n * (n - 1)! }
}
Void main() {
print(0!) # 1
print(1!) # 1
print(5!) # 120
print(10!) # 3628800
print(12!) # 479001600
}
- Compiles to CIL
- Turing Complete
- Self-hosted
- Published on the AUR
- Pong
- VSCode extension with auto-complete, etc
- Interoperability with C# (can use any C# file in Umi file but have to manually make bindings)
- Strong static typing
- Implicit and explicit return
- Function overloading
if
andelse
statementswhile
loops- Aliases
- Classes
- All methods are virtual by default
- Inheritance
- Generics
- Immutability by default
- Immutable references like
final
in Java - Make variables mutable with
mut
keyword
- Immutable references like
- Including other umi files (importing)
- Creating range array with
...
- E.g.
0...10
- E.g.
- Macros or inline functions
for
in
loop- String interpolation
- Anonymous functions
- Switch cases