18 stable releases
1.5.3 | Jun 29, 2024 |
---|---|
1.5.2 | Jun 28, 2024 |
1.4.0 | Mar 26, 2024 |
1.3.2 | Nov 4, 2023 |
0.1.1 | Aug 9, 2023 |
#237 in Development tools
245KB
5K
SLoC
Phoenix
Programming Language
Based on the book Crafting Interpreters and this repo
Features
- Dynamic typing
- Automatic memory management
- Garbage collection
- First-class functions
- Closures
- Lexical scoping
- Tail recursion
- Pattern matching
- Algebraic data types
- Inheritance
- API for native functions written in Rust
Usage
- To start the program run:
cargo run -- --help
- To install phoenix run:
cargo install --path .
Then you can run phoenix with:
phoenix --help
Examples
Binary Search
fun binary_search(list, item) {
var low = 0;
var high = list.len() - 1;
while low <= high {
var mid = (low + high) / 2;
var guess = list[mid];
printf("low: {}, high: {}, mid: {}, guess: {}", low, high, mid, guess);
if guess == item {
return mid;
} else if guess > item {
high = mid - 1;
} else {
low = mid + 1;
}
}
return nil;
}
var elements = [1, 3, 5, 7, 9];
var search = 7;
printf("element {} is at index: {}", search, binary_search([1, 3, 5, 7, 9], 7));
TODO
- Add more examples
- Add more tests
- Add more documentation
- Add more error handling
- Fix lists (not working: access of lists in classes eg:
c.l[0] = 1;
) - Fix REPL
- Fix modules (not working: classes)
- Implement
[+-*/]=
,i++
andi--
- Better "api" for native functions
- Add LLVM support
Dependencies
~5–17MB
~172K SLoC