856d1345e4 | ||
---|---|---|
benchmarks | ||
bin | ||
examples | ||
src | ||
tests | ||
.gitignore | ||
LICENSE | ||
README.md | ||
nds.nimble | ||
nim.cfg | ||
perf.sh |
README.md
nondescript
Nondescript started as a nim implementation of clox (see https://craftinginterpreters.com) but has acquired large deviations.
Deviations from lox
-
closures, gc not implemented yet
-
classes will not be implemented
-
Everything is an expression, except variable declarations and break statements
- hence expressions can contain statements, so the stack is tracked inside the compiler, using compiler.stackCount
- uses different local representation than lox inside the compiler
- compiler.addLocal also has a delta argument - check it out if interested
-
1 file = 1 chunk
- function objects are just a pointer to an instruction to jump to
-
constant indexes, local indexes have 2 bytes as arguments - no 256 limit on locals/constants
-
block expressions can be labelled (@label) and the break statement takes a label to break out of
-
set block expression results using :label
-
set the return value of functions using :result
-
lists (example: @[1, 4, 5])
-
tables (example: @{ "hello" = "world"})
-
length operator #
-
ampersand operator to chain binary operators to finished expressions
Examples
See the following folders in the source tree, look for the extension .nds:
- benchmarks/
- examples/
- tests/
Building
Requirements:
- nim (1.6.2 tested)
- c compiler (gcc, glibc tested)
The 4 steps to a REPL:
git clone https://github.com/prod2/nondescript
cd nondescript
nimble build
bin/nds