Skip to content

leonardinius/golox

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

65 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

(Go) Lox (Crafting interpreters)

This is an implementation of The Lox Programming Language implemented in Go.

Current status:

  • Feature Complete as passing original test suite, see below.
  • Benchmarks comparable to jlox (java version), see below.

eXtra Features

  • REPL expression output; readline support.
  • block comments.
  • continue, break statements.
  • closures and anynymous functions.
  • native functions: Array, pprint(...) varargs function.
  • profiles: -profile=non-strict (test compliance) and -profile=strict [default] to report unused variables.
  • Static class methods, and class properites (metaclass).

How-To

Use provided make commands

$ make help
Usage: make <target>
 Default
        help                  Display this help
 Build/Run
        all                   ALL, builds the world
        clean                 Clean-up build artifacts
        gen                   Runs all codegen
        test                  Runs all tests
        lint                  Runs all linters
        run                   Runs golox. Use ARGS="" make run to pass arguments

Test Suite

See test/ folder with a copy of original testsuite from https://github.com/munificent/craftinginterpreters/tree/master/test.

runner_test.go:69: Suite golox: Tests=254, Passed=238, Failed=0, Skipped=16, Expectations: 557

Excluded tests (conflicts with eXtra features):

  • test/field/get_on_class.lox.
  • test/field/set_on_class.lox.

Benchmarks

Command used:

go test -v -run=XXX -bench=. -benchtime=30s -timeout=30m ./test/.

The benchmark work as follows:

  • executes bin/golox and jlox from original project.
  • benchmarks reports execution time and becnhmark elapsed time as printed by bechnmark script.

Please find numbers below:

# Formatted output
BenchmarkAll
GO/test/benchmark/equality.lox-8                6 5009233757 ns/op       0.3980 elapsed/op
JAVA/test/benchmark/equality.lox-8              8 4237118536 ns/op       0.7470 elapsed/op
GO/test/benchmark/binary_trees.lox-8            4 9035542448 ns/op       8.914 elapsed/op
JAVA/test/benchmark/binary_trees.lox-8          6 5911415000 ns/op       5.846 elapsed/op
GO/test/benchmark/properties.lox-8              7 4927545500 ns/op       5.334 elapsed/op
JAVA/test/benchmark/properties.lox-8            7 4493170381 ns/op       4.385 elapsed/op
GO/test/benchmark/invocation.lox-8             10 3288547812 ns/op       3.097 elapsed/op
JAVA/test/benchmark/invocation.lox-8           37  867685619 ns/op       0.7800 elapsed/op
GO/test/benchmark/fib.lox-8                     4 8474984490 ns/op       8.397 elapsed/op
JAVA/test/benchmark/fib.lox-8                   4 7828719094 ns/op       7.744 elapsed/op
GO/test/benchmark/trees.lox-8                   2 23599520333 ns/op      21.59 elapsed/op
JAVA/test/benchmark/trees.lox-8                 2 21246922084 ns/op      20.97 elapsed/op
GO/test/benchmark/string_equality.lox-8         4 8742849177 ns/op       4.145 elapsed/op
JAVA/test/benchmark/string_equality.lox-8       7 4765044637 ns/op       2.694 elapsed/op
GO/test/benchmark/instantiation.lox-8          12 3103455396 ns/op       3.037 elapsed/op
JAVA/test/benchmark/instantiation.lox-8        37  879199985 ns/op       0.8210 elapsed/op
GO/test/benchmark/zoo_batch.lox-8               3 10016985805 ns/op      10.02 elapsed/op
JAVA/test/benchmark/zoo_batch.lox-8             3 10068449986 ns/op      10.00 elapsed/op
GO/test/benchmark/method_call.lox-8            22 1432509085 ns/op       1.429 elapsed/op
JAVA/test/benchmark/method_call.lox-8          22 1625271705 ns/op       1.391 elapsed/op
GO/test/benchmark/zoo.lox-8                    10 3097766238 ns/op       3.134 elapsed/op
JAVA/test/benchmark/zoo.lox-8                   9 3355564380 ns/op       2.831 elapsed/op
PASS
ok   github.com/leonardinius/golox/test 1144.323s

Please find benchmark code here.

About

Lox (Crafting interpreters)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors