git.delta.rocks / jrsonnet / refs/commits / 1ddb92c00d0f

difftreelog

source

docs/benchmarks.md76.0 KiBsourcehistory
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 |