Goose complete programming language
- https://people.mpi-sws.org/~rossberg/sml.html
- https://github.com/pascallouisperez/mu-ml
- https://lorgonblog.wordpress.com/2008/04/09/catamorphisms-part-three/
- https://github.com/dotnet/corert
- https://www.beeflang.org/
- https://eev.ee/blog/2016/12/01/lets-stop-copying-c/
- http://www.stephendiehl.com/llvm/
- https://ziglang.org/documentation/master/
- https://github.com/fscheck/FsCheck
- https://github.com/vain0x/milone-lang.git
- https://github.com/FrankBro/ordo
- https://caml.inria.fr/pub/docs/oreilly-book/html/book-ora058.html
- https://github.com/jhasseldam/MicroFsharp
- https://github.com/susl/compiler-in-fsharp
- https://github.com/AndrewRublyov/MicroCosmo
- https://saturnframework.org/
- Lexing
- Generates a token list
- Parsing
- Generates an AST
- Import Resolution
- Imports all the types from modules
- Type Checking
- Iteratively typechecks the AST
- Constraint resolution
- Type Inference
- Generates a Typed AST
- Code Generation
- Lowering
- Optimization
- IL emit
- Emit IL
- Binary creation
let name = 1
let MyModule = module {
let x = 1
}
let myStruct = struct {
name : type
name : type
}
let myUnion = union {
name : type
name : type
}
let inc = lambda (a) {
a + 1
}
let sum = lambda (a, b) {
a + b
}
let inc = lambda (a:int):int {
a + 1
}
let sum = lambda (a:int, b:int):int {
a + b
}
let array = array { 1 ; 2 ; 3 }
let array = array {
1
2
3
}
let tuple = tuple { 1 ; "a" ; ident }
let tuple = tuple {
1
"a"
ident
}
let dictionary = dict { 1 : "one" ; 2 : "two" }
let dictionary = dict {
1 : "one"
2 : "two"
}
empty ? list
s"HOLA"
for x in things {
printf x
}
repeat 1000
printf "Hola!"
open IO
printf "hola Agustin!"
let variable = "Agustin"
printf f"hola {variable}!"
The string type represents immutable text as a sequence of Unicode characters.
- concat
- join
- indexOf
- contains
- startsWith
- endsWith
- remove
- replace
- split
- substring
- trim
- trimStart
- trimEnd
- equals
- toLower
- toUpper
- padLeft
- padRight
- length
- find
let s = "012345678"
s[0] == "0"
s[0 .. 2] = "012"
s[0 .. 2 .. 8] = "02468"
- fold
- map
LINQ like DSL for provided types like arrays, sets etc.