Skip to content

TomtheCoder2/phoenix

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

73 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

The Phoenix Programming language

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages