ullage
ullage copied to clipboard
A statically-typed compiled language defined by a simple grammar
Ullage
A statically-typed compiled language defined by a simple grammar.
Current Status
It is now possible to write simple programs. The following program computes 9 factorial:
fn fact(n: Number): Number
var acc = 1
var i = 1
while i < n
acc = acc * i
i = i + 1
end
acc
end
print fact(9) # => 362880
You can also mess around with constant strings:
# FizzBuzz
#
# Implementation of the legendary `FizzBuzz` algorithm.
fn fizzbuzz(n: Number): String
(print 'fizzbuzz') if mod(n, 15) == 0 else
(print 'fizz') if mod(n, 3) == 0 else
(print 'buzz') if mod(n, 5) == 0 else
print_num(n)
end
Building and Testing
The main build is performed by cargo
. For running the functional
tests and benchmarks you'll need Python and to cargo install just
. The suggested process is to
use the build.sh
script:
-
$ ./build.sh
will build the compilertarget/release/ullage
. -
$ ./build.sh test
will build the compiler and run the test suite fromspecs/
. -
$ ./build.sh bench
will run the benchmarks fromspec/bench/
.
License
Ullage is open source, under the MIT License.
Features and Progress
- [ ] Custom data structures
- [ ] Pattern matching
- [ ] First-class functions
Lexer
- [x] Recognise words, numbers, comments, operators and white-space
- [x] Position information on each token
- [ ] Interpolated strings
- [x] Expose whitespace to the parser
Parser
- [x] Parse base constructs
- [ ] For loops and iterators
- [ ] Traditional
if
blocks - [x] Keep track of all underlying tokens
- [x] Expose position & span information on syntax nodes
- [ ] Round-trippable/pretty-printable trees
Code Generation / Lowering
- [x] Create LLVM module and lower basic constructs
- [ ] Array indexing
- [x] Arbitrary types for local variables
- [ ] Heap allocated types
- [x] Lowering of
String
type - [ ] User-defined types
- [ ] RC garbage collection (#26)
- [x] Lowering of
- [ ] Library output types (LLVM ir, LLVM bc, object, staticlib, dylib, exe)
- [x] Control of target machine & features
- [x] Optimisation
- [ ] Linker support:
- [x]
clang
- macOS linker default - [ ] gold - GNU ld
- [ ] lld/llvm-link
- [ ] Microsoft LINK
- [x]