1# Benchmarks23There are multiple implementations of jsonnet implemented in different languages: Rust (this repo), [Go](https://github.com/google/go-jsonnet/), [Scala](https://github.com/databricks/sjsonnet), [C++](https://github.com/google/jsonnet), [Haskell](https://github.com/moleike/haskell-jsonnet).45For simplicity, I will call these implementations by the language of their implementation.67Unfortunately, I haven't managed to measure performance of Haskell implementation, because I wasn't able to build it, and there is no binaries published anywhere, so this implementation is omitted from the following benchmarks89<details>10<summary>Tested versions</summary>1112Go: Jsonnet commandline interpreter (Go implementation) v0.20.01314```15Jsonnet commandline interpreter (Go implementation) v0.20.01617jsonnet {<option>} <filename>1819Available options:20 -h / --help This message21 -e / --exec Treat filename as code22 -J / --jpath <dir> Specify an additional library search dir23 (right-most wins)24 -o / --output-file <file> Write to the output file rather than stdout25 -m / --multi <dir> Write multiple files to the directory, list files26 on stdout27 -c / --create-output-dirs Automatically creates all parent directories for28 files29 -y / --yaml-stream Write output as a YAML stream of JSON documents30 -S / --string Expect a string, manifest as plain text31 -s / --max-stack <n> Number of allowed stack frames32 -t / --max-trace <n> Max length of stack trace before cropping33 --version Print version3435Available options for specifying values of 'external' variables:36 Provide the value as a string:37 -V / --ext-str <var>[=<val>] If <val> is omitted, get from environment38 var <var>39 --ext-str-file <var>=<file> Read the string from the file40 Provide a value as Jsonnet code:41 --ext-code <var>[=<code>] If <code> is omitted, get from environment42 var <var>43 --ext-code-file <var>=<file> Read the code from the file4445Available options for specifying values of 'top-level arguments':46 Provide the value as a string:47 -A / --tla-str <var>[=<val>] If <val> is omitted, get from environment48 var <var>49 --tla-str-file <var>=<file> Read the string from the file50 Provide a value as Jsonnet code:51 --tla-code <var>[=<code>] If <code> is omitted, get from environment52 var <var>53 --tla-code-file <var>=<file> Read the code from the file5455Environment variables:56 JSONNET_PATH is a colon (semicolon on Windows) separated list of directories57 added in reverse order before the paths specified by --jpath (i.e. left-most58 wins). E.g. these are equivalent:59 JSONNET_PATH=a:b jsonnet -J c -J d60 JSONNET_PATH=d:c:a:b jsonnet61 jsonnet -J b -J a -J c -J d6263In all cases:64 <filename> can be - (stdin)65 Multichar options are expanded e.g. -abc becomes -a -b -c.66 The -- option suppresses option processing for subsequent arguments.67 Note that since filenames and jsonnet programs can begin with -, it is68 advised to use -- if the argument is unknown, e.g. jsonnet -- "$FILENAME".69```7071C++: Jsonnet commandline interpreter v0.20.07273```74Jsonnet commandline interpreter v0.20.07576jsonnet {<option>} <filename>7778Available options:79 -h / --help This message80 -e / --exec Treat filename as code81 -J / --jpath <dir> Specify an additional library search dir (right-most wins)82 -o / --output-file <file> Write to the output file rather than stdout83 -m / --multi <dir> Write multiple files to the directory, list files on stdout84 -y / --yaml-stream Write output as a YAML stream of JSON documents85 -S / --string Expect a string, manifest as plain text86 -s / --max-stack <n> Number of allowed stack frames87 -t / --max-trace <n> Max length of stack trace before cropping88 --gc-min-objects <n> Do not run garbage collector until this many89 --gc-growth-trigger <n> Run garbage collector after this amount of object growth90 --version Print version91Available options for specifying values of 'external' variables:92Provide the value as a string:93 -V / --ext-str <var>[=<val>] If <val> is omitted, get from environment var <var>94 --ext-str-file <var>=<file> Read the string from the file95Provide a value as Jsonnet code:96 --ext-code <var>[=<code>] If <code> is omitted, get from environment var <var>97 --ext-code-file <var>=<file> Read the code from the file98Available options for specifying values of 'top-level arguments':99Provide the value as a string:100 -A / --tla-str <var>[=<val>] If <val> is omitted, get from environment var <var>101 --tla-str-file <var>=<file> Read the string from the file102Provide a value as Jsonnet code:103 --tla-code <var>[=<code>] If <code> is omitted, get from environment var <var>104 --tla-code-file <var>=<file> Read the code from the file105Environment variables:106JSONNET_PATH is a colon (semicolon on Windows) separated list of directories added107in reverse order before the paths specified by --jpath (i.e. left-most wins)108E.g. JSONNET_PATH=a:b jsonnet -J c -J d is equivalent to:109JSONNET_PATH=d:c:a:b jsonnet110jsonnet -J b -J a -J c -J d111112In all cases:113<filename> can be - (stdin)114Multichar options are expanded e.g. -abc becomes -a -b -c.115The -- option suppresses option processing for subsequent arguments.116Note that since filenames and jsonnet programs can begin with -, it is advised to117use -- if the argument is unknown, e.g. jsonnet -- "$FILENAME".118```119120Scala:121122```123Missing argument: file <str>124Expected Signature: Sjsonnet 0.4.10125usage: sjsonnet [sjsonnet-options] script-file126 -i --interactive Run Mill in interactive mode, suitable for opening REPLs and127 taking user input128 -J --jpath <str> Specify an additional library search dir (right-most wins)129 -o --output-file <str> Write to the output file rather than stdout130 -m --multi <str> Write multiple files to the directory, list files on stdout131 -c --create-output-dirs Automatically creates all parent directories for files132 -y --yaml-stream Write output as a YAML stream of JSON documents133 -S --string Expect a string, manifest as plain text134 -V --ext-str <str> <var>[=<val>] Provide 'external' variable as string. 'If135 <val> is omitted, get from environment var <var>136 --ext-str-file <str> <var>=<file> Provide 'external' variable as string from the137 file138 -V --ext-code <str> <var>[=<code>] Provide 'external' variable as Jsonnet code.139 If <code> is omitted, get from environment var <var>140 --ext-code-file <str> <var>=<file> Provide 'external' variable as Jsonnet code141 from the file142 -A --tla-str <str> <var>[=<val>] Provide top-level arguments as string. 'If143 <val> is omitted, get from environment var <var>144 --tla-str-file <str> <var>=<file> Provide top-level arguments variable as string145 from the file146 -V --tla-code <str> <var>[=<val>] Provide top-level arguments as Jsonnet code.147 'If <val> is omitted, get from environment var <var>148 --tla-code-file <str> <var>=<file> Provide top-level arguments variable as Jsonnet149 code from the file150 -n --indent <int> How much to indent your output JSON151 -p --preserve-order Preserves order of keys in the resulting JSON152 --strict Enforce some additional syntax limitations153 --yaml-out Write output as a YAML document154 file <str> The jsonnet file you wish to evaluate155 --yaml-debug Generate source line comments in the output YAML doc to make156 it easier to figure out where values come from.157 --no-static-errors Turn static errors into warnings158 --fatal-warnings Fail if any warnings were emitted159 -e --exec Evaluate the given string as Jsonnet rather than treating it160 as a file name161 --no-duplicate-keys-in-comprehension Raise an error if an object comprehension contains duplicate162 keys163 --strict-import-syntax Raise an error if import expressions are used without proper164 parentheses, e.g. import "foo".bar rather than (import165 "foo").bar166 --strict-inherited-assertions Properly handle assertions defined in a Jsonnet dictionary167 that is extended more than once168169170```171172Rust (alternative):173174```175Usage: rsjsonnet [OPTIONS] <filename>176177Arguments:178 <filename> 179180Options:181 -e, --exec Treat filename as code182 -J, --jpath <dir> Specify an additional library search dir (right-most wins)183 -o, --output-file <file> Write to the output file rather than stdout184 -m, --multi <dir> Write multiple files to the directory, list files on stdout185 -y, --yaml-stream Write output as a YAML stream of JSON documents186 -S, --string Expect a string, manifest as plain text187 -s, --max-stack <n> Number of allowed stack frames188 -t, --max-trace <n> Max length of stack trace before cropping189 -V, --ext-str <var=[val]> 190 --ext-str-file <var=file> 191 --ext-code <var[=code]> 192 --ext-code-file <var=file> 193 -A, --tla-str <var[=val]> 194 --tla-str-file <var=file> 195 --tla-code <var[=code]> 196 --tla-code-file <var=file> 197 -h, --help Print help198199```200201</details>202203## Real world204205### Graalvm CI206207> Note: No results for C++, takes longer than a hour208209<details>210<summary>Source</summary>211212```jsonnet213# Common214local common = import 'common.jsonnet';215local graal_common = import 'graal-common.json';216217# Compiler218local compiler = import 'compiler/ci/ci.jsonnet';219220# GraalWasm221local wasm = import 'wasm/ci/ci.jsonnet';222223# Espresso224local espresso = import 'espresso/ci/ci.jsonnet';225226# Regex227local regex = import 'regex/ci/ci.jsonnet';228229# SDK230local sdk = import 'sdk/ci/ci.jsonnet';231232# SubstrateVM233local substratevm = import 'substratevm/ci/ci.jsonnet';234235# Sulong236local sulong = import 'sulong/ci/ci.jsonnet';237238# Tools239local tools = import 'tools/ci/ci.jsonnet';240241# Truffle242local truffle = import 'truffle/ci/ci.jsonnet';243244# JavaDoc245local javadoc = import "ci_includes/publish-javadoc.jsonnet";246247# VM248local vm = import 'vm/ci/ci_includes/vm.jsonnet';249250local verify_ci = (import 'ci-check.libsonnet').verify_ci;251252{253 # Ensure that entries in common.jsonnet can be resolved.254 _checkCommon: (import 'common.jsonnet'),255 ci_resources:: (import 'ci-resources.libsonnet'),256 overlay: graal_common.ci.overlay,257 specVersion: "3",258 builds: [common.add_excludes_guard(b) for b in (259 compiler.builds +260 wasm.builds +261 espresso.builds +262 regex.builds +263 sdk.builds +264 substratevm.builds +265 sulong.builds +266 tools.builds +267 truffle.builds +268 javadoc.builds +269 vm.builds270 )],271 assert verify_ci(self.builds),272 // verify that the run-spec demo works273 assert (import "ci/ci_common/run-spec-demo.jsonnet").check(),274}275276```277</details>278279| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |280|:---|---:|---:|---:|---:|281| `Rust` | 93.6 ± 0.6 | 92.5 | 94.7 | 1.00 |282| `Rust (alternative, rsjsonnet)` | 263.3 ± 1.8 | 259.0 | 268.4 | 2.81 ± 0.03 |283| `Go` | 1204.6 ± 5.0 | 1196.0 | 1215.4 | 12.87 ± 0.10 |284| `Scala` | 720.0 ± 2.9 | 713.4 | 725.3 | 7.70 ± 0.06 |285286### Kube-prometheus manifests287288<details>289<summary>Source</summary>290291```jsonnet292local kp =293 (import 'kube-prometheus/main.libsonnet') +294 // Uncomment the following imports to enable its patches295 // (import 'kube-prometheus/addons/anti-affinity.libsonnet') +296 // (import 'kube-prometheus/addons/managed-cluster.libsonnet') +297 // (import 'kube-prometheus/addons/node-ports.libsonnet') +298 // (import 'kube-prometheus/addons/static-etcd.libsonnet') +299 // (import 'kube-prometheus/addons/custom-metrics.libsonnet') +300 // (import 'kube-prometheus/addons/external-metrics.libsonnet') +301 // (import 'kube-prometheus/addons/pyrra.libsonnet') +302 {303 values+:: {304 common+: {305 namespace: 'monitoring',306 },307 },308 };309310{ 'setup/0namespace-namespace': kp.kubePrometheus.namespace } +311{312 ['setup/prometheus-operator-' + name]: kp.prometheusOperator[name]313 for name in std.filter((function(name) name != 'serviceMonitor' && name != 'prometheusRule'), std.objectFields(kp.prometheusOperator))314} +315// { 'setup/pyrra-slo-CustomResourceDefinition': kp.pyrra.crd } +316// serviceMonitor and prometheusRule are separated so that they can be created after the CRDs are ready317{ 'prometheus-operator-serviceMonitor': kp.prometheusOperator.serviceMonitor } +318{ 'prometheus-operator-prometheusRule': kp.prometheusOperator.prometheusRule } +319{ 'kube-prometheus-prometheusRule': kp.kubePrometheus.prometheusRule } +320{ ['alertmanager-' + name]: kp.alertmanager[name] for name in std.objectFields(kp.alertmanager) } +321{ ['blackbox-exporter-' + name]: kp.blackboxExporter[name] for name in std.objectFields(kp.blackboxExporter) } +322{ ['grafana-' + name]: kp.grafana[name] for name in std.objectFields(kp.grafana) } +323// { ['pyrra-' + name]: kp.pyrra[name] for name in std.objectFields(kp.pyrra) if name != 'crd' } +324{ ['kube-state-metrics-' + name]: kp.kubeStateMetrics[name] for name in std.objectFields(kp.kubeStateMetrics) } +325{ ['kubernetes-' + name]: kp.kubernetesControlPlane[name] for name in std.objectFields(kp.kubernetesControlPlane) }326{ ['node-exporter-' + name]: kp.nodeExporter[name] for name in std.objectFields(kp.nodeExporter) } +327{ ['prometheus-' + name]: kp.prometheus[name] for name in std.objectFields(kp.prometheus) } +328{ ['prometheus-adapter-' + name]: kp.prometheusAdapter[name] for name in std.objectFields(kp.prometheusAdapter) }329330```331</details>332333| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |334|:---|---:|---:|---:|---:|335| `Rust` | 129.4 ± 1.4 | 127.7 | 132.8 | 1.00 |336| `Rust (alternative, rsjsonnet)` | 197.0 ± 1.9 | 193.6 | 200.7 | 1.52 ± 0.02 |337| `Go` | 2127.7 ± 13.8 | 2105.4 | 2151.5 | 16.44 ± 0.21 |338| `Scala` | 947.9 ± 11.1 | 926.1 | 967.9 | 7.33 ± 0.12 |339| `C++` | 87633.8 ± 569.9 | 86464.2 | 89118.8 | 677.29 ± 8.72 |340341## Benchmarks from C++ jsonnet (/perf_tests)342343### Large string join344345<details>346<summary>Source</summary>347348```jsonnet349{350 text: std.join(',', std.makeArray(76846, function(_) 'x')),351}352353```354</details>355356| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |357|:---|---:|---:|---:|---:|358| `Rust` | 5.6 ± 0.1 | 5.4 | 6.2 | 1.00 |359| `Rust (alternative, rsjsonnet)` | 45.3 ± 0.9 | 43.5 | 47.8 | 8.04 ± 0.25 |360| `Go` | 98.2 ± 1.6 | 95.0 | 100.8 | 17.45 ± 0.50 |361| `Scala` | 331.1 ± 5.8 | 322.3 | 343.7 | 58.79 ± 1.73 |362| `C++` | 76.5 ± 0.7 | 75.4 | 78.0 | 13.59 ± 0.34 |363364### Large string template365366> Note: No results for Go, fails with os stack size exhausion367368| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |369|:---|---:|---:|---:|---:|370| `Rust` | 6.7 ± 0.1 | 6.4 | 7.1 | 1.00 |371| `Rust (alternative, rsjsonnet)` | 7.1 ± 0.2 | 6.8 | 7.6 | 1.05 ± 0.03 |372| `Scala` | 392.7 ± 2.7 | 388.2 | 399.8 | 58.29 ± 1.19 |373| `C++` | 14376.2 ± 35.8 | 14317.5 | 14448.6 | 2133.86 ± 41.53 |374375### Realistic 1376377<details>378<summary>Source</summary>379380```jsonnet381local utils = {382 Func3(aaaaaaa, bbbbbbb, cccc)::383 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/%s/XXXXX/%s/XXXXXXXXXXXXXXX/%s'384 % [aaaaaaa, bbbbbbb, cccc],385};386387388local long_list = [389 '001xxxxxxxxxxxxxxx-xxx',390 '002xxxxxxxxxxxxxxxxxx-xxx',391 '003xxxxxxxxxxxxxxxx-xxxxxxx',392 '004xxxxxx-xxxxxx',393 '005xxxx-xxx-xxxx',394 '006xxx-xxx-xxxxxx',395 '007xxx-xxx-xxxx-xxxx',396 '008xxx-xxx-xxxx-xxxx-xxxxxxx',397 '009xxx-xxx-xxxxx-xxxx-xxxxxxx-xxxxxx',398 '010xxx-xxx-xxxx-xxxxxxx-xxxxxx-xxxxxxx',399 '011xxx-xxx-xxxxx-xxxxxxxx-xxxxxxx',400 '012xxx-xxx-xxxx-xxxxxxxx-xxxxxxx-xxxxxx',401 '013xxx-xxx-xxxx-xxxxxxxxxx',402 '014xxx-xxx-xxxxx-xxxxxx-xx',403 '015xxx-xxx-xxxxxx-xxxxxxx',404 '016xxx-xxx-xxxx-xxxxxxxx-xxxxx',405 '017xxx-xxx-xxxx-xxxxxxxxxxxxxxx',406 '018xxx-xxx-xxxx-xxxxxxxx-xxxxxxx-xxxxxxx',407 '019xxx-xxx-xxxx-xxxxxxxx-xx',408 '020xxx-xxx-xxxx-xxxxxxxxxxxxxxxx',409 '021xxx-xxx-xxxx-xxxxxxxx-xxxxxxxxxxxx-xxx',410 '022xxx-xxxx-xxxx-xxxx-xxxxxxx',411 '023xxx-xxxx-xxxx-xxx-xxxxxxx-xxxxxx-xxxxxxx',412 '024xxx-xxx-xxxx-xxx-xxxx-xxxx-xxx-xxxxxxxxx',413 '025xxx-xxxx-xxxx-xxxxxxxxx',414 '026xxx-xxx-xxxx-xxx-xxxxxxx',415 '027xxx-xxx-xxxx-xxx-xxxxxxx',416 '028xxx-xxx-xxxx-xxxxxxxxxx',417 '029xxx-xxx-xxxx-xxxxxx',418 '030xxx-xxx-xxxx-xxx-xxxxxxx',419 '031xxx-xxx-xxxx-xxx-xxxxxxxx',420 '032xxx-xxx-xxxxx-xxxxxxxxxxxx-xxxxxxx',421 '033xxx-xxx-xxxx-xxx-xxxx-xxxx',422 '034xxx-xxx-xxxx-xxx-xxxxxxxx-xxxxxxxx',423 '035xxx-xxx-xxxx-xxxxxxx',424 '036xxx-xxx-xxxx-xxxxxxxx-xxxxxxx',425 '037xxx-xxx-xxxx-xxxxxx',426 '038xxx-xxx-xxxx-xxxxxxxxxx',427 '039xxxx-xxx-xxxx-xxxxxx-xxxxxx-xxxxxxx',428 '040xxx-xxx-xxxx-xxxxxx-xxxxxxx',429 '041xxxx-xxx-xxxx-xxxxxx-xx',430 '042xxx-xxx-xxxx-xxxxxxxxxxx',431 '043xxx-xxx-xxxx-xxxxxxxxxxx-xxxxxxx',432 '044xxx-xxx-xxxx-xxxxxxx-xxx-xxxxxx',433 '045xxx-xxx-xxxx-xxxxxx-xxx-xxxxxx-xxx',434 '046xxx-xxx-xxxx-xxxxxx-xxx-xxxxxx-xxx',435 '047xxx-xxx-xxxx-xxxxxx-xxx-xxxxxx-xxxxxxx',436 '048xxx-xxx-xxxx-xxxxxx-xxx-xxxxxx-xxxxxxxx',437 '049xxx-xxx-xxxx-xxxxxx-xxx-xxxxxx-xxxxxxxxx',438 '050xxx-xxx-xxxxx-xxxxx-xxxxxxx',439 '051xxx-xxx-xxxx-xxxxx-xxxxxxxx-xxxxxx',440 '052xxx-xxx-xxxx-xxxxx-xx',441 '053xxx-xxx-xxxx-xxxx-xxxxxxx-xxx-xxxxxxx',442 '054xxx-xxx-xxxx-xxxx-xxxxxxx-xxx-xxxxxx',443 '055xxx-xxx-xxxx-xxx',444 '056xxx-xxx-xxxx-xxxxxxx-xxxxxxx',445 '057xxx-xxx-xxxx-xxxxxxx-xxx-xxxxxxx',446 '058xxx-xxx-xxxx-xxxxxxxxx-xxxxxx-xxxxxxx',447 '059xxx-xxx-xxxx-xx-xxxxxxxxxxx-xxxxx',448 '060xxx-xxx-xxxx-xxxxxxxxxxxxxx-xxxxxxx',449 '061xxx-xxx-xxxx-xxxxxxxx-xxxxxxx',450 '062xxx-xxx-xxxx-xxxxxxxxxxxxx-xxxxxxx',451 '063xxx-xxx-xxxx-xxxxxx-xxxxxxx',452 '064xxx-xxx-xxxxx-xxxxxx-xxxxxxx',453 '065xxx-xxx-xxxx-xxxxx-xxxxx',454 '066xxx-xxx-xxxx-xxxxx-xxxx',455 '067xxx-xxx-xxxx-xxxxxxxxxxxxxxxxx',456 '068xxx-xxx-xxxx-xxxxxxxx-xxxxx-xxx',457 '069xxx-xxx-xxxx-xxxxxxxx-xx-xxx-xxxxxxxx',458 '070xxx-xxx-xxxx-xxxxxxxx-xxxxxx-xxxxxxx',459 '071xxx-xxx-xxxx-xxxxxxxxxx',460 '072xxx-xxxx-xxxx-xxxxxxxxxxxxxxxx',461 '073xxx-xxx-xxxx-xxxxxx-xxxxxx-xxxxxxx',462 '074xxx-xxx-xxxx-xxxxxxx-xxxxxxxxxxxxx',463 '075xxx-xxx-xxxx-xxxxxxx-xxxxxxxxxxxxx-xxxxxxxxx',464 '076xxx-xxx-xxxx-xxxxxxxxxxxxx-xxxxxxx',465 '077xxx-xxx-xxxx-xxxxxxxxx-xxxxxxx-x2',466 '078xxx-xxx-xxxx-xxx',467 '079xxx-xxx-xxxx-xxxxxxxxxxxx',468 '080xxx-xxx-xxxx-xxxxxxxxx-xxxxxxxx',469 '081xxx-xxx-xxxx-xxxxxxxx-xxxxxxxxx',470 '082xxx-xxx-xxxx-xxxxxxxxx',471 '083xxx-xxx-xxxx-xxxxxxx',472 '084xxx-xxx-xxxx-xxxxxxx-xxxxxx',473 '085xxxx-xxx-xxxxxxx-xxxxx-xxxx',474 '086xxx-xxx-xxxxxxxx-xxxx-xxxxxxxxxx',475 '087xxx-xxx-xxxxxxx-xxxxxx-xxxxxxx',476 '088xxx-xxx-xxxxxxx-xxxxxxxx',477 '089xxx-xxx-xxxxxxxx-xxxxxxx',478 '090xxx-xxx-xxxxxxxx-xxxxxxx-xxxxxx',479 '091xxx-xxxx-xxxxxxxxxx',480 '092xxx-xxx-xxxxxx-xx',481 '093xxx-xxx-xxxxxxx',482 '094xxx-xxx-xxxxxxx-xxxxx',483 '095xxx-xxx-xxxxxxxxxx',484 '096xxx-xxx-xxxxxxxxxxxxxxx',485 '098xxx-xxx-xxxxxxxxxxxxxxxxx',486 '098xxx-xxx-xxxxxxxx-xxxxxxx-xxxxxxx',487 '099xxx-xxx-xxxxxxxx-xx',488 '100xxx-xxx-xxxx-xxxxxxxxxxx-xxxxxxx',489 '101xxx-xxxx-xxxxxxxxxxxxxxxx',490 '102xxx-xxx-xxxxxxxxxxxxxxxxxx',491 '103xxx-xxx-xxxxxxxx-xxxxxxxxxxxx-xxx',492 '104xxx-xxx-xxxx-xxxxxxx',493 '105xxx-xxx-xxx-xxxxxxx-xxxxxx-xxxxxxx',494 '106xxx-xxx-xxx-xxxx-xxxx-xxx-xxxxxxxxx',495 '107xxx-xxx-xxxxxxxxx',496 '108xxx-xxx-xxx-xxxxxxx',497 '109xxx-xxx-xxx-xxxxxxx',498 '110xxx-xxxx-xxxxx',499 '111xxx-xxx-xxx-xxxx-xxxx',500 '112xxx-xxx-xxx-xxxxxxx',501 '113xxx-xxx-xxx-xxxxxxx',502 '114xxx-xxx-xxxxxxxxxxxx-xxxxxxx',503 '115xxx-xxx-xxx-xxxx-xxxx',504 '116xxx-xxx-xxx-xxxxxxxx-xxxxxxxx',505 '117xxx-xxx-xxxxxxx',506 '118xxx-xxx-xxxxxxxx-xxxxxxx',507 '119xxx-xxx-xxxxxx',508 '120xxxx-xxx-xxxxxxxxxx',509 '121xxx-xxx-xxxxxx-xxxxxx-xxxxxxx',510 '122xxx-xxx-xxxxxx-xxxxxxx',511 '123xxx-xxx-xxxxxx-xx',512 '124xxxx-xxx-xxx-xxxx-xxxxxxx',513 '125xxx-xxx-xxxxxxxxxxx',514 '126xxx-xxx-xxxxxxxxxxx-xxxxxxx',515 '127xxx-xxx-xxxxxx-xxx-xxxxxx',516 '128xxx-xxx-xxxxxxxxxx',517 '129xxx-xxx-xxxxxxxxxx-xxx',518 '130xxx-xxx-xxxxx-xxxxxxx',519 '131xxx-xxx-xxxxxx-xxxxxxxx-xxx',520 '132xxx-xxx-xxxxx-xxxxxxxx-xxxxxx',521 '133xxx-xxx-xxxxx-xx',522 '134xxx-xxx-xxxx-xxxxxxx-xxx-xxxxxxx',523 '135xxx-xxx-xxxx-xxxxxxx-xxx-xxxxxx',524 '136xxx-xxx-xxxxxxxxxxxxxxx',525 '137xxx-xxx-xxx',526 '138xxx-xxx-xxxxxxx-xxxxxxx',527 '139xxx-xxx-xxxxxxx-xxx-xxxxxxx',528 '140xxx-xxx-xxxxxxxxx-xxxxxx-xxxxxxx',529 '141xxx-xxx-xxxxxxxxxx-xxxx-xxxxxxx',530 '142xxx-xxx-xx-xxxxxxxxxx-xxxxx',531 '143xxx-xxx-xxxxxxxxxxxxxx-xxxxxxx',532 '144xxx-xxx-xxxxxxxxxxxxxxxxx',533 '145xxx-xxx-xxxxxxxx-xxxxxxx',534 '146xxx-xxx-xxxxxxxxxxxxx-xxxxxxx',535 '147xxx-xxx-xxxxxxx-xxxxxxx',536 '148xxx-xxx-xxxxxx-xxxxxxx',537 '149xxx-xxx-xxxxx-xxxxx',538 '150xxx-xxx-xxxxx-xxxx',539 '151xxx-xxx-xxxxxxxxxxxxxxxxx',540 '152xxx-xxx-xxxxxxxxxxxxxxxxxxx',541 '153xxx-xxx-xxxxxxxxx-xxxxx-xxx',542 '154xxx-xxx-xxxxxxxx-xxxxx-xxxx-xxxx',543 '155xxx-xxx-xxxxxxxx-xxxxxxxxxxxx-xxxx',544 '156xxx-xxx-xxxxxxxx-xx-xxx-xxxxxxxx',545 '157xxx-xxx-xxxxxxxx-xxxxxx-xxxxxxx',546 '158xxx-xxx-xxxxxxxxxx',547 '159xxx-xxx-xxxx-xxxxxx',548 '160xxx-xxx-xxxxxxxxxx',549 '161xxx-xxx-xxxxxxxxxxxxx',550 '162xxx-xxx-xxxxxxxxxxxxxxxx',551 '163xxx-xxx-xxxxx-xxxxxx-xxxxxxx',552 '164xxx-xxx-xxxxxxx-xxxxxxxxxxxxx',553 '165xxx-xxx-xxxxxxxxxxxxxx-xxxxxxx',554 '166xxx-xxx-xxxxxxxxx-xxxxxxx-x2',555 '167xxx-xxx-xxx',556 '168xxx-xxx-xxxxxxxxxxxx',557 '169xxx-xxx-xxxxxxxxx-xxxxxxxx',558 '170xxx-xxx-xxxxxxxxx-xxx-xxxxxxx',559 '171xxx-xxx-xxxxxxxxx',560 '172xxx-xxxx-xxxxxxxxx',561 '173xxx-xxx',562 '174xxx-xxxxxx-xxxxxxx',563 '175xxx-xxxxxx-xxxxxx-xxxx',564 '176xxx-xxxxxx-xxxxx',565 '177xxx-xxxxx-xxxxxxxx',566 '178xxx-xxxxxx',567 '179xxx-xxxxxxx-xxxx',568 '180xxx-xxxxxxx-xxxx-xxxx',569 '181xxx-xxxxxxx-xxxx-xxxxxxx',570 '182xxx-xxxxxxx-xxxx-xxxxxxxxxxxxxxx',571 '183xxx-xxxxxxxx-xxxx-xxxxx',572 '184xxx-xxxxxxx-xxxx-xxxxxxx',573 '185xxx-xxxxxxx-xxxx-xxxxxxxx-xxxxxxx',574 '186xxx-xxxxxxx-xxxx-xxx',575 '187xxx-xxxxxxx-xxxx-xxxxxxx-xxx-xxxxxxx',576 '188xxx-xxxxxxx-xxxx-xxxxxxxxxxxxxx-xxxxxxx',577 '189xxx-xxxxxxxx-xxxx-xxxxxxxxxxxxxxxxx',578 '190xxx-xxxxxxx-xxxx-xxxxx-xxxxxx-xxxxxxx',579 '191xxx-xxxxxxx-xxxxxxxxxx',580 '192xxx-xxxxxxx-xxxxxxx',581 '193xxx-xxxxxxx-xxxxxxxxxxxxxxx',582 '194xxx-xxxxxxx-xxxxx',583 '195xxx-xxxxxxx-xxxxxxx',584 '196xxx-xxxxxxx-xxxxxxxx-xxxxxxx',585 '197xxx-xxxxxxx-xxx',586 '198xxx-xxxxxxx-xxxxxxx-xxx-xxxxxxx',587 '199xxx-xxxxxxx-xxxxxxxxxxxxxx-xxxxxxx',588 '200xxx-xxxxxxxx-xxxxxxxxxxxxxxxxx',589 '201xxx-xxxxxxx-xxxxx-xxxxxx-xxxxxxx',590 '202xxx-xxx',591 '203xxx-xxx-xxxxxx',592 '204xxxxxxxxx-xxx',593 '205xxxxxxxxxxx-xxx',594 '206xxxxxxxxx-xxxxxxx',595 '207xxxx-xxxxxx-xxxxxxxxxxx-xxxxx1',596 '208xxxx-xxxxxxxx-xxxxxxxx-xxxxx1',597 '209xxxx-xxxxxxx-xxxxxxx-xxxxx1',598 '209xxxx-xxxxxxx-xxxxxxx-xxxxx2',599 '210xxxx-xxxx-xxxxxxx-xxxxx1',600 '211xxxx-xxxxx-xxxxxxxx1-xxxxx1',601 '212xxxx-xxxx-xxxxxxxx2-xxxxx1',602 '213xxxx-xxxx-xxxxxxx1-xxxxx1',603 '214xxxx-xxxx-xxxxxxx2-xxxxx1',604 '215xxxxxxxxx-xxxxxx',605 '216xxxxxxxxx-xxxxxxx',606 '217xxxxxxxxx-xxxx',607];608609{610 'yyyyyyyyy': {611 local Func3(z, n) = utils.Func3('yyyyyyyyy', z, n),612613 global: {614 [n]: {615 members: [616 Func3(z, '%s-gggg-%s-%s' % [n, z, suffix]),617 for z in ['ooooooo-a', 'ooooooo-b', 'ooooooo-c',618 'ooooooo-a', 'ooooooo-b', 'ooooooo-c']619 for suffix in ['a', 'b', 'c']620 ],621 }622 for n in long_list623 },624 },625}626627```628</details>629630| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |631|:---|---:|---:|---:|---:|632| `Rust` | 12.6 ± 0.1 | 12.3 | 12.9 | 1.00 |633| `Rust (alternative, rsjsonnet)` | 49.7 ± 1.0 | 47.3 | 53.0 | 3.96 ± 0.09 |634| `Go` | 6858.1 ± 34.9 | 6815.9 | 6951.8 | 546.32 ± 6.87 |635| `Scala` | 382.3 ± 3.9 | 371.7 | 387.1 | 30.46 ± 0.47 |636| `C++` | 24472.7 ± 155.7 | 24230.3 | 24799.3 | 1949.51 ± 25.63 |637638### Realistic 2639640<details>641<summary>Source</summary>642643```jsonnet644local rfc3339(timestamp) = '1970-01-01T00:00:00Z';645646local name1(a, b, c) =647 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%sBBBBBBB%sCCCCCCCCCCC%s'648 % [a, b, c];649650local name2(x) =651 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX%s' % x;652653local T1 = 'PPPPPPPPPPPPPPPPPPPPPPP';654local T2 = 'QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ';655656local LOCATIONS = [657 'europe-west1-b',658 'europe-west1-c',659 'europe-west1-d',660 'europe-west2-a',661 'europe-west2-b',662 'europe-west2-c',663 'europe-west3-a',664 'europe-west3-b',665 'europe-west3-c',666 'europe-west4-a',667 'europe-west4-b',668 'europe-west4-c',669 'us-central1-a',670 'us-central1-b',671 'us-central1-c',672 'us-central1-f',673 'us-east1-b',674 'us-east1-c',675 'us-east1-d',676 'us-east4-a',677 'us-east4-b',678 'us-east4-c',679 'us-west1-a',680 'us-west1-b',681 'us-west1-c',682];683684685// The return value is a function to allow it to be parameterized.686function(687 timestamp=0,688 x='xxxxxxxxxxxxxxxxxxx',689 prefix='prefix',690 num1=50,691 count=25,692 offset=0,693)694 local rfc_timestamp = rfc3339(timestamp);695696 local func1(i) =697 local location = LOCATIONS[i % std.length(LOCATIONS)];698 [699 local name = '%s-%000d-%000d' % [prefix, i, j];700 {701 field_zz1: rfc_timestamp,702 fie_z2: {703 field_z3: name1(x, location, name),704 field_zzzzzzzzzz4: name2(x),705 field_zzz5: [name],706 field_z6: T1,707 field_z7: location,708 fi_8: '???',709 fiel_z9: '99',710 },711 }712 for j in std.range(0, num1 - 1)713 ];714715 local func2(i) =716 local location = LOCATIONS[i % std.length(LOCATIONS)];717 local all = [718 name1(x, location, '%s-%000d-%000d' % [prefix, i, j])719 for j in std.range(0, num1 - 1)720 ];721 [722 {723 field_yy1: rfc_timestamp,724 field_yyyyy2: 'EEEE',725 field_yyyyy3: {726 field_y4: T2,727 field_yyyyyyy5: p,728 field_yyyyyyy6: q,729 },730 }731 for p in all732 for q in all733 if p != q734 ];735736737 {738 field_x1: '-----',739 field_xxxxxxxxxxxxxxxx2: std.join([], [740 func1(offset * count + i)741 for i in std.range(0, count - 1)742 ]),743 field_xxxxxxxxxxxxxxxxxxxxxx3: std.join([], [744 func2(offset * count + i)745 for i in std.range(0, count - 1)746 ]),747 }748749750```751</details>752753| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |754|:---|---:|---:|---:|---:|755| `Rust` | 259.9 ± 4.4 | 250.9 | 266.7 | 1.00 |756| `Rust (alternative, rsjsonnet)` | 550.2 ± 16.6 | 531.9 | 600.7 | 2.12 ± 0.07 |757| `Go` | 6732.4 ± 51.4 | 6660.2 | 6858.6 | 25.90 ± 0.48 |758| `Scala` | 675.4 ± 10.9 | 667.3 | 720.0 | 2.60 ± 0.06 |759| `C++` | 26414.5 ± 259.9 | 25948.9 | 26934.4 | 101.63 ± 1.99 |760761## Benchmarks from C++ jsonnet (/benchmarks)762763### Tail call764765<details>766<summary>Source</summary>767768```jsonnet769/*770Copyright 2015 Google Inc. All rights reserved.771772Licensed under the Apache License, Version 2.0 (the "License");773you may not use this file except in compliance with the License.774You may obtain a copy of the License at775776 http://www.apache.org/licenses/LICENSE-2.0777778Unless required by applicable law or agreed to in writing, software779distributed under the License is distributed on an "AS IS" BASIS,780WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.781See the License for the specific language governing permissions and782limitations under the License.783*/784785local sum(x) =786 if x == 0 then787 0788 else789 x + sum(x - 1);790sum(300)791792```793</details>794795| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |796|:---|---:|---:|---:|---:|797| `Rust` | 1.8 ± 0.1 | 1.6 | 2.6 | 1.00 |798| `Rust (alternative, rsjsonnet)` | 3.1 ± 0.1 | 2.8 | 3.4 | 1.69 ± 0.12 |799| `Go` | 5.3 ± 0.2 | 4.9 | 5.9 | 2.90 ± 0.20 |800| `Scala` | 287.4 ± 1.2 | 285.4 | 288.9 | 156.55 ± 9.92 |801| `C++` | 32.1 ± 0.3 | 31.6 | 33.0 | 17.49 ± 1.12 |802803### Inheritance recursion804805<details>806<summary>Source</summary>807808```jsonnet809/*810Copyright 2015 Google Inc. All rights reserved.811812Licensed under the Apache License, Version 2.0 (the "License");813you may not use this file except in compliance with the License.814You may obtain a copy of the License at815816 http://www.apache.org/licenses/LICENSE-2.0817818Unless required by applicable law or agreed to in writing, software819distributed under the License is distributed on an "AS IS" BASIS,820WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.821See the License for the specific language governing permissions and822limitations under the License.823*/824825local Fib = {826 n: 1,827 local outer = self,828 r: if self.n <= 1 then 1 else (Fib { n: outer.n - 1 }).r + (Fib { n: outer.n - 2 }).r,829};830831(Fib { n: 25 }).r832833```834</details>835836| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |837|:---|---:|---:|---:|---:|838| `Rust` | 376.1 ± 5.2 | 364.3 | 383.7 | 1.00 |839| `Rust (alternative, rsjsonnet)` | 496.7 ± 13.0 | 470.6 | 506.8 | 1.32 ± 0.04 |840| `Go` | 873.9 ± 7.1 | 859.3 | 888.0 | 2.32 ± 0.04 |841| `Scala` | 420.8 ± 6.3 | 413.9 | 437.1 | 1.12 ± 0.02 |842| `C++` | 2647.5 ± 14.2 | 2630.9 | 2675.6 | 7.04 ± 0.10 |843844### Simple recursive call845846<details>847<summary>Source</summary>848849```jsonnet850/*851Copyright 2015 Google Inc. All rights reserved.852853Licensed under the Apache License, Version 2.0 (the "License");854you may not use this file except in compliance with the License.855You may obtain a copy of the License at856857 http://www.apache.org/licenses/LICENSE-2.0858859Unless required by applicable law or agreed to in writing, software860distributed under the License is distributed on an "AS IS" BASIS,861WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.862See the License for the specific language governing permissions and863limitations under the License.864*/865866local fibonacci(n) =867 if n <= 1 then868 1869 else870 fibonacci(n - 1) + fibonacci(n - 2);871872fibonacci(25)873874```875</details>876877| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |878|:---|---:|---:|---:|---:|879| `Rust` | 81.3 ± 0.3 | 80.9 | 82.4 | 1.00 |880| `Rust (alternative, rsjsonnet)` | 202.3 ± 12.0 | 183.1 | 237.6 | 2.49 ± 0.15 |881| `Go` | 349.4 ± 1.7 | 347.2 | 354.2 | 4.30 ± 0.03 |882| `Scala` | 322.5 ± 3.0 | 318.7 | 330.7 | 3.97 ± 0.04 |883| `C++` | 193.5 ± 0.9 | 191.4 | 194.8 | 2.38 ± 0.01 |884885### Foldl string concat886887<details>888<summary>Source</summary>889890```jsonnet891std.foldl(function(e, res) e + res, std.makeArray(20000, function(i) 'aaaaa'), '')892893```894</details>895896| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |897|:---|---:|---:|---:|---:|898| `Rust` | 8.9 ± 0.1 | 8.6 | 9.3 | 1.00 |899| `Rust (alternative, rsjsonnet)` | 303.1 ± 3.8 | 297.6 | 308.1 | 34.06 ± 0.68 |900| `Go` | 50.9 ± 0.8 | 48.3 | 52.2 | 5.72 ± 0.13 |901| `Scala` | 550.6 ± 5.5 | 542.8 | 563.7 | 61.86 ± 1.13 |902| `C++` | 902.6 ± 4.8 | 891.4 | 912.1 | 101.41 ± 1.65 |903904### Array sorts905906> Note: No results for Scala, sjsonnet doesn't support keyF in std.sort: https://github.com/databricks/sjsonnet/issues/204907908<details>909<summary>Source</summary>910911```jsonnet912// A benchmark for builtin sort913914local reverse = std.reverse;915local sort = std.sort;916917true918&& std.assertEqual(std.range(1, 500), sort(std.range(1, 500)))919&& std.assertEqual(std.range(1, 1000), sort(std.range(1, 1000)))920&& std.assertEqual(reverse(std.range(1, 1000)), sort(std.range(1, 1000), keyF=function(x) -x))921&& std.assertEqual(std.range(1, 1000), sort(reverse(std.range(1, 1000))))922&& std.assertEqual(std.makeArray(2000, function(i) std.floor((i + 2) / 2)), sort(std.range(1, 1000) + reverse(std.range(1, 1000))))923924```925</details>926927| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |928|:---|---:|---:|---:|---:|929| `Rust` | 3.2 ± 0.2 | 2.9 | 4.1 | 1.00 |930| `Rust (alternative, rsjsonnet)` | 14.4 ± 0.6 | 13.1 | 16.2 | 4.46 ± 0.28 |931| `Go` | 12.1 ± 0.2 | 11.4 | 12.8 | 3.74 ± 0.20 |932| `C++` | 3637.1 ± 24.9 | 3557.4 | 3664.7 | 1128.64 ± 56.81 |933934### Lazy array935936<details>937<summary>Source</summary>938939```jsonnet940local f2(f) = function(x) f(f(x));941local id(x) = x;942943local slowId = std.makeArray(20, function(i) if i == 0 then id else f2(slowId[i - 1]));944945slowId[15](42)946947```948</details>949950| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |951|:---|---:|---:|---:|---:|952| `Rust` | 54.1 ± 1.1 | 52.3 | 56.3 | 1.30 ± 0.03 |953| `Rust (alternative, rsjsonnet)` | 41.7 ± 0.7 | 39.6 | 43.8 | 1.00 |954| `Go` | 596.5 ± 5.2 | 585.1 | 606.9 | 14.30 ± 0.29 |955| `Scala` | 306.6 ± 1.6 | 303.5 | 310.4 | 7.35 ± 0.14 |956| `C++` | 184.5 ± 1.8 | 182.0 | 187.9 | 4.42 ± 0.09 |957958### Inheritance function recursion959960<details>961<summary>Source</summary>962963```jsonnet964local fibnext = {965 a: super.a + super.b,966 b: super.a,967};968local fib(n) =969 if n == 0 then970 { a: 1, b: 1 }971 else972 fib(n - 1) + fibnext;973974fib(25)975976```977</details>978979| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |980|:---|---:|---:|---:|---:|981| `Rust` | 1.6 ± 0.1 | 1.5 | 2.5 | 1.00 |982| `Rust (alternative, rsjsonnet)` | 2.9 ± 0.1 | 2.7 | 3.7 | 1.78 ± 0.13 |983| `Go` | 2.4 ± 0.1 | 2.1 | 2.9 | 1.48 ± 0.12 |984| `Scala` | 293.2 ± 1.5 | 289.9 | 296.1 | 178.20 ± 12.35 |985| `C++` | 999.1 ± 9.2 | 974.4 | 1010.9 | 607.23 ± 42.34 |986987### String strips988989<details>990<summary>Source</summary>991992```jsonnet993// This string must be longer than max stack frames994local veryLongString = std.join('', std.repeat(['e'], 510));995996std.assertEqual(std.stripChars(veryLongString + 'ok' + veryLongString, 'e'), 'ok') &&997std.assertEqual(std.lstripChars(veryLongString + 'ok', 'e'), 'ok') &&998std.assertEqual(std.rstripChars('ok' + veryLongString, 'e'), 'ok') &&9991000true10011002```1003</details>10041005| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |1006|:---|---:|---:|---:|---:|1007| `Rust` | 8.6 ± 0.2 | 8.4 | 9.5 | 1.00 |1008| `Rust (alternative, rsjsonnet)` | 18.4 ± 0.4 | 17.6 | 20.8 | 2.13 ± 0.06 |1009| `Go` | 11.2 ± 0.2 | 10.4 | 11.9 | 1.29 ± 0.04 |1010| `Scala` | 294.9 ± 2.0 | 292.2 | 301.9 | 34.10 ± 0.65 |1011| `C++` | 37345.3 ± 208.2 | 36567.2 | 37689.0 | 4318.10 ± 80.13 |10121013### Big object10141015<details>1016<summary>Source</summary>10171018```jsonnet1019// Generator source1020local n = 2000;10211022local objLocal(name, body) = 'local ' + name + ' = ' + body + ',';1023local objField(name, body) = name + ': ' + body + ',';10241025local allLocals =1026 std.makeArray(n, function(i) objLocal('l' + i, '1'));10271028local allFields =1029 std.makeArray(n, function(i) objField('f' + i, '2'));10301031local indent = ' ';1032local indentAndSeparate(s) = indent + s + '\n';10331034local objContents = std.map(indentAndSeparate, allLocals + allFields);10351036local objectBody = std.join('', objContents);1037'{\n' + objectBody + '}\n'10381039```1040</details>10411042| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |1043|:---|---:|---:|---:|---:|1044| `Rust` | 2.2 ± 0.1 | 1.9 | 3.0 | 1.00 |1045| `Rust (alternative, rsjsonnet)` | 3.2 ± 0.1 | 2.9 | 3.5 | 1.46 ± 0.10 |1046| `Go` | 4.1 ± 0.1 | 3.7 | 4.6 | 1.85 ± 0.13 |1047| `Scala` | 292.3 ± 2.9 | 289.3 | 304.0 | 132.11 ± 8.64 |1048| `C++` | 28.3 ± 0.3 | 27.7 | 29.1 | 12.80 ± 0.84 |10491050## Benchmarks from Go jsonnet (builtins)10511052### std.base6410531054<details>1055<summary>Source</summary>10561057```jsonnet1058{1059 foo: [1060 std.base64("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sed turpis tincidunt id aliquet risus. Eget mauris pharetra et ultrices neque ornare aenean euismod. Diam quis enim lobortis scelerisque fermentum. Varius duis at consectetur lorem donec massa sapien. Diam sit amet nisl suscipit adipiscing bibendum est ultricies integer. Lectus urna duis convallis convallis tellus. Nibh ipsum consequat nisl vel pretium lectus quam id leo. Feugiat in ante metus dictum at tempor commodo. Velit dignissim sodales ut eu sem integer. Dictum sit amet justo donec. Scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sed turpis tincidunt id aliquet risus. Eget mauris pharetra et ultrices neque ornare aenean euismod. Diam quis enim lobortis scelerisque fermentum. Varius duis at consectetur lorem donec massa sapien. Diam sit amet nisl suscipit adipiscing bibendum est ultricies integer. Lectus urna duis convallis convallis tellus. Nibh ipsum consequat nisl vel pretium lectus quam id leo. Feugiat in ante metus dictum at tempor commodo. Velit dignissim sodales ut eu sem integer. Dictum sit amet justo donec. Scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sed turpis tincidunt id aliquet risus. Eget mauris pharetra et ultrices neque ornare aenean euismod. Diam quis enim lobortis scelerisque fermentum. Varius duis at consectetur lorem donec massa sapien. Diam sit amet nisl suscipit adipiscing bibendum est ultricies integer. Lectus urna duis convallis convallis tellus. Nibh ipsum consequat nisl vel pretium lectus quam id leo. Feugiat in ante metus dictum at tempor commodo. Velit dignissim sodales ut eu sem integer. Dictum sit amet justo donec. Scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sed turpis tincidunt id aliquet risus. Eget mauris pharetra et ultrices neque ornare aenean euismod. Diam quis enim lobortis scelerisque fermentum. Varius duis at consectetur lorem donec massa sapien. Diam sit amet nisl suscipit adipiscing bibendum est ultricies integer. Lectus urna duis convallis convallis tellus. Nibh ipsum consequat nisl vel pretium lectus quam id leo. Feugiat in ante metus dictum at tempor commodo. Velit dignissim sodales ut eu sem integer. Dictum sit amet justo donec. Scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sed turpis tincidunt id aliquet risus. Eget mauris pharetra et ultrices neque ornare aenean euismod. Diam quis enim lobortis scelerisque fermentum. Varius duis at consectetur lorem donec massa sapien. Diam sit amet nisl suscipit adipiscing bibendum est ultricies integer. Lectus urna duis convallis convallis tellus. Nibh ipsum consequat nisl vel pretium lectus quam id leo. Feugiat in ante metus dictum at tempor commodo. Velit dignissim sodales ut eu sem integer. Dictum sit amet justo donec. Scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus. Scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus. Scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus. Scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus. Scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus. Scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus.") for i in std.range(0,100)1061 ],1062}1063```1064</details>10651066| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |1067|:---|---:|---:|---:|---:|1068| `Rust` | 2.7 ± 0.1 | 2.4 | 3.4 | 1.00 |1069| `Rust (alternative, rsjsonnet)` | 2195.9 ± 48.5 | 2098.1 | 2229.6 | 804.07 ± 39.58 |1070| `Go` | 17.0 ± 0.3 | 16.1 | 17.7 | 6.22 ± 0.29 |1071| `Scala` | 313.8 ± 1.2 | 311.3 | 316.1 | 114.91 ± 5.07 |1072| `C++` | 14621.6 ± 110.0 | 14473.9 | 14774.9 | 5354.05 ± 238.94 |10731074### std.base64Decode10751076<details>1077<summary>Source</summary>10781079```jsonnet1080{1081 foo: [1082 std.base64Decode("TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuIFNlZCB0dXJwaXMgdGluY2lkdW50IGlkIGFsaXF1ZXQgcmlzdXMuIEVnZXQgbWF1cmlzIHBoYXJldHJhIGV0IHVsdHJpY2VzIG5lcXVlIG9ybmFyZSBhZW5lYW4gZXVpc21vZC4gRGlhbSBxdWlzIGVuaW0gbG9ib3J0aXMgc2NlbGVyaXNxdWUgZmVybWVudHVtLiBWYXJpdXMgZHVpcyBhdCBjb25zZWN0ZXR1ciBsb3JlbSBkb25lYyBtYXNzYSBzYXBpZW4uIERpYW0gc2l0IGFtZXQgbmlzbCBzdXNjaXBpdCBhZGlwaXNjaW5nIGJpYmVuZHVtIGVzdCB1bHRyaWNpZXMgaW50ZWdlci4gTGVjdHVzIHVybmEgZHVpcyBjb252YWxsaXMgY29udmFsbGlzIHRlbGx1cy4gTmliaCBpcHN1bSBjb25zZXF1YXQgbmlzbCB2ZWwgcHJldGl1bSBsZWN0dXMgcXVhbSBpZCBsZW8uIEZldWdpYXQgaW4gYW50ZSBtZXR1cyBkaWN0dW0gYXQgdGVtcG9yIGNvbW1vZG8uIFZlbGl0IGRpZ25pc3NpbSBzb2RhbGVzIHV0IGV1IHNlbSBpbnRlZ2VyLiBEaWN0dW0gc2l0IGFtZXQganVzdG8gZG9uZWMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuIFNlZCB0dXJwaXMgdGluY2lkdW50IGlkIGFsaXF1ZXQgcmlzdXMuIEVnZXQgbWF1cmlzIHBoYXJldHJhIGV0IHVsdHJpY2VzIG5lcXVlIG9ybmFyZSBhZW5lYW4gZXVpc21vZC4gRGlhbSBxdWlzIGVuaW0gbG9ib3J0aXMgc2NlbGVyaXNxdWUgZmVybWVudHVtLiBWYXJpdXMgZHVpcyBhdCBjb25zZWN0ZXR1ciBsb3JlbSBkb25lYyBtYXNzYSBzYXBpZW4uIERpYW0gc2l0IGFtZXQgbmlzbCBzdXNjaXBpdCBhZGlwaXNjaW5nIGJpYmVuZHVtIGVzdCB1bHRyaWNpZXMgaW50ZWdlci4gTGVjdHVzIHVybmEgZHVpcyBjb252YWxsaXMgY29udmFsbGlzIHRlbGx1cy4gTmliaCBpcHN1bSBjb25zZXF1YXQgbmlzbCB2ZWwgcHJldGl1bSBsZWN0dXMgcXVhbSBpZCBsZW8uIEZldWdpYXQgaW4gYW50ZSBtZXR1cyBkaWN0dW0gYXQgdGVtcG9yIGNvbW1vZG8uIFZlbGl0IGRpZ25pc3NpbSBzb2RhbGVzIHV0IGV1IHNlbSBpbnRlZ2VyLiBEaWN0dW0gc2l0IGFtZXQganVzdG8gZG9uZWMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuIFNlZCB0dXJwaXMgdGluY2lkdW50IGlkIGFsaXF1ZXQgcmlzdXMuIEVnZXQgbWF1cmlzIHBoYXJldHJhIGV0IHVsdHJpY2VzIG5lcXVlIG9ybmFyZSBhZW5lYW4gZXVpc21vZC4gRGlhbSBxdWlzIGVuaW0gbG9ib3J0aXMgc2NlbGVyaXNxdWUgZmVybWVudHVtLiBWYXJpdXMgZHVpcyBhdCBjb25zZWN0ZXR1ciBsb3JlbSBkb25lYyBtYXNzYSBzYXBpZW4uIERpYW0gc2l0IGFtZXQgbmlzbCBzdXNjaXBpdCBhZGlwaXNjaW5nIGJpYmVuZHVtIGVzdCB1bHRyaWNpZXMgaW50ZWdlci4gTGVjdHVzIHVybmEgZHVpcyBjb252YWxsaXMgY29udmFsbGlzIHRlbGx1cy4gTmliaCBpcHN1bSBjb25zZXF1YXQgbmlzbCB2ZWwgcHJldGl1bSBsZWN0dXMgcXVhbSBpZCBsZW8uIEZldWdpYXQgaW4gYW50ZSBtZXR1cyBkaWN0dW0gYXQgdGVtcG9yIGNvbW1vZG8uIFZlbGl0IGRpZ25pc3NpbSBzb2RhbGVzIHV0IGV1IHNlbSBpbnRlZ2VyLiBEaWN0dW0gc2l0IGFtZXQganVzdG8gZG9uZWMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy5Mb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4gU2VkIHR1cnBpcyB0aW5jaWR1bnQgaWQgYWxpcXVldCByaXN1cy4gRWdldCBtYXVyaXMgcGhhcmV0cmEgZXQgdWx0cmljZXMgbmVxdWUgb3JuYXJlIGFlbmVhbiBldWlzbW9kLiBEaWFtIHF1aXMgZW5pbSBsb2JvcnRpcyBzY2VsZXJpc3F1ZSBmZXJtZW50dW0uIFZhcml1cyBkdWlzIGF0IGNvbnNlY3RldHVyIGxvcmVtIGRvbmVjIG1hc3NhIHNhcGllbi4gRGlhbSBzaXQgYW1ldCBuaXNsIHN1c2NpcGl0IGFkaXBpc2NpbmcgYmliZW5kdW0gZXN0IHVsdHJpY2llcyBpbnRlZ2VyLiBMZWN0dXMgdXJuYSBkdWlzIGNvbnZhbGxpcyBjb252YWxsaXMgdGVsbHVzLiBOaWJoIGlwc3VtIGNvbnNlcXVhdCBuaXNsIHZlbCBwcmV0aXVtIGxlY3R1cyBxdWFtIGlkIGxlby4gRmV1Z2lhdCBpbiBhbnRlIG1ldHVzIGRpY3R1bSBhdCB0ZW1wb3IgY29tbW9kby4gVmVsaXQgZGlnbmlzc2ltIHNvZGFsZXMgdXQgZXUgc2VtIGludGVnZXIuIERpY3R1bSBzaXQgYW1ldCBqdXN0byBkb25lYy4gU2NlbGVyaXNxdWUgbWF1cmlzIHBlbGxlbnRlc3F1ZSBwdWx2aW5hciBwZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4gU2VkIHR1cnBpcyB0aW5jaWR1bnQgaWQgYWxpcXVldCByaXN1cy4gRWdldCBtYXVyaXMgcGhhcmV0cmEgZXQgdWx0cmljZXMgbmVxdWUgb3JuYXJlIGFlbmVhbiBldWlzbW9kLiBEaWFtIHF1aXMgZW5pbSBsb2JvcnRpcyBzY2VsZXJpc3F1ZSBmZXJtZW50dW0uIFZhcml1cyBkdWlzIGF0IGNvbnNlY3RldHVyIGxvcmVtIGRvbmVjIG1hc3NhIHNhcGllbi4gRGlhbSBzaXQgYW1ldCBuaXNsIHN1c2NpcGl0IGFkaXBpc2NpbmcgYmliZW5kdW0gZXN0IHVsdHJpY2llcyBpbnRlZ2VyLiBMZWN0dXMgdXJuYSBkdWlzIGNvbnZhbGxpcyBjb252YWxsaXMgdGVsbHVzLiBOaWJoIGlwc3VtIGNvbnNlcXVhdCBuaXNsIHZlbCBwcmV0aXVtIGxlY3R1cyBxdWFtIGlkIGxlby4gRmV1Z2lhdCBpbiBhbnRlIG1ldHVzIGRpY3R1bSBhdCB0ZW1wb3IgY29tbW9kby4gVmVsaXQgZGlnbmlzc2ltIHNvZGFsZXMgdXQgZXUgc2VtIGludGVnZXIuIERpY3R1bSBzaXQgYW1ldCBqdXN0byBkb25lYy4gU2NlbGVyaXNxdWUgbWF1cmlzIHBlbGxlbnRlc3F1ZSBwdWx2aW5hciBwZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzLiBTY2VsZXJpc3F1ZSBtYXVyaXMgcGVsbGVudGVzcXVlIHB1bHZpbmFyIHBlbGxlbnRlc3F1ZSBoYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUgc2VuZWN0dXMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy4gU2NlbGVyaXNxdWUgbWF1cmlzIHBlbGxlbnRlc3F1ZSBwdWx2aW5hciBwZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzLiBTY2VsZXJpc3F1ZSBtYXVyaXMgcGVsbGVudGVzcXVlIHB1bHZpbmFyIHBlbGxlbnRlc3F1ZSBoYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUgc2VuZWN0dXMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy4=") for i in std.range(0,100)1083 ],1084}1085```1086</details>10871088| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |1089|:---|---:|---:|---:|---:|1090| `Rust` | 2.6 ± 0.1 | 2.3 | 3.1 | 1.00 |1091| `Rust (alternative, rsjsonnet)` | 7889.2 ± 74.7 | 7711.6 | 8051.1 | 3045.22 ± 138.95 |1092| `Go` | 15.2 ± 0.3 | 14.6 | 16.5 | 5.85 ± 0.28 |1093| `Scala` | 313.0 ± 2.5 | 309.5 | 321.2 | 120.80 ± 5.47 |1094| `C++` | 9930.9 ± 26.5 | 9895.0 | 9997.9 | 3833.33 ± 171.41 |10951096### std.base64DecodeBytes10971098<details>1099<summary>Source</summary>11001101```jsonnet1102{1103 foo: [1104 std.base64DecodeBytes("TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuIFNlZCB0dXJwaXMgdGluY2lkdW50IGlkIGFsaXF1ZXQgcmlzdXMuIEVnZXQgbWF1cmlzIHBoYXJldHJhIGV0IHVsdHJpY2VzIG5lcXVlIG9ybmFyZSBhZW5lYW4gZXVpc21vZC4gRGlhbSBxdWlzIGVuaW0gbG9ib3J0aXMgc2NlbGVyaXNxdWUgZmVybWVudHVtLiBWYXJpdXMgZHVpcyBhdCBjb25zZWN0ZXR1ciBsb3JlbSBkb25lYyBtYXNzYSBzYXBpZW4uIERpYW0gc2l0IGFtZXQgbmlzbCBzdXNjaXBpdCBhZGlwaXNjaW5nIGJpYmVuZHVtIGVzdCB1bHRyaWNpZXMgaW50ZWdlci4gTGVjdHVzIHVybmEgZHVpcyBjb252YWxsaXMgY29udmFsbGlzIHRlbGx1cy4gTmliaCBpcHN1bSBjb25zZXF1YXQgbmlzbCB2ZWwgcHJldGl1bSBsZWN0dXMgcXVhbSBpZCBsZW8uIEZldWdpYXQgaW4gYW50ZSBtZXR1cyBkaWN0dW0gYXQgdGVtcG9yIGNvbW1vZG8uIFZlbGl0IGRpZ25pc3NpbSBzb2RhbGVzIHV0IGV1IHNlbSBpbnRlZ2VyLiBEaWN0dW0gc2l0IGFtZXQganVzdG8gZG9uZWMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuIFNlZCB0dXJwaXMgdGluY2lkdW50IGlkIGFsaXF1ZXQgcmlzdXMuIEVnZXQgbWF1cmlzIHBoYXJldHJhIGV0IHVsdHJpY2VzIG5lcXVlIG9ybmFyZSBhZW5lYW4gZXVpc21vZC4gRGlhbSBxdWlzIGVuaW0gbG9ib3J0aXMgc2NlbGVyaXNxdWUgZmVybWVudHVtLiBWYXJpdXMgZHVpcyBhdCBjb25zZWN0ZXR1ciBsb3JlbSBkb25lYyBtYXNzYSBzYXBpZW4uIERpYW0gc2l0IGFtZXQgbmlzbCBzdXNjaXBpdCBhZGlwaXNjaW5nIGJpYmVuZHVtIGVzdCB1bHRyaWNpZXMgaW50ZWdlci4gTGVjdHVzIHVybmEgZHVpcyBjb252YWxsaXMgY29udmFsbGlzIHRlbGx1cy4gTmliaCBpcHN1bSBjb25zZXF1YXQgbmlzbCB2ZWwgcHJldGl1bSBsZWN0dXMgcXVhbSBpZCBsZW8uIEZldWdpYXQgaW4gYW50ZSBtZXR1cyBkaWN0dW0gYXQgdGVtcG9yIGNvbW1vZG8uIFZlbGl0IGRpZ25pc3NpbSBzb2RhbGVzIHV0IGV1IHNlbSBpbnRlZ2VyLiBEaWN0dW0gc2l0IGFtZXQganVzdG8gZG9uZWMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuIFNlZCB0dXJwaXMgdGluY2lkdW50IGlkIGFsaXF1ZXQgcmlzdXMuIEVnZXQgbWF1cmlzIHBoYXJldHJhIGV0IHVsdHJpY2VzIG5lcXVlIG9ybmFyZSBhZW5lYW4gZXVpc21vZC4gRGlhbSBxdWlzIGVuaW0gbG9ib3J0aXMgc2NlbGVyaXNxdWUgZmVybWVudHVtLiBWYXJpdXMgZHVpcyBhdCBjb25zZWN0ZXR1ciBsb3JlbSBkb25lYyBtYXNzYSBzYXBpZW4uIERpYW0gc2l0IGFtZXQgbmlzbCBzdXNjaXBpdCBhZGlwaXNjaW5nIGJpYmVuZHVtIGVzdCB1bHRyaWNpZXMgaW50ZWdlci4gTGVjdHVzIHVybmEgZHVpcyBjb252YWxsaXMgY29udmFsbGlzIHRlbGx1cy4gTmliaCBpcHN1bSBjb25zZXF1YXQgbmlzbCB2ZWwgcHJldGl1bSBsZWN0dXMgcXVhbSBpZCBsZW8uIEZldWdpYXQgaW4gYW50ZSBtZXR1cyBkaWN0dW0gYXQgdGVtcG9yIGNvbW1vZG8uIFZlbGl0IGRpZ25pc3NpbSBzb2RhbGVzIHV0IGV1IHNlbSBpbnRlZ2VyLiBEaWN0dW0gc2l0IGFtZXQganVzdG8gZG9uZWMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy5Mb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4gU2VkIHR1cnBpcyB0aW5jaWR1bnQgaWQgYWxpcXVldCByaXN1cy4gRWdldCBtYXVyaXMgcGhhcmV0cmEgZXQgdWx0cmljZXMgbmVxdWUgb3JuYXJlIGFlbmVhbiBldWlzbW9kLiBEaWFtIHF1aXMgZW5pbSBsb2JvcnRpcyBzY2VsZXJpc3F1ZSBmZXJtZW50dW0uIFZhcml1cyBkdWlzIGF0IGNvbnNlY3RldHVyIGxvcmVtIGRvbmVjIG1hc3NhIHNhcGllbi4gRGlhbSBzaXQgYW1ldCBuaXNsIHN1c2NpcGl0IGFkaXBpc2NpbmcgYmliZW5kdW0gZXN0IHVsdHJpY2llcyBpbnRlZ2VyLiBMZWN0dXMgdXJuYSBkdWlzIGNvbnZhbGxpcyBjb252YWxsaXMgdGVsbHVzLiBOaWJoIGlwc3VtIGNvbnNlcXVhdCBuaXNsIHZlbCBwcmV0aXVtIGxlY3R1cyBxdWFtIGlkIGxlby4gRmV1Z2lhdCBpbiBhbnRlIG1ldHVzIGRpY3R1bSBhdCB0ZW1wb3IgY29tbW9kby4gVmVsaXQgZGlnbmlzc2ltIHNvZGFsZXMgdXQgZXUgc2VtIGludGVnZXIuIERpY3R1bSBzaXQgYW1ldCBqdXN0byBkb25lYy4gU2NlbGVyaXNxdWUgbWF1cmlzIHBlbGxlbnRlc3F1ZSBwdWx2aW5hciBwZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4gU2VkIHR1cnBpcyB0aW5jaWR1bnQgaWQgYWxpcXVldCByaXN1cy4gRWdldCBtYXVyaXMgcGhhcmV0cmEgZXQgdWx0cmljZXMgbmVxdWUgb3JuYXJlIGFlbmVhbiBldWlzbW9kLiBEaWFtIHF1aXMgZW5pbSBsb2JvcnRpcyBzY2VsZXJpc3F1ZSBmZXJtZW50dW0uIFZhcml1cyBkdWlzIGF0IGNvbnNlY3RldHVyIGxvcmVtIGRvbmVjIG1hc3NhIHNhcGllbi4gRGlhbSBzaXQgYW1ldCBuaXNsIHN1c2NpcGl0IGFkaXBpc2NpbmcgYmliZW5kdW0gZXN0IHVsdHJpY2llcyBpbnRlZ2VyLiBMZWN0dXMgdXJuYSBkdWlzIGNvbnZhbGxpcyBjb252YWxsaXMgdGVsbHVzLiBOaWJoIGlwc3VtIGNvbnNlcXVhdCBuaXNsIHZlbCBwcmV0aXVtIGxlY3R1cyBxdWFtIGlkIGxlby4gRmV1Z2lhdCBpbiBhbnRlIG1ldHVzIGRpY3R1bSBhdCB0ZW1wb3IgY29tbW9kby4gVmVsaXQgZGlnbmlzc2ltIHNvZGFsZXMgdXQgZXUgc2VtIGludGVnZXIuIERpY3R1bSBzaXQgYW1ldCBqdXN0byBkb25lYy4gU2NlbGVyaXNxdWUgbWF1cmlzIHBlbGxlbnRlc3F1ZSBwdWx2aW5hciBwZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzLiBTY2VsZXJpc3F1ZSBtYXVyaXMgcGVsbGVudGVzcXVlIHB1bHZpbmFyIHBlbGxlbnRlc3F1ZSBoYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUgc2VuZWN0dXMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy4gU2NlbGVyaXNxdWUgbWF1cmlzIHBlbGxlbnRlc3F1ZSBwdWx2aW5hciBwZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzLiBTY2VsZXJpc3F1ZSBtYXVyaXMgcGVsbGVudGVzcXVlIHB1bHZpbmFyIHBlbGxlbnRlc3F1ZSBoYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUgc2VuZWN0dXMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy4=") for i in std.range(0,100)1105 ],1106}1107```1108</details>11091110| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |1111|:---|---:|---:|---:|---:|1112| `Rust` | 34.8 ± 0.5 | 33.4 | 36.0 | 1.00 |1113| `Rust (alternative, rsjsonnet)` | 8116.2 ± 37.2 | 8049.1 | 8176.2 | 233.52 ± 3.24 |1114| `Go` | 271.1 ± 2.3 | 267.1 | 275.7 | 7.80 ± 0.12 |1115| `Scala` | 357.2 ± 2.3 | 353.5 | 363.4 | 10.28 ± 0.15 |1116| `C++` | 9653.7 ± 22.5 | 9621.4 | 9694.3 | 277.75 ± 3.69 |11171118### std.base64 (byte array)11191120<details>1121<summary>Source</summary>11221123```jsonnet1124{1125 foo: [1126 std.base64([76,111,114,101,109,32,105,112,115,117,109,32,100,111,108,111,114,32,115,105,116,32,97,109,101,116,44,32,99,111,110,115,101,99,116,101,116,117,114,32,97,100,105,112,105,115,99,105,110,103,32,101,108,105,116,44,32,115,101,100,32,100,111,32,101,105,117,115,109,111,100,32,116,101,109,112,111,114,32,105,110,99,105,100,105,100,117,110,116,32,117,116,32,108,97,98,111,114,101,32,101,116,32,100,111,108,111,114,101,32,109,97,103,110,97,32,97,108,105,113,117,97,46,32,83,101,100,32,116,117,114,112,105,115,32,116,105,110,99,105,100,117,110,116,32,105,100,32,97,108,105,113,117,101,116,32,114,105,115,117,115,46,32,69,103,101,116,32,109,97,117,114,105,115,32,112,104,97,114,101,116,114,97,32,101,116,32,117,108,116,114,105,99,101,115,32,110,101,113,117,101,32,111,114,110,97,114,101,32,97,101,110,101,97,110,32,101,117,105,115,109,111,100,46,32,68,105,97,109,32,113,117,105,115,32,101,110,105,109,32,108,111,98,111,114,116,105,115,32,115,99,101,108,101,114,105,115,113,117,101,32,102,101,114,109,101,110,116,117,109,46,32,86,97,114,105,117,115,32,100,117,105,115,32,97,116,32,99,111,110,115,101,99,116,101,116,117,114,32,108,111,114,101,109,32,100,111,110,101,99,32,109,97,115,115,97,32,115,97,112,105,101,110,46,32,68,105,97,109,32,115,105,116,32,97,109,101,116,32,110,105,115,108,32,115,117,115,99,105,112,105,116,32,97,100,105,112,105,115,99,105,110,103,32,98,105,98,101,110,100,117,109,32,101,115,116,32,117,108,116,114,105,99,105,101,115,32,105,110,116,101,103,101,114,46,32,76,101,99,116,117,115,32,117,114,110,97,32,100,117,105,115,32,99,111,110,118,97,108,108,105,115,32,99,111,110,118,97,108,108,105,115,32,116,101,108,108,117,115,46,32,78,105,98,104,32,105,112,115,117,109,32,99,111,110,115,101,113,117,97,116,32,110,105,115,108,32,118,101,108,32,112,114,101,116,105,117,109,32,108,101,99,116,117,115,32,113,117,97,109,32,105,100,32,108,101,111,46,32,70,101,117,103,105,97,116,32,105,110,32,97,110,116,101,32,109,101,116,117,115,32,100,105,99,116,117,109,32,97,116,32,116,101,109,112,111,114,32,99,111,109,109,111,100,111,46,32,86,101,108,105,116,32,100,105,103,110,105,115,115,105,109,32,115,111,100,97,108,101,115,32,117,116,32,101,117,32,115,101,109,32,105,110,116,101,103,101,114,46,32,68,105,99,116,117,109,32,115,105,116,32,97,109,101,116,32,106,117,115,116,111,32,100,111,110,101,99,46,32,83,99,101,108,101,114,105,115,113,117,101,32,109,97,117,114,105,115,32,112,101,108,108,101,110,116,101,115,113,117,101,32,112,117,108,118,105,110,97,114,32,112,101,108,108,101,110,116,101,115,113,117,101,32,104,97,98,105,116,97,110,116,32,109,111,114,98,105,32,116,114,105,115,116,105,113,117,101,32,115,101,110,101,99,116,117,115,46,32,76,111,114,101,109,32,105,112,115,117,109,32,100,111,108,111,114,32,115,105,116,32,97,109,101,116,44,32,99,111,110,115,101,99,116,101,116,117,114,32,97,100,105,112,105,115,99,105,110,103,32,101,108,105,116,44,32,115,101,100,32,100,111,32,101,105,117,115,109,111,100,32,116,101,109,112,111,114,32,105,110,99,105,100,105,100,117,110,116,32,117,116,32,108,97,98,111,114,101,32,101,116,32,100,111,108,111,114,101,32,109,97,103,110,97,32,97,108,105,113,117,97,46,32,83,101,100,32,116,117,114,112,105,115,32,116,105,110,99,105,100,117,110,116,32,105,100,32,97,108,105,113,117,101,116,32,114,105,115,117,115,46,32,69,103,101,116,32,109,97,117,114,105,115,32,112,104,97,114,101,116,114,97,32,101,116,32,117,108,116,114,105,99,101,115,32,110,101,113,117,101,32,111,114,110,97,114,101,32,97,101,110,101,97,110,32,101,117,105,115,109,111,100,46,32,68,105,97,109,32,113,117,105,115,32,101,110,105,109,32,108,111,98,111,114,116,105,115,32,115,99,101,108,101,114,105,115,113,117,101,32,102,101,114,109,101,110,116,117,109,46,32,86,97,114,105,117,115,32,100,117,105,115,32,97,116,32,99,111,110,115,101,99,116,101,116,117,114,32,108,111,114,101,109,32,100,111,110,101,99,32,109,97,115,115,97,32,115,97,112,105,101,110,46,32,68,105,97,109,32,115,105,116,32,97,109,101,116,32,110,105,115,108,32,115,117,115,99,105,112,105,116,32,97,100,105,112,105,115,99,105,110,103,32,98,105,98,101,110,100,117,109,32,101,115,116,32,117,108,116,114,105,99,105,101,115,32,105,110,116,101,103,101,114,46,32,76,101,99,116,117,115,32,117,114,110,97,32,100,117,105,115,32,99,111,110,118,97,108,108,105,115,32,99,111,110,118,97,108,108,105,115,32,116,101,108,108,117,115,46,32,78,105,98,104,32,105,112,115,117,109,32,99,111,110,115,101,113,117,97,116,32,110,105,115,108,32,118,101,108,32,112,114,101,116,105,117,109,32,108,101,99,116,117,115,32,113,117,97,109,32,105,100,32,108,101,111,46,32,70,101,117,103,105,97,116,32,105,110,32,97,110,116,101,32,109,101,116,117,115,32,100,105,99,116,117,109,32,97,116,32,116,101,109,112,111,114,32,99,111,109,109,111,100,111,46,32,86,101,108,105,116,32,100,105,103,110,105,115,115,105,109,32,115,111,100,97,108,101,115,32,117,116,32,101,117,32,115,101,109,32,105,110,116,101,103,101,114,46,32,68,105,99,116,117,109,32,115,105,116,32,97,109,101,116,32,106,117,115,116,111,32,100,111,110,101,99,46,32,83,99,101,108,101,114,105,115,113,117,101,32,109,97,117,114,105,115,32,112,101,108,108,101,110,116,101,115,113,117,101,32,112,117,108,118,105,110,97,114,32,112,101,108,108,101,110,116,101,115,113,117,101,32,104,97,98,105,116,97,110,116,32,109,111,114,98,105,32,116,114,105,115,116,105,113,117,101,32,115,101,110,101,99,116,117,115,46,32,76,111,114,101,109,32,105,112,115,117,109,32,100,111,108,111,114,32,115,105,116,32,97,109,101,116,44,32,99,111,110,115,101,99,116,101,116,117,114,32,97,100,105,112,105,115,99,105,110,103,32,101,108,105,116,44,32,115,101,100,32,100,111,32,101,105,117,115,109,111,100,32,116,101,109,112,111,114,32,105,110,99,105,100,105,100,117,110,116,32,117,116,32,108,97,98,111,114,101,32,101,116,32,100,111,108,111,114,101,32,109,97,103,110,97,32,97,108,105,113,117,97,46,32,83,101,100,32,116,117,114,112,105,115,32,116,105,110,99,105,100,117,110,116,32,105,100,32,97,108,105,113,117,101,116,32,114,105,115,117,115,46,32,69,103,101,116,32,109,97,117,114,105,115,32,112,104,97,114,101,116,114,97,32,101,116,32,117,108,116,114,105,99,101,115,32,110,101,113,117,101,32,111,114,110,97,114,101,32,97,101,110,101,97,110,32,101,117,105,115,109,111,100,46,32,68,105,97,109,32,113,117,105,115,32,101,110,105,109,32,108,111,98,111,114,116,105,115,32,115,99,101,108,101,114,105,115,113,117,101,32,102,101,114,109,101,110,116,117,109,46,32,86,97,114,105,117,115,32,100,117,105,115,32,97,116,32,99,111,110,115,101,99,116,101,116,117,114,32,108,111,114,101,109,32,100,111,110,101,99,32,109,97,115,115,97,32,115,97,112,105,101,110,46,32,68,105,97,109,32,115,105,116,32,97,109,101,116,32,110,105,115,108,32,115,117,115,99,105,112,105,116,32,97,100,105,112,105,115,99,105,110,103,32,98,105,98,101,110,100,117,109,32,101,115,116,32,117,108,116,114,105,99,105,101,115,32,105,110,116,101,103,101,114,46,32,76,101,99,116,117,115,32,117,114,110,97,32,100,117,105,115,32,99,111,110,118,97,108,108,105,115,32,99,111,110,118,97,108,108,105,115,32,116,101,108,108,117,115,46,32,78,105,98,104,32,105,112,115,117,109,32,99,111,110,115,101,113,117,97,116,32,110,105,115,108,32,118,101,108,32,112,114,101,116,105,117,109,32,108,101,99,116,117,115,32,113,117,97,109,32,105,100,32,108,101,111,46,32,70,101,117,103,105,97,116,32,105,110,32,97,110,116,101,32,109,101,116,117,115,32,100,105,99,116,117,109,32,97,116,32,116,101,109,112,111,114,32,99,111,109,109,111,100,111,46,32,86,101,108,105,116,32,100,105,103,110,105,115,115,105,109,32,115,111,100,97,108,101,115,32,117,116,32,101,117,32,115,101,109,32,105,110,116,101,103,101,114,46,32,68,105,99,116,117,109,32,115,105,116,32,97,109,101,116,32,106,117,115,116,111,32,100,111,110,101,99,46,32,83,99,101,108,101,114,105,115,113,117,101,32,109,97,117,114,105,115,32,112,101,108,108,101,110,116,101,115,113,117,101,32,112,117,108,118,105,110,97,114,32,112,101,108,108,101,110,116,101,115,113,117,101,32,104,97,98,105,116,97,110,116,32,109,111,114,98,105,32,116,114,105,115,116,105,113,117,101,32,115,101,110,101,99,116,117,115,46,76,111,114,101,109,32,105,112,115,117,109,32,100,111,108,111,114,32,115,105,116,32,97,109,101,116,44,32,99,111,110,115,101,99,116,101,116,117,114,32,97,100,105,112,105,115,99,105,110,103,32,101,108,105,116,44,32,115,101,100,32,100,111,32,101,105,117,115,109,111,100,32,116,101,109,112,111,114,32,105,110,99,105,100,105,100,117,110,116,32,117,116,32,108,97,98,111,114,101,32,101,116,32,100,111,108,111,114,101,32,109,97,103,110,97,32,97,108,105,113,117,97,46,32,83,101,100,32,116,117,114,112,105,115,32,116,105,110,99,105,100,117,110,116,32,105,100,32,97,108,105,113,117,101,116,32,114,105,115,117,115,46,32,69,103,101,116,32,109,97,117,114,105,115,32,112,104,97,114,101,116,114,97,32,101,116,32,117,108,116,114,105,99,101,115,32,110,101,113,117,101,32,111,114,110,97,114,101,32,97,101,110,101,97,110,32,101,117,105,115,109,111,100,46,32,68,105,97,109,32,113,117,105,115,32,101,110,105,109,32,108,111,98,111,114,116,105,115,32,115,99,101,108,101,114,105,115,113,117,101,32,102,101,114,109,101,110,116,117,109,46,32,86,97,114,105,117,115,32,100,117,105,115,32,97,116,32,99,111,110,115,101,99,116,101,116,117,114,32,108,111,114,101,109,32,100,111,110,101,99,32,109,97,115,115,97,32,115,97,112,105,101,110,46,32,68,105,97,109,32,115,105,116,32,97,109,101,116,32,110,105,115,108,32,115,117,115,99,105,112,105,116,32,97,100,105,112,105,115,99,105,110,103,32,98,105,98,101,110,100,117,109,32,101,115,116,32,117,108,116,114,105,99,105,101,115,32,105,110,116,101,103,101,114,46,32,76,101,99,116,117,115,32,117,114,110,97,32,100,117,105,115,32,99,111,110,118,97,108,108,105,115,32,99,111,110,118,97,108,108,105,115,32,116,101,108,108,117,115,46,32,78,105,98,104,32,105,112,115,117,109,32,99,111,110,115,101,113,117,97,116,32,110,105,115,108,32,118,101,108,32,112,114,101,116,105,117,109,32,108,101,99,116,117,115,32,113,117,97,109,32,105,100,32,108,101,111,46,32,70,101,117,103,105,97,116,32,105,110,32,97,110,116,101,32,109,101,116,117,115,32,100,105,99,116,117,109,32,97,116,32,116,101,109,112,111,114,32,99,111,109,109,111,100,111,46,32,86,101,108,105,116,32,100,105,103,110,105,115,115,105,109,32,115,111,100,97,108,101,115,32,117,116,32,101,117,32,115,101,109,32,105,110,116,101,103,101,114,46,32,68,105,99,116,117,109,32,115,105,116,32,97,109,101,116,32,106,117,115,116,111,32,100,111,110,101,99,46,32,83,99,101,108,101,114,105,115,113,117,101,32,109,97,117,114,105,115,32,112,101,108,108,101,110,116,101,115,113,117,101,32,112,117,108,118,105,110,97,114,32,112,101,108,108,101,110,116,101,115,113,117,101,32,104,97,98,105,116,97,110,116,32,109,111,114,98,105,32,116,114,105,115,116,105,113,117,101,32,115,101,110,101,99,116,117,115,46,32,76,111,114,101,109,32,105,112,115,117,109,32,100,111,108,111,114,32,115,105,116,32,97,109,101,116,44,32,99,111,110,115,101,99,116,101,116,117,114,32,97,100,105,112,105,115,99,105,110,103,32,101,108,105,116,44,32,115,101,100,32,100,111,32,101,105,117,115,109,111,100,32,116,101,109,112,111,114,32,105,110,99,105,100,105,100,117,110,116,32,117,116,32,108,97,98,111,114,101,32,101,116,32,100,111,108,111,114,101,32,109,97,103,110,97,32,97,108,105,113,117,97,46,32,83,101,100,32,116,117,114,112,105,115,32,116,105,110,99,105,100,117,110,116,32,105,100,32,97,108,105,113,117,101,116,32,114,105,115,117,115,46,32,69,103,101,116,32,109,97,117,114,105,115,32,112,104,97,114,101,116,114,97,32,101,116,32,117,108,116,114,105,99,101,115,32,110,101,113,117,101,32,111,114,110,97,114,101,32,97,101,110,101,97,110,32,101,117,105,115,109,111,100,46,32,68,105,97,109,32,113,117,105,115,32,101,110,105,109,32,108,111,98,111,114,116,105,115,32,115,99,101,108,101,114,105,115,113,117,101,32,102,101,114,109,101,110,116,117,109,46,32,86,97,114,105,117,115,32,100,117,105,115,32,97,116,32,99,111,110,115,101,99,116,101,116,117,114,32,108,111,114,101,109,32,100,111,110,101,99,32,109,97,115,115,97,32,115,97,112,105,101,110,46,32,68,105,97,109,32,115,105,116,32,97,109,101,116,32,110,105,115,108,32,115,117,115,99,105,112,105,116,32,97,100,105,112,105,115,99,105,110,103,32,98,105,98,101,110,100,117,109,32,101,115,116,32,117,108,116,114,105,99,105,101,115,32,105,110,116,101,103,101,114,46,32,76,101,99,116,117,115,32,117,114,110,97,32,100,117,105,115,32,99,111,110,118,97,108,108,105,115,32,99,111,110,118,97,108,108,105,115,32,116,101,108,108,117,115,46,32,78,105,98,104,32,105,112,115,117,109,32,99,111,110,115,101,113,117,97,116,32,110,105,115,108,32,118,101,108,32,112,114,101,116,105,117,109,32,108,101,99,116,117,115,32,113,117,97,109,32,105,100,32,108,101,111,46,32,70,101,117,103,105,97,116,32,105,110,32,97,110,116,101,32,109,101,116,117,115,32,100,105,99,116,117,109,32,97,116,32,116,101,109,112,111,114,32,99,111,109,109,111,100,111,46,32,86,101,108,105,116,32,100,105,103,110,105,115,115,105,109,32,115,111,100,97,108,101,115,32,117,116,32,101,117,32,115,101,109,32,105,110,116,101,103,101,114,46,32,68,105,99,116,117,109,32,115,105,116,32,97,109,101,116,32,106,117,115,116,111,32,100,111,110,101,99,46,32,83,99,101,108,101,114,105,115,113,117,101,32,109,97,117,114,105,115,32,112,101,108,108,101,110,116,101,115,113,117,101,32,112,117,108,118,105,110,97,114,32,112,101,108,108,101,110,116,101,115,113,117,101,32,104,97,98,105,116,97,110,116,32,109,111,114,98,105,32,116,114,105,115,116,105,113,117,101,32,115,101,110,101,99,116,117,115,46,32,83,99,101,108,101,114,105,115,113,117,101,32,109,97,117,114,105,115,32,112,101,108,108,101,110,116,101,115,113,117,101,32,112,117,108,118,105,110,97,114,32,112,101,108,108,101,110,116,101,115,113,117,101,32,104,97,98,105,116,97,110,116,32,109,111,114,98,105,32,116,114,105,115,116,105,113,117,101,32,115,101,110,101,99,116,117,115,46,32,83,99,101,108,101,114,105,115,113,117,101,32,109,97,117,114,105,115,32,112,101,108,108,101,110,116,101,115,113,117,101,32,112,117,108,118,105,110,97,114,32,112,101,108,108,101,110,116,101,115,113,117,101,32,104,97,98,105,116,97,110,116,32,109,111,114,98,105,32,116,114,105,115,116,105,113,117,101,32,115,101,110,101,99,116,117,115,46,32,83,99,101,108,101,114,105,115,113,117,101,32,109,97,117,114,105,115,32,112,101,108,108,101,110,116,101,115,113,117,101,32,112,117,108,118,105,110,97,114,32,112,101,108,108,101,110,116,101,115,113,117,101,32,104,97,98,105,116,97,110,116,32,109,111,114,98,105,32,116,114,105,115,116,105,113,117,101,32,115,101,110,101,99,116,117,115,46,32,83,99,101,108,101,114,105,115,113,117,101,32,109,97,117,114,105,115,32,112,101,108,108,101,110,116,101,115,113,117,101,32,112,117,108,118,105,110,97,114,32,112,101,108,108,101,110,116,101,115,113,117,101,32,104,97,98,105,116,97,110,116,32,109,111,114,98,105,32,116,114,105,115,116,105,113,117,101,32,115,101,110,101,99,116,117,115,46,32,83,99,101,108,101,114,105,115,113,117,101,32,109,97,117,114,105,115,32,112,101,108,108,101,110,116,101,115,113,117,101,32,112,117,108,118,105,110,97,114,32,112,101,108,108,101,110,116,101,115,113,117,101,32,104,97,98,105,116,97,110,116,32,109,111,114,98,105,32,116,114,105,115,116,105,113,117,101,32,115,101,110,101,99,116,117,115]),for i in std.range(0,100)1127 ],1128}1129```1130</details>11311132| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |1133|:---|---:|---:|---:|---:|1134| `Rust` | 30.3 ± 0.4 | 29.1 | 31.6 | 1.00 |1135| `Rust (alternative, rsjsonnet)` | 1460.8 ± 47.6 | 1375.2 | 1568.3 | 48.26 ± 1.72 |1136| `Go` | 156.5 ± 1.9 | 152.5 | 159.4 | 5.17 ± 0.10 |1137| `Scala` | 355.9 ± 2.9 | 351.4 | 365.6 | 11.76 ± 0.20 |1138| `C++` | 13362.4 ± 88.3 | 13028.4 | 13473.8 | 441.41 ± 7.01 |11391140### std.foldl11411142<details>1143<summary>Source</summary>11441145```jsonnet1146local input = std.makeArray(10000, function(i) 'xxxxx');11471148std.foldl(function(acc, value) acc + value, input, '')11491150```1151</details>11521153| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |1154|:---|---:|---:|---:|---:|1155| `Rust` | 5.3 ± 0.2 | 5.0 | 6.2 | 1.00 |1156| `Rust (alternative, rsjsonnet)` | 81.5 ± 1.6 | 78.9 | 83.8 | 15.38 ± 0.55 |1157| `Go` | 26.6 ± 0.5 | 25.0 | 27.5 | 5.02 ± 0.18 |1158| `Scala` | 405.4 ± 3.0 | 400.9 | 413.6 | 76.52 ± 2.34 |1159| `C++` | 265.3 ± 2.7 | 260.6 | 271.5 | 50.08 ± 1.57 |11601161### std.manifestJsonEx11621163<details>1164<summary>Source</summary>11651166```jsonnet1167{1168 bar: {1169 prometheusOperator+: {1170 service+: {1171 spec+: {1172 ports: [1173 {1174 name: 'https',1175 port: 8443,1176 targetPort: 'https',1177 },1178 ],1179 },1180 },1181 serviceMonitor+: {1182 spec+: {1183 endpoints: [1184 {1185 port: 'https',1186 scheme: 'https',1187 honorLabels: true,1188 bearerTokenFile: '/var/run/secrets/kubernetes.io/serviceaccount/token',1189 tlsConfig: {1190 insecureSkipVerify: true,1191 },1192 },1193 ]1194 },1195 },1196 clusterRole+: {1197 rules+: [1198 {1199 apiGroups: ['authentication.k8s.io'],1200 resources: ['tokenreviews'],1201 verbs: ['create'],1202 },1203 {1204 apiGroups: ['authorization.k8s.io'],1205 resources: ['subjectaccessreviews'],1206 verbs: ['create'],1207 },1208 ],1209 },1210 }1211 },1212 foo: std.manifestJsonEx(self.bar, " ")1213}1214```1215</details>12161217| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |1218|:---|---:|---:|---:|---:|1219| `Rust` | 1.7 ± 0.1 | 1.4 | 2.7 | 1.00 |1220| `Rust (alternative, rsjsonnet)` | 2.9 ± 0.1 | 2.7 | 3.3 | 1.73 ± 0.13 |1221| `Go` | 3.2 ± 0.1 | 2.7 | 3.8 | 1.92 ± 0.15 |1222| `Scala` | 294.7 ± 1.7 | 291.6 | 299.0 | 175.84 ± 12.30 |1223| `C++` | 101.4 ± 0.8 | 99.3 | 102.9 | 60.48 ± 4.24 |12241225### std.manifestTomlEx12261227> Note: No results for Scala, std.manifestTomlEx is not implemented: https://github.com/databricks/sjsonnet/issues/11112281229<details>1230<summary>Source</summary>12311232```jsonnet1233{1234 bar: {1235 prometheusOperator+: {1236 service+: {1237 spec+: {1238 ports: [1239 {1240 name: 'https',1241 port: 8443,1242 targetPort: 'https',1243 },1244 ],1245 },1246 },1247 serviceMonitor+: {1248 spec+: {1249 endpoints: [1250 {1251 port: 'https',1252 scheme: 'https',1253 honorLabels: true,1254 bearerTokenFile: '/var/run/secrets/kubernetes.io/serviceaccount/token',1255 tlsConfig: {1256 insecureSkipVerify: true,1257 },1258 },1259 ],1260 },1261 },1262 clusterRole+: {1263 rules+: [1264 {1265 apiGroups: ['authentication.k8s.io'],1266 resources: ['tokenreviews'],1267 verbs: ['create'],1268 },1269 {1270 apiGroups: ['authorization.k8s.io'],1271 resources: ['subjectaccessreviews'],1272 verbs: ['create'],1273 },1274 ],1275 },1276 },1277 },1278 nothing: std.manifestTomlEx(self.bar, ' '),1279}12801281```1282</details>12831284| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |1285|:---|---:|---:|---:|---:|1286| `Rust` | 1.7 ± 0.1 | 1.4 | 2.7 | 1.00 |1287| `Rust (alternative, rsjsonnet)` | 7.8 ± 0.2 | 7.3 | 8.5 | 4.65 ± 0.36 |1288| `Go` | 3.2 ± 0.1 | 2.9 | 3.7 | 1.90 ± 0.16 |1289| `C++` | 1046.1 ± 4.9 | 1039.7 | 1053.9 | 622.36 ± 44.25 |12901291### std.parseInt12921293<details>1294<summary>Source</summary>12951296```jsonnet1297{1298 foo: [1299 std.parseInt("-123949595") for i in std.range(0,100)1300 ],1301}1302```1303</details>13041305| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |1306|:---|---:|---:|---:|---:|1307| `Rust` | 1.7 ± 0.1 | 1.4 | 2.6 | 1.00 |1308| `Rust (alternative, rsjsonnet)` | 2.9 ± 0.1 | 2.6 | 3.4 | 1.71 ± 0.16 |1309| `Go` | 2.8 ± 0.1 | 2.4 | 3.3 | 1.64 ± 0.16 |1310| `Scala` | 292.7 ± 1.7 | 289.2 | 295.8 | 170.68 ± 14.76 |1311| `C++` | 101.0 ± 0.7 | 99.0 | 102.0 | 58.88 ± 5.10 |13121313### std.reverse13141315<details>1316<summary>Source</summary>13171318```jsonnet1319{1320 foo: [1321 std.reverse(std.range(0, 5000)) for i in std.range(0,100)1322 ],1323}1324```1325</details>13261327| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |1328|:---|---:|---:|---:|---:|1329| `Rust` | 45.3 ± 0.5 | 44.0 | 46.5 | 1.00 |1330| `Rust (alternative, rsjsonnet)` | 784.1 ± 20.4 | 741.5 | 802.0 | 17.31 ± 0.49 |1331| `Go` | 327.4 ± 2.1 | 323.8 | 331.4 | 7.23 ± 0.10 |1332| `Scala` | 367.0 ± 2.4 | 361.1 | 370.2 | 8.10 ± 0.11 |1333| `C++` | 659.3 ± 5.4 | 644.6 | 666.0 | 14.55 ± 0.21 |13341335### std.substr13361337<details>1338<summary>Source</summary>13391340```jsonnet1341{1342 foo: [1343 std.substr("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sed turpis tincidunt id aliquet risus. Eget mauris pharetra et ultrices neque ornare aenean euismod. Diam quis enim lobortis scelerisque fermentum. Varius duis at consectetur lorem donec massa sapien. Diam sit amet nisl suscipit adipiscing bibendum est ultricies integer. Lectus urna duis convallis convallis tellus. Nibh ipsum consequat nisl vel pretium lectus quam id leo. Feugiat in ante metus dictum at tempor commodo. Velit dignissim sodales ut eu sem integer. Dictum sit amet justo donec. Scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sed turpis tincidunt id aliquet risus. Eget mauris pharetra et ultrices neque ornare aenean euismod. Diam quis enim lobortis scelerisque fermentum. Varius duis at consectetur lorem donec massa sapien. Diam sit amet nisl suscipit adipiscing bibendum est ultricies integer. Lectus urna duis convallis convallis tellus. Nibh ipsum consequat nisl vel pretium lectus quam id leo. Feugiat in ante metus dictum at tempor commodo. Velit dignissim sodales ut eu sem integer. Dictum sit amet justo donec. Scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sed turpis tincidunt id aliquet risus. Eget mauris pharetra et ultrices neque ornare aenean euismod. Diam quis enim lobortis scelerisque fermentum. Varius duis at consectetur lorem donec massa sapien. Diam sit amet nisl suscipit adipiscing bibendum est ultricies integer. Lectus urna duis convallis convallis tellus. Nibh ipsum consequat nisl vel pretium lectus quam id leo. Feugiat in ante metus dictum at tempor commodo. Velit dignissim sodales ut eu sem integer. Dictum sit amet justo donec. Scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sed turpis tincidunt id aliquet risus. Eget mauris pharetra et ultrices neque ornare aenean euismod. Diam quis enim lobortis scelerisque fermentum. Varius duis at consectetur lorem donec massa sapien. Diam sit amet nisl suscipit adipiscing bibendum est ultricies integer. Lectus urna duis convallis convallis tellus. Nibh ipsum consequat nisl vel pretium lectus quam id leo. Feugiat in ante metus dictum at tempor commodo. Velit dignissim sodales ut eu sem integer. Dictum sit amet justo donec. Scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sed turpis tincidunt id aliquet risus. Eget mauris pharetra et ultrices neque ornare aenean euismod. Diam quis enim lobortis scelerisque fermentum. Varius duis at consectetur lorem donec massa sapien. Diam sit amet nisl suscipit adipiscing bibendum est ultricies integer. Lectus urna duis convallis convallis tellus. Nibh ipsum consequat nisl vel pretium lectus quam id leo. Feugiat in ante metus dictum at tempor commodo. Velit dignissim sodales ut eu sem integer. Dictum sit amet justo donec. Scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus. Scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus. Scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus. Scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus. Scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus. Scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus. ", i, 800-i) for i in std.range(0,100)1344 ],1345}1346```1347</details>13481349| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |1350|:---|---:|---:|---:|---:|1351| `Rust` | 2.2 ± 0.2 | 1.9 | 3.2 | 1.00 |1352| `Rust (alternative, rsjsonnet)` | 3.2 ± 0.1 | 3.1 | 3.6 | 1.49 ± 0.11 |1353| `Go` | 6.8 ± 0.2 | 6.3 | 7.4 | 3.12 ± 0.24 |1354| `Scala` | 303.6 ± 3.6 | 300.5 | 318.2 | 139.43 ± 9.76 |1355| `C++` | 29.1 ± 0.4 | 28.3 | 30.2 | 13.36 ± 0.94 |13561357### Comparsion for array13581359> Note: No results for Scala, array comparsion is not implemented13601361<details>1362<summary>Source</summary>13631364```jsonnet1365local long_array = std.range(1, 1000000);1366long_array + [1] < long_array + [2]13671368```1369</details>13701371| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |1372|:---|---:|---:|---:|---:|1373| `Rust` | 25.7 ± 0.2 | 25.0 | 26.0 | 1.00 |1374| `Rust (alternative, rsjsonnet)` | 228.1 ± 7.9 | 214.0 | 245.1 | 8.89 ± 0.31 |1375| `Go` | 150.4 ± 10.4 | 135.9 | 169.4 | 5.86 ± 0.41 |1376| `C++` | 125755.8 ± 989.6 | 123095.8 | 127475.4 | 4901.85 ± 49.12 |13771378### Comparsion for primitives13791380> Note: No results for C++, can't run: uses up to 192GB of RAM13811382<details>1383<summary>Source</summary>13841385```jsonnet1386([ i < j for i in std.range(1, 1000) for j in std.range(1, 1000)])13871388```1389</details>13901391| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |1392|:---|---:|---:|---:|---:|1393| `Rust` | 385.9 ± 4.2 | 372.4 | 391.5 | 1.00 |1394| `Rust (alternative, rsjsonnet)` | 1287.4 ± 27.0 | 1244.2 | 1335.1 | 3.34 ± 0.08 |1395| `Go` | 1817.1 ± 18.6 | 1779.7 | 1842.9 | 4.71 ± 0.07 |1396| `Scala` | 453.1 ± 3.9 | 448.1 | 462.2 | 1.17 ± 0.02 |