Go to file
2024-08-25 15:47:06 +02:00
samples implementing scanning on demand (ch16) 2024-08-25 00:42:59 +02:00
src compiling expressions (ch17) 2024-08-25 15:37:01 +02:00
.gitignore creating chunk interface (ch14) 2024-08-24 15:11:10 +02:00
.justfile creating chunk interface (ch14) 2024-08-24 15:11:10 +02:00
build.zig creating chunk interface (ch14) 2024-08-24 15:11:10 +02:00
build.zig.zon creating chunk interface (ch14) 2024-08-24 15:11:10 +02:00
README.md Renaming README 2024-08-25 15:47:06 +02:00

zlox, a clox rewrite in Zig.

While reading Crafting Interpreters, after having rewrote the interpreter part in Rust (see rs-lox), I'm now attempting to write the bytecode compiler in Zig.

Progression

  • 14 - Chunks of Bytecode
  • 15 - A Virtual Machine
  • 16 - Scanning on Demand
  • 17 - Compiling Expressions
  • 18 - Types of Values
  • 19 - Strings
  • 20 - Hash Tables
  • 21 - Global Variables
  • 22 - Local Variables
  • 23 - Jumping Back and Forth
  • 24 - Calls and Functions
  • 25 - Closures
  • 26 - Garbage Collection
  • 27 - Classes and Instances
  • 28 - Method and Initializers
  • 29 - Superclasses
  • 30 - Optimization

Build & run

There is a justfile to help building & running:

$ just build
$ ls -l zig-out/bin/zlox
-rwxr-xr-x 1 mycroft mycroft 2823296 Aug 25 15:36 zig-out/bin/zlox

$ just run
zig build run
> 2*3 + 3*4
== code ==
0000    1      OP_CONSTANT    0 '2'
0002    |      OP_CONSTANT    1 '3'
0004    |      OP_MULTIPLY
0005    |      OP_CONSTANT    2 '3'
0007    |      OP_CONSTANT    3 '4'
0009    |      OP_MULTIPLY
000a    |           OP_ADD
== end of code ==

0000    1      OP_CONSTANT    0 '2'
                                [ 2 ]
0002    |      OP_CONSTANT    1 '3'
                                [ 2 ][ 3 ]
0004    |      OP_MULTIPLY
                                [ 6 ]
0005    |      OP_CONSTANT    2 '3'
                                [ 6 ][ 3 ]
0007    |      OP_CONSTANT    3 '4'
                                [ 6 ][ 3 ][ 4 ]
0009    |      OP_MULTIPLY
                                [ 6 ][ 12 ]
000a    |           OP_ADD
                                [ 18 ]
000b    2        OP_RETURN
18
>