I've created an expression evaluation package and wanted to compare it performance against other similar project. So I created this repository with benchmarks for various packages.
Benchmarks are run with the following specs:
goos: darwin
goarch: arm64
cpu: Apple M2
Benchmarks:
Benchmark_expr-8 342251774 70.27 ns/op
Benchmark_celgo-8 263402224 91.27 ns/op
Benchmark_goja-8 164888170 146.2 ns/op
Benchmark_govaluate-8 157343320 152.9 ns/op
Benchmark_otto-8 63185932 380.1 ns/op
Benchmark_gval-8 58023624 412.9 ns/op
Benchmark_evalfilter-8 24184514 990.6 ns/op
Benchmark_bexpr-8 18741454 1276 ns/op
Benchmark_starlark-8 9002794 2653 ns/op
And additional benchmarks for some specific cases.
Starts with:
Benchmark_expr_startswith-8 192129724 124.9 ns/op
Benchmark_celgo_startswith-8 178077362 134.8 ns/op
Custom function call:
Benchmark_expr_func-8 260001452 92.33 ns/op
Benchmark_celgo_func-8 217867923 110.2 ns/op
Map predicate:
Benchmark_expr_map-8 5089671 4695 ns/op
Benchmark_celgo_map-8 982980 24421 ns/op
You can clone repo and run benchmarks yourself.
go test -bench=. -benchtime=20s