zox
A programming language based on the book Crafting Interpreters - http://craftinginterpreters.com/
Using
Build
git clone https://github.com/raulgrell/zox.git
cd zox
zig build -Drelease-safe=true
 
Run
For usage information, run:
~ Linux ~
./zox run
~ Windows ~
.\zox.exe
 
  - CLI (Execute a script or command from the console)
 
  - Repl-Mode (Allow monkeypatching and method redefinition)
 
  - Embedded Mode (Create a native executable that embeds a project and runs it)
 
Planned Features
  - Single assignment/const values
 
  - Switch statement - evaluate expression, execute first case with equal value
 
  - Builtin-functions - to avoid polluting the language syntax/grammar/stdlib with unusual operations.
 
  - Struct-scope storage - namespacing
 
  - Extern Types - for native storage
 
  - Extern Functions - for native functions
 
  - Const methods - For optimization and invariants
 
  - Embedding API - for easy use within Zig applications.
 
Built in Types
These will be new primitives for the language, implemented in the compiler as extern types, nan-tagged type info
  - Enums/Variants
 
  - Arrays
 
  - Lists [In Progress]
 
  - Maps [In Progress]
 
  - SIMD [Nice To have]
 
Syntax
The idea is to identify fast operations and incentivize their use through syntax sugar.
This can include expressions that are easy to optimize in a single pass through constant propagation/folding, build-time execution etc
  - 
    
Separate method call syntax (faster resolution, namespacing and explicit this)
    fn other(obj, str) { #body }
  class A (do = other) { fn do(self) { #body } }
  var a = A();
  A.do(a);                // Call function A.do
  a:do();                 // Call function A.do, passing a as the implicit first parameter.
  a.do(a, “something”);   // Call field do as a function that takes a as its first parameter
   
  - 
    
Expression function syntax (probably cheap to inline, avoid function call overhead)
    fn five() => 5;
   
Zig Inspired
  - 
    
Error handling
    fn mightFail() try {} // Definition
  try mightFail(); // Callsite
   
  - 
    
Test blocks (keeping tests near code)
    test “addition” {
      assert(5 + 5 == 10);
  }
   
Planned Enhancements
  - Compiled bytecode representation
 
  - Avoid unnecessary stack manipulation (eg OpCode.Negate)
 
  - Specialized opcodes
 
  - Small string optimization
 
  - Single allocation for strings and lists
 
  - Compacting Garbage Collector (A Fast Garbage Compaction Algorithm - H.B.M. Jonkers)
 
  - Dynamic Stack (use indices instead of pointed for internal references)
 
  - Increase number of available constant slots (Load long)
 
  - Coalesce constants
 
  - Improved Global variable lookup
 
  - Class/Method redefinition and propagation
 
  - Cached common immutable values - Empty string, prototypes
 
  - Platform modules