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

MIT license

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

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++ and i--
  • Better "api" for native functions
  • Add LLVM support

Dependencies

~5–17MB
~172K SLoC