1# jrsonnet23## What is it45[Jsonnet](https://jsonnet.org/) is a json templating language67This crate implements both jsonnet library, and alternative jsonnet executable89## Why1011There is already 3 implementations of this standard: in [C++](https://github.com/google/jsonnet), in [Go](https://github.com/google/go-jsonnet/) and in [Scala](https://github.com/databricks/sjsonnet)1213It is fun to write one in Rust :D1415## Spec support1617- Can pass all of original `examples` tests18- Can pass all of original `test_suite` tests, expect those, which checks golden output for stacktraces (vanilla-like stacktraces are implemented, but look is not 100% identical): 1920## Bindings2122Jrsonnet implements standard `libjsonnet.so` shared library, and should work as drop-in replacement for it2324WASM bindings are also available, Java bindings (Both JNI and WASM to .class compiled) are in progress2526See `./bindings/`2728## Benchmark2930This is fastest implementation of jsonnet, according to both official benchmarks31and mine cluster configuration templating speed3233Official benchmark report are available [in this gist](https://gist.github.com/CertainLach/5770d7ad4836066f8e0bd91e823e451b), and updated sometimes. Here it tested against golang, C++, and scala impl. As you can see, it is a lot faster3435You can generate this report by calling `make benchmarks`, but it probally won't work in standard setup, you need to link golang jsonnet impl to gojsonnet, and c++ impl to jsonnet.3637TODO: Create docker container for easier benchmarking and/or benchmark in CI3839Also, there is some ideas to improve performance even further, by i.e:4041- Mutating strings/arrays/objects instead of cloning on some operations (I.e concat), it should be possible by checking strong reference count, and mutating if there is only one reference