git.delta.rocks / jrsonnet / refs/commits / 4824700b357f

difftreelog

chore re-run benchmarks

Lach2026-04-01parent: #4808431.patch.diff
in: master

9 files changed

modifiedREADME.adocdiffbeforeafterboth
--- a/README.adoc
+++ b/README.adoc
@@ -69,10 +69,10 @@
 * https://github.com/google/jsonnet[C++];
 * https://github.com/google/go-jsonnet/[Go];
 * https://github.com/databricks/sjsonnet[Scala].
-* [NEW] https://github.com/eduardosm/rsjsonnet[Another Rust impl appears].
+* https://github.com/eduardosm/rsjsonnet[Another Rust impl appears].
 
 This implementation shows performance better than all existing implementations.
-For more information see link:./docs/benchmarks.md[benchmarks]
+For more information see link:./docs/benchmarks.adoc[benchmarks]
 
 Also, I wanted to experiment on new syntax features, and jrsonnet implements some of them.
 For more information see link:./docs/features.adoc[features]
addeddocs/benchmarks.adocdiffbeforeafterboth
--- /dev/null
+++ b/docs/benchmarks.adoc
@@ -0,0 +1,2076 @@
+= Benchmarks
+
+There are multiple implementations of jsonnet implemented in different languages: Rust (this repo), https://github.com/google/go-jsonnet/[Go], https://github.com/databricks/sjsonnet[Scala], https://github.com/google/jsonnet[C++], https://github.com/moleike/haskell-jsonnet[Haskell].
+
+For simplicity, I will call these implementations by the language of their implementation.
+
+Unfortunately, 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 benchmarks
+
+CPU: AMD Ryzen 9 9950X3D 16-Core Processor, 32 threads
+
+.Tested versions
+[%collapsible]
+====
+* Go: Jsonnet commandline interpreter (Go implementation) v0.22.0-rc1
+* C++: Jsonnet commandline interpreter v0.22.0-rc1
+* Scala (native/GraalVM): Sjsonnet 0.6.2
+* Rust (alternative): rsjsonnet 2026-03-23 (27be31532180c611383ceb2b7f03193ab1253487)
+* Rust: jrsonnet 0.5.0-pre97
+====
+
+== Real world
+
+=== Graalvm CI
+
+> Note: No results for C++, takes longer than a hour
+
+[cols="<,>,>,>,>"]
+|===
+| Command 
+| Mean [ms] 
+| Min [ms] 
+| Max [ms] 
+| Relative 
+
+| `Rust` 
+| 34.4 ± 1.2 
+| 31.8 
+| 37.3 
+| 1.00 
+
+| `Rust (alternative, rsjsonnet)` 
+| 68.5 ± 7.2 
+| 54.3 
+| 87.7 
+| 1.99 ± 0.22 
+
+| `Go` 
+| 600.3 ± 18.6 
+| 566.1 
+| 631.0 
+| 17.47 ± 0.82 
+
+| `Scala (native)` 
+| 69.6 ± 4.8 
+| 56.6 
+| 78.8 
+| 2.03 ± 0.16 
+
+| `Scala (GraalVM)` 
+| 65.1 ± 2.7 
+| 56.9 
+| 70.8 
+| 1.90 ± 0.10 
+|===
+
+=== Kube-prometheus manifests
+
+> Note: No results for C++, too slow, takes hours, skews results
+
+[cols="<,>,>,>,>"]
+|===
+| Command 
+| Mean [ms] 
+| Min [ms] 
+| Max [ms] 
+| Relative 
+
+| `Rust` 
+| 43.6 ± 1.8 
+| 38.5 
+| 46.9 
+| 1.00 
+
+| `Rust (alternative, rsjsonnet)` 
+| 57.9 ± 2.6 
+| 50.2 
+| 64.5 
+| 1.33 ± 0.08 
+
+| `Go` 
+| 1068.4 ± 16.5 
+| 1033.7 
+| 1090.4 
+| 24.52 ± 1.10 
+
+| `Scala (native)` 
+| 204.6 ± 2.3 
+| 201.8 
+| 209.1 
+| 4.70 ± 0.20 
+
+| `Scala (GraalVM)` 
+| 183.7 ± 2.9 
+| 179.0 
+| 193.3 
+| 4.22 ± 0.19 
+|===
+
+== Benchmarks from C++ jsonnet (/perf_tests)
+
+=== Large string join
+
+.Source
+[%collapsible]
+====
+[source,jsonnet]
+----
+{
+    text: std.join(',', std.makeArray(76846, function(_) 'x')),
+}
+
+----
+====
+
+[cols="<,>,>,>,>"]
+|===
+| Command 
+| Mean [ms] 
+| Min [ms] 
+| Max [ms] 
+| Relative 
+
+| `Rust` 
+| 2.6 ± 0.2 
+| 2.3 
+| 3.9 
+| 1.00 
+
+| `Rust (alternative, rsjsonnet)` 
+| 12.4 ± 1.7 
+| 10.1 
+| 19.5 
+| 4.84 ± 0.78 
+
+| `Go` 
+| 46.4 ± 2.9 
+| 41.4 
+| 55.9 
+| 18.04 ± 1.90 
+
+| `Scala (native)` 
+| 9.7 ± 0.9 
+| 8.0 
+| 13.9 
+| 3.77 ± 0.47 
+
+| `Scala (GraalVM)` 
+| 8.0 ± 0.6 
+| 6.7 
+| 10.7 
+| 3.12 ± 0.35 
+
+| `C++` 
+| 39.7 ± 2.9 
+| 33.2 
+| 48.3 
+| 15.44 ± 1.74 
+|===
+
+=== Large string template
+
+> Note: No results for Go, fails with os stack size exhausion
+
+> Note: No results for C++, too slow, takes hours, skews results
+
+[cols="<,>,>,>,>"]
+|===
+| Command 
+| Mean [ms] 
+| Min [ms] 
+| Max [ms] 
+| Relative 
+
+| `Rust` 
+| 2.1 ± 0.2 
+| 1.8 
+| 3.2 
+| 1.00 
+
+| `Rust (alternative, rsjsonnet)` 
+| 3.3 ± 0.3 
+| 2.9 
+| 4.5 
+| 1.56 ± 0.21 
+
+| `Scala (native)` 
+| 14.5 ± 1.1 
+| 12.2 
+| 16.8 
+| 6.91 ± 0.87 
+
+| `Scala (GraalVM)` 
+| 13.9 ± 0.7 
+| 12.0 
+| 16.0 
+| 6.63 ± 0.75 
+|===
+
+=== Realistic 1
+
+> Note: No results for C++, too slow, takes hours, skews results
+
+.Source
+[%collapsible]
+====
+[source,jsonnet]
+----
+local utils = {
+  Func3(aaaaaaa, bbbbbbb, cccc)::
+    'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/%s/XXXXX/%s/XXXXXXXXXXXXXXX/%s'
+    % [aaaaaaa, bbbbbbb, cccc],
+};
+
+
+local long_list = [
+  '001xxxxxxxxxxxxxxx-xxx',
+  '002xxxxxxxxxxxxxxxxxx-xxx',
+  '003xxxxxxxxxxxxxxxx-xxxxxxx',
+  '004xxxxxx-xxxxxx',
+  '005xxxx-xxx-xxxx',
+  '006xxx-xxx-xxxxxx',
+  '007xxx-xxx-xxxx-xxxx',
+  '008xxx-xxx-xxxx-xxxx-xxxxxxx',
+  '009xxx-xxx-xxxxx-xxxx-xxxxxxx-xxxxxx',
+  '010xxx-xxx-xxxx-xxxxxxx-xxxxxx-xxxxxxx',
+  '011xxx-xxx-xxxxx-xxxxxxxx-xxxxxxx',
+  '012xxx-xxx-xxxx-xxxxxxxx-xxxxxxx-xxxxxx',
+  '013xxx-xxx-xxxx-xxxxxxxxxx',
+  '014xxx-xxx-xxxxx-xxxxxx-xx',
+  '015xxx-xxx-xxxxxx-xxxxxxx',
+  '016xxx-xxx-xxxx-xxxxxxxx-xxxxx',
+  '017xxx-xxx-xxxx-xxxxxxxxxxxxxxx',
+  '018xxx-xxx-xxxx-xxxxxxxx-xxxxxxx-xxxxxxx',
+  '019xxx-xxx-xxxx-xxxxxxxx-xx',
+  '020xxx-xxx-xxxx-xxxxxxxxxxxxxxxx',
+  '021xxx-xxx-xxxx-xxxxxxxx-xxxxxxxxxxxx-xxx',
+  '022xxx-xxxx-xxxx-xxxx-xxxxxxx',
+  '023xxx-xxxx-xxxx-xxx-xxxxxxx-xxxxxx-xxxxxxx',
+  '024xxx-xxx-xxxx-xxx-xxxx-xxxx-xxx-xxxxxxxxx',
+  '025xxx-xxxx-xxxx-xxxxxxxxx',
+  '026xxx-xxx-xxxx-xxx-xxxxxxx',
+  '027xxx-xxx-xxxx-xxx-xxxxxxx',
+  '028xxx-xxx-xxxx-xxxxxxxxxx',
+  '029xxx-xxx-xxxx-xxxxxx',
+  '030xxx-xxx-xxxx-xxx-xxxxxxx',
+  '031xxx-xxx-xxxx-xxx-xxxxxxxx',
+  '032xxx-xxx-xxxxx-xxxxxxxxxxxx-xxxxxxx',
+  '033xxx-xxx-xxxx-xxx-xxxx-xxxx',
+  '034xxx-xxx-xxxx-xxx-xxxxxxxx-xxxxxxxx',
+  '035xxx-xxx-xxxx-xxxxxxx',
+  '036xxx-xxx-xxxx-xxxxxxxx-xxxxxxx',
+  '037xxx-xxx-xxxx-xxxxxx',
+  '038xxx-xxx-xxxx-xxxxxxxxxx',
+  '039xxxx-xxx-xxxx-xxxxxx-xxxxxx-xxxxxxx',
+  '040xxx-xxx-xxxx-xxxxxx-xxxxxxx',
+  '041xxxx-xxx-xxxx-xxxxxx-xx',
+  '042xxx-xxx-xxxx-xxxxxxxxxxx',
+  '043xxx-xxx-xxxx-xxxxxxxxxxx-xxxxxxx',
+  '044xxx-xxx-xxxx-xxxxxxx-xxx-xxxxxx',
+  '045xxx-xxx-xxxx-xxxxxx-xxx-xxxxxx-xxx',
+  '046xxx-xxx-xxxx-xxxxxx-xxx-xxxxxx-xxx',
+  '047xxx-xxx-xxxx-xxxxxx-xxx-xxxxxx-xxxxxxx',
+  '048xxx-xxx-xxxx-xxxxxx-xxx-xxxxxx-xxxxxxxx',
+  '049xxx-xxx-xxxx-xxxxxx-xxx-xxxxxx-xxxxxxxxx',
+  '050xxx-xxx-xxxxx-xxxxx-xxxxxxx',
+  '051xxx-xxx-xxxx-xxxxx-xxxxxxxx-xxxxxx',
+  '052xxx-xxx-xxxx-xxxxx-xx',
+  '053xxx-xxx-xxxx-xxxx-xxxxxxx-xxx-xxxxxxx',
+  '054xxx-xxx-xxxx-xxxx-xxxxxxx-xxx-xxxxxx',
+  '055xxx-xxx-xxxx-xxx',
+  '056xxx-xxx-xxxx-xxxxxxx-xxxxxxx',
+  '057xxx-xxx-xxxx-xxxxxxx-xxx-xxxxxxx',
+  '058xxx-xxx-xxxx-xxxxxxxxx-xxxxxx-xxxxxxx',
+  '059xxx-xxx-xxxx-xx-xxxxxxxxxxx-xxxxx',
+  '060xxx-xxx-xxxx-xxxxxxxxxxxxxx-xxxxxxx',
+  '061xxx-xxx-xxxx-xxxxxxxx-xxxxxxx',
+  '062xxx-xxx-xxxx-xxxxxxxxxxxxx-xxxxxxx',
+  '063xxx-xxx-xxxx-xxxxxx-xxxxxxx',
+  '064xxx-xxx-xxxxx-xxxxxx-xxxxxxx',
+  '065xxx-xxx-xxxx-xxxxx-xxxxx',
+  '066xxx-xxx-xxxx-xxxxx-xxxx',
+  '067xxx-xxx-xxxx-xxxxxxxxxxxxxxxxx',
+  '068xxx-xxx-xxxx-xxxxxxxx-xxxxx-xxx',
+  '069xxx-xxx-xxxx-xxxxxxxx-xx-xxx-xxxxxxxx',
+  '070xxx-xxx-xxxx-xxxxxxxx-xxxxxx-xxxxxxx',
+  '071xxx-xxx-xxxx-xxxxxxxxxx',
+  '072xxx-xxxx-xxxx-xxxxxxxxxxxxxxxx',
+  '073xxx-xxx-xxxx-xxxxxx-xxxxxx-xxxxxxx',
+  '074xxx-xxx-xxxx-xxxxxxx-xxxxxxxxxxxxx',
+  '075xxx-xxx-xxxx-xxxxxxx-xxxxxxxxxxxxx-xxxxxxxxx',
+  '076xxx-xxx-xxxx-xxxxxxxxxxxxx-xxxxxxx',
+  '077xxx-xxx-xxxx-xxxxxxxxx-xxxxxxx-x2',
+  '078xxx-xxx-xxxx-xxx',
+  '079xxx-xxx-xxxx-xxxxxxxxxxxx',
+  '080xxx-xxx-xxxx-xxxxxxxxx-xxxxxxxx',
+  '081xxx-xxx-xxxx-xxxxxxxx-xxxxxxxxx',
+  '082xxx-xxx-xxxx-xxxxxxxxx',
+  '083xxx-xxx-xxxx-xxxxxxx',
+  '084xxx-xxx-xxxx-xxxxxxx-xxxxxx',
+  '085xxxx-xxx-xxxxxxx-xxxxx-xxxx',
+  '086xxx-xxx-xxxxxxxx-xxxx-xxxxxxxxxx',
+  '087xxx-xxx-xxxxxxx-xxxxxx-xxxxxxx',
+  '088xxx-xxx-xxxxxxx-xxxxxxxx',
+  '089xxx-xxx-xxxxxxxx-xxxxxxx',
+  '090xxx-xxx-xxxxxxxx-xxxxxxx-xxxxxx',
+  '091xxx-xxxx-xxxxxxxxxx',
+  '092xxx-xxx-xxxxxx-xx',
+  '093xxx-xxx-xxxxxxx',
+  '094xxx-xxx-xxxxxxx-xxxxx',
+  '095xxx-xxx-xxxxxxxxxx',
+  '096xxx-xxx-xxxxxxxxxxxxxxx',
+  '098xxx-xxx-xxxxxxxxxxxxxxxxx',
+  '098xxx-xxx-xxxxxxxx-xxxxxxx-xxxxxxx',
+  '099xxx-xxx-xxxxxxxx-xx',
+  '100xxx-xxx-xxxx-xxxxxxxxxxx-xxxxxxx',
+  '101xxx-xxxx-xxxxxxxxxxxxxxxx',
+  '102xxx-xxx-xxxxxxxxxxxxxxxxxx',
+  '103xxx-xxx-xxxxxxxx-xxxxxxxxxxxx-xxx',
+  '104xxx-xxx-xxxx-xxxxxxx',
+  '105xxx-xxx-xxx-xxxxxxx-xxxxxx-xxxxxxx',
+  '106xxx-xxx-xxx-xxxx-xxxx-xxx-xxxxxxxxx',
+  '107xxx-xxx-xxxxxxxxx',
+  '108xxx-xxx-xxx-xxxxxxx',
+  '109xxx-xxx-xxx-xxxxxxx',
+  '110xxx-xxxx-xxxxx',
+  '111xxx-xxx-xxx-xxxx-xxxx',
+  '112xxx-xxx-xxx-xxxxxxx',
+  '113xxx-xxx-xxx-xxxxxxx',
+  '114xxx-xxx-xxxxxxxxxxxx-xxxxxxx',
+  '115xxx-xxx-xxx-xxxx-xxxx',
+  '116xxx-xxx-xxx-xxxxxxxx-xxxxxxxx',
+  '117xxx-xxx-xxxxxxx',
+  '118xxx-xxx-xxxxxxxx-xxxxxxx',
+  '119xxx-xxx-xxxxxx',
+  '120xxxx-xxx-xxxxxxxxxx',
+  '121xxx-xxx-xxxxxx-xxxxxx-xxxxxxx',
+  '122xxx-xxx-xxxxxx-xxxxxxx',
+  '123xxx-xxx-xxxxxx-xx',
+  '124xxxx-xxx-xxx-xxxx-xxxxxxx',
+  '125xxx-xxx-xxxxxxxxxxx',
+  '126xxx-xxx-xxxxxxxxxxx-xxxxxxx',
+  '127xxx-xxx-xxxxxx-xxx-xxxxxx',
+  '128xxx-xxx-xxxxxxxxxx',
+  '129xxx-xxx-xxxxxxxxxx-xxx',
+  '130xxx-xxx-xxxxx-xxxxxxx',
+  '131xxx-xxx-xxxxxx-xxxxxxxx-xxx',
+  '132xxx-xxx-xxxxx-xxxxxxxx-xxxxxx',
+  '133xxx-xxx-xxxxx-xx',
+  '134xxx-xxx-xxxx-xxxxxxx-xxx-xxxxxxx',
+  '135xxx-xxx-xxxx-xxxxxxx-xxx-xxxxxx',
+  '136xxx-xxx-xxxxxxxxxxxxxxx',
+  '137xxx-xxx-xxx',
+  '138xxx-xxx-xxxxxxx-xxxxxxx',
+  '139xxx-xxx-xxxxxxx-xxx-xxxxxxx',
+  '140xxx-xxx-xxxxxxxxx-xxxxxx-xxxxxxx',
+  '141xxx-xxx-xxxxxxxxxx-xxxx-xxxxxxx',
+  '142xxx-xxx-xx-xxxxxxxxxx-xxxxx',
+  '143xxx-xxx-xxxxxxxxxxxxxx-xxxxxxx',
+  '144xxx-xxx-xxxxxxxxxxxxxxxxx',
+  '145xxx-xxx-xxxxxxxx-xxxxxxx',
+  '146xxx-xxx-xxxxxxxxxxxxx-xxxxxxx',
+  '147xxx-xxx-xxxxxxx-xxxxxxx',
+  '148xxx-xxx-xxxxxx-xxxxxxx',
+  '149xxx-xxx-xxxxx-xxxxx',
+  '150xxx-xxx-xxxxx-xxxx',
+  '151xxx-xxx-xxxxxxxxxxxxxxxxx',
+  '152xxx-xxx-xxxxxxxxxxxxxxxxxxx',
+  '153xxx-xxx-xxxxxxxxx-xxxxx-xxx',
+  '154xxx-xxx-xxxxxxxx-xxxxx-xxxx-xxxx',
+  '155xxx-xxx-xxxxxxxx-xxxxxxxxxxxx-xxxx',
+  '156xxx-xxx-xxxxxxxx-xx-xxx-xxxxxxxx',
+  '157xxx-xxx-xxxxxxxx-xxxxxx-xxxxxxx',
+  '158xxx-xxx-xxxxxxxxxx',
+  '159xxx-xxx-xxxx-xxxxxx',
+  '160xxx-xxx-xxxxxxxxxx',
+  '161xxx-xxx-xxxxxxxxxxxxx',
+  '162xxx-xxx-xxxxxxxxxxxxxxxx',
+  '163xxx-xxx-xxxxx-xxxxxx-xxxxxxx',
+  '164xxx-xxx-xxxxxxx-xxxxxxxxxxxxx',
+  '165xxx-xxx-xxxxxxxxxxxxxx-xxxxxxx',
+  '166xxx-xxx-xxxxxxxxx-xxxxxxx-x2',
+  '167xxx-xxx-xxx',
+  '168xxx-xxx-xxxxxxxxxxxx',
+  '169xxx-xxx-xxxxxxxxx-xxxxxxxx',
+  '170xxx-xxx-xxxxxxxxx-xxx-xxxxxxx',
+  '171xxx-xxx-xxxxxxxxx',
+  '172xxx-xxxx-xxxxxxxxx',
+  '173xxx-xxx',
+  '174xxx-xxxxxx-xxxxxxx',
+  '175xxx-xxxxxx-xxxxxx-xxxx',
+  '176xxx-xxxxxx-xxxxx',
+  '177xxx-xxxxx-xxxxxxxx',
+  '178xxx-xxxxxx',
+  '179xxx-xxxxxxx-xxxx',
+  '180xxx-xxxxxxx-xxxx-xxxx',
+  '181xxx-xxxxxxx-xxxx-xxxxxxx',
+  '182xxx-xxxxxxx-xxxx-xxxxxxxxxxxxxxx',
+  '183xxx-xxxxxxxx-xxxx-xxxxx',
+  '184xxx-xxxxxxx-xxxx-xxxxxxx',
+  '185xxx-xxxxxxx-xxxx-xxxxxxxx-xxxxxxx',
+  '186xxx-xxxxxxx-xxxx-xxx',
+  '187xxx-xxxxxxx-xxxx-xxxxxxx-xxx-xxxxxxx',
+  '188xxx-xxxxxxx-xxxx-xxxxxxxxxxxxxx-xxxxxxx',
+  '189xxx-xxxxxxxx-xxxx-xxxxxxxxxxxxxxxxx',
+  '190xxx-xxxxxxx-xxxx-xxxxx-xxxxxx-xxxxxxx',
+  '191xxx-xxxxxxx-xxxxxxxxxx',
+  '192xxx-xxxxxxx-xxxxxxx',
+  '193xxx-xxxxxxx-xxxxxxxxxxxxxxx',
+  '194xxx-xxxxxxx-xxxxx',
+  '195xxx-xxxxxxx-xxxxxxx',
+  '196xxx-xxxxxxx-xxxxxxxx-xxxxxxx',
+  '197xxx-xxxxxxx-xxx',
+  '198xxx-xxxxxxx-xxxxxxx-xxx-xxxxxxx',
+  '199xxx-xxxxxxx-xxxxxxxxxxxxxx-xxxxxxx',
+  '200xxx-xxxxxxxx-xxxxxxxxxxxxxxxxx',
+  '201xxx-xxxxxxx-xxxxx-xxxxxx-xxxxxxx',
+  '202xxx-xxx',
+  '203xxx-xxx-xxxxxx',
+  '204xxxxxxxxx-xxx',
+  '205xxxxxxxxxxx-xxx',
+  '206xxxxxxxxx-xxxxxxx',
+  '207xxxx-xxxxxx-xxxxxxxxxxx-xxxxx1',
+  '208xxxx-xxxxxxxx-xxxxxxxx-xxxxx1',
+  '209xxxx-xxxxxxx-xxxxxxx-xxxxx1',
+  '209xxxx-xxxxxxx-xxxxxxx-xxxxx2',
+  '210xxxx-xxxx-xxxxxxx-xxxxx1',
+  '211xxxx-xxxxx-xxxxxxxx1-xxxxx1',
+  '212xxxx-xxxx-xxxxxxxx2-xxxxx1',
+  '213xxxx-xxxx-xxxxxxx1-xxxxx1',
+  '214xxxx-xxxx-xxxxxxx2-xxxxx1',
+  '215xxxxxxxxx-xxxxxx',
+  '216xxxxxxxxx-xxxxxxx',
+  '217xxxxxxxxx-xxxx',
+];
+
+{
+  'yyyyyyyyy': {
+    local Func3(z, n) = utils.Func3('yyyyyyyyy', z, n),
+
+    global: {
+      [n]: {
+        members: [
+          Func3(z, '%s-gggg-%s-%s' % [n, z, suffix]),
+          for z in ['ooooooo-a', 'ooooooo-b', 'ooooooo-c',
+                       'ooooooo-a', 'ooooooo-b', 'ooooooo-c']
+          for suffix in ['a', 'b', 'c']
+        ],
+      }
+      for n in long_list
+    },
+  },
+}
+
+----
+====
+
+[cols="<,>,>,>,>"]
+|===
+| Command 
+| Mean [ms] 
+| Min [ms] 
+| Max [ms] 
+| Relative 
+
+| `Rust` 
+| 5.9 ± 0.4 
+| 5.4 
+| 7.4 
+| 1.00 
+
+| `Rust (alternative, rsjsonnet)` 
+| 7.8 ± 0.4 
+| 7.1 
+| 9.2 
+| 1.31 ± 0.11 
+
+| `Go` 
+| 3158.3 ± 65.5 
+| 3011.3 
+| 3245.6 
+| 531.91 ± 35.10 
+
+| `Scala (native)` 
+| 12.7 ± 0.9 
+| 10.6 
+| 15.9 
+| 2.15 ± 0.21 
+
+| `Scala (GraalVM)` 
+| 13.8 ± 0.8 
+| 11.7 
+| 17.2 
+| 2.32 ± 0.20 
+|===
+
+=== Realistic 2
+
+> Note: No results for C++, too slow, takes hours, skews results
+
+.Source
+[%collapsible]
+====
+[source,jsonnet]
+----
+local rfc3339(timestamp) = '1970-01-01T00:00:00Z';
+
+local name1(a, b, c) =
+  'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%sBBBBBBB%sCCCCCCCCCCC%s'
+  % [a, b, c];
+
+local name2(x) =
+  'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX%s' % x;
+
+local T1 = 'PPPPPPPPPPPPPPPPPPPPPPP';
+local T2 = 'QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ';
+
+local LOCATIONS = [
+  'europe-west1-b',
+  'europe-west1-c',
+  'europe-west1-d',
+  'europe-west2-a',
+  'europe-west2-b',
+  'europe-west2-c',
+  'europe-west3-a',
+  'europe-west3-b',
+  'europe-west3-c',
+  'europe-west4-a',
+  'europe-west4-b',
+  'europe-west4-c',
+  'us-central1-a',
+  'us-central1-b',
+  'us-central1-c',
+  'us-central1-f',
+  'us-east1-b',
+  'us-east1-c',
+  'us-east1-d',
+  'us-east4-a',
+  'us-east4-b',
+  'us-east4-c',
+  'us-west1-a',
+  'us-west1-b',
+  'us-west1-c',
+];
+
+
+// The return value is a function to allow it to be parameterized.
+function(
+  timestamp=0,
+  x='xxxxxxxxxxxxxxxxxxx',
+  prefix='prefix',
+  num1=50,
+  count=25,
+  offset=0,
+)
+  local rfc_timestamp = rfc3339(timestamp);
+
+  local func1(i) =
+    local location = LOCATIONS[i % std.length(LOCATIONS)];
+    [
+      local name = '%s-%000d-%000d' % [prefix, i, j];
+      {
+        field_zz1: rfc_timestamp,
+        fie_z2: {
+          field_z3: name1(x, location, name),
+          field_zzzzzzzzzz4: name2(x),
+          field_zzz5: [name],
+          field_z6: T1,
+          field_z7: location,
+          fi_8: '???',
+          fiel_z9: '99',
+        },
+      }
+      for j in std.range(0, num1 - 1)
+    ];
+
+  local func2(i) =
+    local location = LOCATIONS[i % std.length(LOCATIONS)];
+    local all = [
+      name1(x, location, '%s-%000d-%000d' % [prefix, i, j])
+      for j in std.range(0, num1 - 1)
+    ];
+    [
+      {
+        field_yy1: rfc_timestamp,
+        field_yyyyy2: 'EEEE',
+        field_yyyyy3: {
+          field_y4: T2,
+          field_yyyyyyy5: p,
+          field_yyyyyyy6: q,
+        },
+      }
+      for p in all
+      for q in all
+      if p != q
+    ];
+
+
+  {
+    field_x1: '-----',
+    field_xxxxxxxxxxxxxxxx2: std.join([], [
+      func1(offset * count + i)
+      for i in std.range(0, count - 1)
+    ]),
+    field_xxxxxxxxxxxxxxxxxxxxxx3: std.join([], [
+      func2(offset * count + i)
+      for i in std.range(0, count - 1)
+    ]),
+  }
+
+
+----
+====
+
+[cols="<,>,>,>,>"]
+|===
+| Command 
+| Mean [ms] 
+| Min [ms] 
+| Max [ms] 
+| Relative 
+
+| `Rust` 
+| 120.9 ± 3.5 
+| 114.0 
+| 127.1 
+| 1.00 
+
+| `Rust (alternative, rsjsonnet)` 
+| 163.4 ± 3.8 
+| 154.4 
+| 170.6 
+| 1.35 ± 0.05 
+
+| `Go` 
+| 3160.3 ± 54.6 
+| 3034.7 
+| 3242.9 
+| 26.15 ± 0.87 
+
+| `Scala (native)` 
+| 417.8 ± 4.2 
+| 405.6 
+| 426.0 
+| 3.46 ± 0.10 
+
+| `Scala (GraalVM)` 
+| 409.1 ± 4.5 
+| 401.8 
+| 421.4 
+| 3.39 ± 0.10 
+|===
+
+== Benchmarks from C++ jsonnet (/benchmarks)
+
+=== Tail call
+
+.Source
+[%collapsible]
+====
+[source,jsonnet]
+----
+/*
+Copyright 2015 Google Inc. All rights reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+local sum(x) =
+  if x == 0 then
+    0
+  else
+    x + sum(x - 1);
+sum(300)
+
+----
+====
+
+[cols="<,>,>,>,>"]
+|===
+| Command 
+| Mean [µs] 
+| Min [µs] 
+| Max [µs] 
+| Relative 
+
+| `Rust` 
+| 865.2 ± 106.0 
+| 723.0 
+| 1544.2 
+| 1.00 
+
+| `Rust (alternative, rsjsonnet)` 
+| 1200.9 ± 144.0 
+| 1030.4 
+| 2238.5 
+| 1.39 ± 0.24 
+
+| `Go` 
+| 2559.0 ± 187.5 
+| 2033.0 
+| 3289.3 
+| 2.96 ± 0.42 
+
+| `Scala (native)` 
+| 2406.8 ± 227.0 
+| 2030.4 
+| 3547.3 
+| 2.78 ± 0.43 
+
+| `Scala (GraalVM)` 
+| 1858.1 ± 184.4 
+| 1434.9 
+| 2770.1 
+| 2.15 ± 0.34 
+
+| `C++` 
+| 18460.1 ± 1115.1 
+| 16827.0 
+| 22068.8 
+| 21.34 ± 2.91 
+|===
+
+=== Inheritance recursion
+
+.Source
+[%collapsible]
+====
+[source,jsonnet]
+----
+/*
+Copyright 2015 Google Inc. All rights reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+local Fib = {
+  n: 1,
+  local outer = self,
+  r: if self.n <= 1 then 1 else (Fib { n: outer.n - 1 }).r + (Fib { n: outer.n - 2 }).r,
+};
+
+(Fib { n: 25 }).r
+
+----
+====
+
+[cols="<,>,>,>,>"]
+|===
+| Command 
+| Mean [ms] 
+| Min [ms] 
+| Max [ms] 
+| Relative 
+
+| `Rust` 
+| 160.1 ± 2.0 
+| 155.9 
+| 163.7 
+| 3.43 ± 0.10 
+
+| `Rust (alternative, rsjsonnet)` 
+| 115.6 ± 1.6 
+| 113.5 
+| 119.3 
+| 2.48 ± 0.07 
+
+| `Go` 
+| 444.7 ± 8.6 
+| 429.2 
+| 467.9 
+| 9.52 ± 0.31 
+
+| `Scala (native)` 
+| 46.7 ± 1.2 
+| 44.3 
+| 50.2 
+| 1.00 
+
+| `Scala (GraalVM)` 
+| 58.3 ± 1.6 
+| 55.1 
+| 61.5 
+| 1.25 ± 0.05 
+
+| `C++` 
+| 1216.9 ± 9.0 
+| 1204.7 
+| 1237.2 
+| 26.06 ± 0.69 
+|===
+
+=== Simple recursive call
+
+.Source
+[%collapsible]
+====
+[source,jsonnet]
+----
+/*
+Copyright 2015 Google Inc. All rights reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+local fibonacci(n) =
+  if n <= 1 then
+    1
+  else
+    fibonacci(n - 1) + fibonacci(n - 2);
+
+fibonacci(25)
+
+----
+====
+
+[cols="<,>,>,>,>"]
+|===
+| Command 
+| Mean [ms] 
+| Min [ms] 
+| Max [ms] 
+| Relative 
+
+| `Rust` 
+| 35.8 ± 0.7 
+| 34.1 
+| 37.5 
+| 1.99 ± 0.10 
+
+| `Rust (alternative, rsjsonnet)` 
+| 39.9 ± 1.6 
+| 37.6 
+| 48.9 
+| 2.22 ± 0.13 
+
+| `Go` 
+| 194.3 ± 4.2 
+| 187.4 
+| 205.0 
+| 10.81 ± 0.54 
+
+| `Scala (native)` 
+| 18.0 ± 0.8 
+| 16.5 
+| 20.6 
+| 1.00 
+
+| `Scala (GraalVM)` 
+| 25.2 ± 0.9 
+| 23.2 
+| 28.4 
+| 1.40 ± 0.08 
+
+| `C++` 
+| 78.8 ± 1.5 
+| 74.9 
+| 82.1 
+| 4.38 ± 0.21 
+|===
+
+=== Foldl string concat
+
+.Source
+[%collapsible]
+====
+[source,jsonnet]
+----
+std.foldl(function(e, res) e + res, std.makeArray(20000, function(i) 'aaaaa'), '')
+
+----
+====
+
+[cols="<,>,>,>,>"]
+|===
+| Command 
+| Mean [ms] 
+| Min [ms] 
+| Max [ms] 
+| Relative 
+
+| `Rust` 
+| 3.7 ± 0.3 
+| 3.4 
+| 5.0 
+| 1.00 
+
+| `Rust (alternative, rsjsonnet)` 
+| 96.0 ± 1.7 
+| 94.2 
+| 99.7 
+| 25.82 ± 2.05 
+
+| `Go` 
+| 4076.3 ± 32.7 
+| 4016.9 
+| 4129.6 
+| 1096.62 ± 85.35 
+
+| `Scala (native)` 
+| 328.6 ± 33.7 
+| 267.8 
+| 406.5 
+| 88.40 ± 11.37 
+
+| `Scala (GraalVM)` 
+| 420.9 ± 10.7 
+| 387.9 
+| 436.4 
+| 113.22 ± 9.23 
+
+| `C++` 
+| 564.6 ± 6.1 
+| 551.0 
+| 575.6 
+| 151.90 ± 11.88 
+|===
+
+=== Array sorts
+
+.Source
+[%collapsible]
+====
+[source,jsonnet]
+----
+// A benchmark for builtin sort
+
+local reverse = std.reverse;
+local sort = std.sort;
+
+true
+&& std.assertEqual(std.range(1, 500), sort(std.range(1, 500)))
+&& std.assertEqual(std.range(1, 1000), sort(std.range(1, 1000)))
+&& std.assertEqual(reverse(std.range(1, 1000)), sort(std.range(1, 1000), keyF=function(x) -x))
+&& std.assertEqual(std.range(1, 1000), sort(reverse(std.range(1, 1000))))
+&& std.assertEqual(std.makeArray(2000, function(i) std.floor((i + 2) / 2)), sort(std.range(1, 1000) + reverse(std.range(1, 1000))))
+
+----
+====
+
+[cols="<,>,>,>,>"]
+|===
+| Command 
+| Mean [ms] 
+| Min [ms] 
+| Max [ms] 
+| Relative 
+
+| `Rust` 
+| 1.3 ± 0.1 
+| 1.2 
+| 2.3 
+| 1.00 
+
+| `Rust (alternative, rsjsonnet)` 
+| 3.4 ± 0.2 
+| 3.1 
+| 5.5 
+| 2.52 ± 0.30 
+
+| `Go` 
+| 5.4 ± 0.3 
+| 4.8 
+| 6.5 
+| 4.05 ± 0.43 
+
+| `Scala (native)` 
+| 4.2 ± 0.4 
+| 3.5 
+| 5.8 
+| 3.09 ± 0.41 
+
+| `Scala (GraalVM)` 
+| 3.0 ± 0.3 
+| 2.4 
+| 5.1 
+| 2.21 ± 0.30 
+
+| `C++` 
+| 2057.1 ± 19.0 
+| 2020.1 
+| 2093.3 
+| 1531.53 ± 146.37 
+|===
+
+=== Lazy array
+
+.Source
+[%collapsible]
+====
+[source,jsonnet]
+----
+local f2(f) = function(x) f(f(x));
+local id(x) = x;
+
+local slowId = std.makeArray(20, function(i) if i == 0 then id else f2(slowId[i - 1]));
+
+slowId[15](42)
+
+----
+====
+
+[cols="<,>,>,>,>"]
+|===
+| Command 
+| Mean [ms] 
+| Min [ms] 
+| Max [ms] 
+| Relative 
+
+| `Rust` 
+| 54.8 ± 6.6 
+| 42.7 
+| 65.5 
+| 5.12 ± 0.72 
+
+| `Rust (alternative, rsjsonnet)` 
+| 10.7 ± 0.8 
+| 9.6 
+| 14.7 
+| 1.00 
+
+| `Go` 
+| 385.8 ± 8.2 
+| 373.7 
+| 402.5 
+| 36.03 ± 2.72 
+
+| `Scala (native)` 
+| 19.3 ± 1.4 
+| 15.9 
+| 22.1 
+| 1.81 ± 0.18 
+
+| `Scala (GraalVM)` 
+| 18.5 ± 1.4 
+| 14.1 
+| 21.2 
+| 1.72 ± 0.18 
+
+| `C++` 
+| 103.5 ± 2.5 
+| 99.3 
+| 109.7 
+| 9.67 ± 0.74 
+|===
+
+=== Inheritance function recursion
+
+.Source
+[%collapsible]
+====
+[source,jsonnet]
+----
+local fibnext = {
+  a: super.a + super.b,
+  b: super.a,
+};
+local fib(n) =
+  if n == 0 then
+    { a: 1, b: 1 }
+  else
+    fib(n - 1) + fibnext;
+
+fib(25)
+
+----
+====
+
+[cols="<,>,>,>,>"]
+|===
+| Command 
+| Mean [µs] 
+| Min [µs] 
+| Max [µs] 
+| Relative 
+
+| `Rust` 
+| 743.5 ± 89.5 
+| 625.2 
+| 1784.7 
+| 1.00 
+
+| `Rust (alternative, rsjsonnet)` 
+| 1180.2 ± 144.6 
+| 1017.7 
+| 2210.2 
+| 1.59 ± 0.27 
+
+| `Go` 
+| 1414.3 ± 71.8 
+| 1174.2 
+| 2001.0 
+| 1.90 ± 0.25 
+
+| `Scala (native)` 
+| 2394.1 ± 237.9 
+| 2011.3 
+| 4013.8 
+| 3.22 ± 0.50 
+
+| `Scala (GraalVM)` 
+| 1814.9 ± 205.1 
+| 1439.8 
+| 2826.0 
+| 2.44 ± 0.40 
+
+| `C++` 
+| 789224.2 ± 7732.9 
+| 768789.6 
+| 805741.8 
+| 1061.50 ± 128.22 
+|===
+
+=== String strips
+
+> Note: No results for C++, too slow, takes hours, skews results
+
+.Source
+[%collapsible]
+====
+[source,jsonnet]
+----
+// This string must be longer than max stack frames
+local veryLongString = std.join('', std.repeat(['e'], 510));
+
+std.assertEqual(std.stripChars(veryLongString + 'ok' + veryLongString, 'e'), 'ok') &&
+std.assertEqual(std.lstripChars(veryLongString + 'ok', 'e'), 'ok') &&
+std.assertEqual(std.rstripChars('ok' + veryLongString, 'e'), 'ok') &&
+
+true
+
+----
+====
+
+[cols="<,>,>,>,>"]
+|===
+| Command 
+| Mean [µs] 
+| Min [µs] 
+| Max [µs] 
+| Relative 
+
+| `Rust` 
+| 751.5 ± 98.9 
+| 625.9 
+| 1451.6 
+| 1.00 
+
+| `Rust (alternative, rsjsonnet)` 
+| 1182.3 ± 147.4 
+| 1018.3 
+| 2328.8 
+| 1.57 ± 0.29 
+
+| `Go` 
+| 5375.9 ± 293.0 
+| 4843.7 
+| 6930.0 
+| 7.15 ± 1.02 
+
+| `Scala (native)` 
+| 2377.2 ± 226.5 
+| 2029.3 
+| 3675.7 
+| 3.16 ± 0.51 
+
+| `Scala (GraalVM)` 
+| 1884.6 ± 188.5 
+| 1486.8 
+| 3105.8 
+| 2.51 ± 0.41 
+|===
+
+=== Big object
+
+.Source
+[%collapsible]
+====
+[source,jsonnet]
+----
+// Generator source
+local n = 2000;
+
+local objLocal(name, body) = 'local ' + name + ' = ' + body + ',';
+local objField(name, body) = name + ': ' + body + ',';
+
+local allLocals =
+  std.makeArray(n, function(i) objLocal('l' + i, '1'));
+
+local allFields =
+  std.makeArray(n, function(i) objField('f' + i, '2'));
+
+local indent = '  ';
+local indentAndSeparate(s) = indent + s + '\n';
+
+local objContents = std.map(indentAndSeparate, allLocals + allFields);
+
+local objectBody = std.join('', objContents);
+'{\n' + objectBody + '}\n'
+
+----
+====
+
+[cols="<,>,>,>,>"]
+|===
+| Command 
+| Mean [µs] 
+| Min [µs] 
+| Max [µs] 
+| Relative 
+
+| `Rust` 
+| 839.2 ± 97.2 
+| 704.3 
+| 1562.2 
+| 1.00 
+
+| `Rust (alternative, rsjsonnet)` 
+| 1312.8 ± 146.1 
+| 1129.8 
+| 2440.5 
+| 1.56 ± 0.25 
+
+| `Go` 
+| 2544.5 ± 118.7 
+| 2262.5 
+| 3078.4 
+| 3.03 ± 0.38 
+
+| `Scala (native)` 
+| 3756.8 ± 386.3 
+| 3205.7 
+| 5865.4 
+| 4.48 ± 0.69 
+
+| `Scala (GraalVM)` 
+| 3035.7 ± 269.8 
+| 2498.4 
+| 4461.3 
+| 3.62 ± 0.53 
+
+| `C++` 
+| 16199.6 ± 864.3 
+| 14763.2 
+| 19331.2 
+| 19.30 ± 2.46 
+|===
+
+== Benchmarks from Go jsonnet (builtins)
+
+=== std.base64
+
+> Note: No results for C++, too slow, takes hours, skews results
+
+.Source
+[%collapsible]
+====
+[source,jsonnet]
+----
+{
+    foo: [
+        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)
+    ],
+}
+----
+====
+
+[cols="<,>,>,>,>"]
+|===
+| Command 
+| Mean [ms] 
+| Min [ms] 
+| Max [ms] 
+| Relative 
+
+| `Rust` 
+| 1.2 ± 0.1 
+| 1.1 
+| 2.4 
+| 1.00 
+
+| `Rust (alternative, rsjsonnet)` 
+| 2.3 ± 0.2 
+| 2.1 
+| 3.5 
+| 1.89 ± 0.27 
+
+| `Go` 
+| 8.1 ± 0.4 
+| 7.4 
+| 9.8 
+| 6.54 ± 0.79 
+
+| `Scala (native)` 
+| 4.8 ± 0.4 
+| 4.1 
+| 6.6 
+| 3.89 ± 0.56 
+
+| `Scala (GraalVM)` 
+| 3.5 ± 0.3 
+| 2.9 
+| 4.6 
+| 2.83 ± 0.38 
+|===
+
+=== std.base64Decode
+
+.Source
+[%collapsible]
+====
+[source,jsonnet]
+----
+{
+    foo: [
+        std.base64Decode("TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuIFNlZCB0dXJwaXMgdGluY2lkdW50IGlkIGFsaXF1ZXQgcmlzdXMuIEVnZXQgbWF1cmlzIHBoYXJldHJhIGV0IHVsdHJpY2VzIG5lcXVlIG9ybmFyZSBhZW5lYW4gZXVpc21vZC4gRGlhbSBxdWlzIGVuaW0gbG9ib3J0aXMgc2NlbGVyaXNxdWUgZmVybWVudHVtLiBWYXJpdXMgZHVpcyBhdCBjb25zZWN0ZXR1ciBsb3JlbSBkb25lYyBtYXNzYSBzYXBpZW4uIERpYW0gc2l0IGFtZXQgbmlzbCBzdXNjaXBpdCBhZGlwaXNjaW5nIGJpYmVuZHVtIGVzdCB1bHRyaWNpZXMgaW50ZWdlci4gTGVjdHVzIHVybmEgZHVpcyBjb252YWxsaXMgY29udmFsbGlzIHRlbGx1cy4gTmliaCBpcHN1bSBjb25zZXF1YXQgbmlzbCB2ZWwgcHJldGl1bSBsZWN0dXMgcXVhbSBpZCBsZW8uIEZldWdpYXQgaW4gYW50ZSBtZXR1cyBkaWN0dW0gYXQgdGVtcG9yIGNvbW1vZG8uIFZlbGl0IGRpZ25pc3NpbSBzb2RhbGVzIHV0IGV1IHNlbSBpbnRlZ2VyLiBEaWN0dW0gc2l0IGFtZXQganVzdG8gZG9uZWMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuIFNlZCB0dXJwaXMgdGluY2lkdW50IGlkIGFsaXF1ZXQgcmlzdXMuIEVnZXQgbWF1cmlzIHBoYXJldHJhIGV0IHVsdHJpY2VzIG5lcXVlIG9ybmFyZSBhZW5lYW4gZXVpc21vZC4gRGlhbSBxdWlzIGVuaW0gbG9ib3J0aXMgc2NlbGVyaXNxdWUgZmVybWVudHVtLiBWYXJpdXMgZHVpcyBhdCBjb25zZWN0ZXR1ciBsb3JlbSBkb25lYyBtYXNzYSBzYXBpZW4uIERpYW0gc2l0IGFtZXQgbmlzbCBzdXNjaXBpdCBhZGlwaXNjaW5nIGJpYmVuZHVtIGVzdCB1bHRyaWNpZXMgaW50ZWdlci4gTGVjdHVzIHVybmEgZHVpcyBjb252YWxsaXMgY29udmFsbGlzIHRlbGx1cy4gTmliaCBpcHN1bSBjb25zZXF1YXQgbmlzbCB2ZWwgcHJldGl1bSBsZWN0dXMgcXVhbSBpZCBsZW8uIEZldWdpYXQgaW4gYW50ZSBtZXR1cyBkaWN0dW0gYXQgdGVtcG9yIGNvbW1vZG8uIFZlbGl0IGRpZ25pc3NpbSBzb2RhbGVzIHV0IGV1IHNlbSBpbnRlZ2VyLiBEaWN0dW0gc2l0IGFtZXQganVzdG8gZG9uZWMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuIFNlZCB0dXJwaXMgdGluY2lkdW50IGlkIGFsaXF1ZXQgcmlzdXMuIEVnZXQgbWF1cmlzIHBoYXJldHJhIGV0IHVsdHJpY2VzIG5lcXVlIG9ybmFyZSBhZW5lYW4gZXVpc21vZC4gRGlhbSBxdWlzIGVuaW0gbG9ib3J0aXMgc2NlbGVyaXNxdWUgZmVybWVudHVtLiBWYXJpdXMgZHVpcyBhdCBjb25zZWN0ZXR1ciBsb3JlbSBkb25lYyBtYXNzYSBzYXBpZW4uIERpYW0gc2l0IGFtZXQgbmlzbCBzdXNjaXBpdCBhZGlwaXNjaW5nIGJpYmVuZHVtIGVzdCB1bHRyaWNpZXMgaW50ZWdlci4gTGVjdHVzIHVybmEgZHVpcyBjb252YWxsaXMgY29udmFsbGlzIHRlbGx1cy4gTmliaCBpcHN1bSBjb25zZXF1YXQgbmlzbCB2ZWwgcHJldGl1bSBsZWN0dXMgcXVhbSBpZCBsZW8uIEZldWdpYXQgaW4gYW50ZSBtZXR1cyBkaWN0dW0gYXQgdGVtcG9yIGNvbW1vZG8uIFZlbGl0IGRpZ25pc3NpbSBzb2RhbGVzIHV0IGV1IHNlbSBpbnRlZ2VyLiBEaWN0dW0gc2l0IGFtZXQganVzdG8gZG9uZWMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy5Mb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4gU2VkIHR1cnBpcyB0aW5jaWR1bnQgaWQgYWxpcXVldCByaXN1cy4gRWdldCBtYXVyaXMgcGhhcmV0cmEgZXQgdWx0cmljZXMgbmVxdWUgb3JuYXJlIGFlbmVhbiBldWlzbW9kLiBEaWFtIHF1aXMgZW5pbSBsb2JvcnRpcyBzY2VsZXJpc3F1ZSBmZXJtZW50dW0uIFZhcml1cyBkdWlzIGF0IGNvbnNlY3RldHVyIGxvcmVtIGRvbmVjIG1hc3NhIHNhcGllbi4gRGlhbSBzaXQgYW1ldCBuaXNsIHN1c2NpcGl0IGFkaXBpc2NpbmcgYmliZW5kdW0gZXN0IHVsdHJpY2llcyBpbnRlZ2VyLiBMZWN0dXMgdXJuYSBkdWlzIGNvbnZhbGxpcyBjb252YWxsaXMgdGVsbHVzLiBOaWJoIGlwc3VtIGNvbnNlcXVhdCBuaXNsIHZlbCBwcmV0aXVtIGxlY3R1cyBxdWFtIGlkIGxlby4gRmV1Z2lhdCBpbiBhbnRlIG1ldHVzIGRpY3R1bSBhdCB0ZW1wb3IgY29tbW9kby4gVmVsaXQgZGlnbmlzc2ltIHNvZGFsZXMgdXQgZXUgc2VtIGludGVnZXIuIERpY3R1bSBzaXQgYW1ldCBqdXN0byBkb25lYy4gU2NlbGVyaXNxdWUgbWF1cmlzIHBlbGxlbnRlc3F1ZSBwdWx2aW5hciBwZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4gU2VkIHR1cnBpcyB0aW5jaWR1bnQgaWQgYWxpcXVldCByaXN1cy4gRWdldCBtYXVyaXMgcGhhcmV0cmEgZXQgdWx0cmljZXMgbmVxdWUgb3JuYXJlIGFlbmVhbiBldWlzbW9kLiBEaWFtIHF1aXMgZW5pbSBsb2JvcnRpcyBzY2VsZXJpc3F1ZSBmZXJtZW50dW0uIFZhcml1cyBkdWlzIGF0IGNvbnNlY3RldHVyIGxvcmVtIGRvbmVjIG1hc3NhIHNhcGllbi4gRGlhbSBzaXQgYW1ldCBuaXNsIHN1c2NpcGl0IGFkaXBpc2NpbmcgYmliZW5kdW0gZXN0IHVsdHJpY2llcyBpbnRlZ2VyLiBMZWN0dXMgdXJuYSBkdWlzIGNvbnZhbGxpcyBjb252YWxsaXMgdGVsbHVzLiBOaWJoIGlwc3VtIGNvbnNlcXVhdCBuaXNsIHZlbCBwcmV0aXVtIGxlY3R1cyBxdWFtIGlkIGxlby4gRmV1Z2lhdCBpbiBhbnRlIG1ldHVzIGRpY3R1bSBhdCB0ZW1wb3IgY29tbW9kby4gVmVsaXQgZGlnbmlzc2ltIHNvZGFsZXMgdXQgZXUgc2VtIGludGVnZXIuIERpY3R1bSBzaXQgYW1ldCBqdXN0byBkb25lYy4gU2NlbGVyaXNxdWUgbWF1cmlzIHBlbGxlbnRlc3F1ZSBwdWx2aW5hciBwZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzLiBTY2VsZXJpc3F1ZSBtYXVyaXMgcGVsbGVudGVzcXVlIHB1bHZpbmFyIHBlbGxlbnRlc3F1ZSBoYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUgc2VuZWN0dXMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy4gU2NlbGVyaXNxdWUgbWF1cmlzIHBlbGxlbnRlc3F1ZSBwdWx2aW5hciBwZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzLiBTY2VsZXJpc3F1ZSBtYXVyaXMgcGVsbGVudGVzcXVlIHB1bHZpbmFyIHBlbGxlbnRlc3F1ZSBoYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUgc2VuZWN0dXMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy4=") for i in std.range(0,100)
+    ],
+}
+----
+====
+
+[cols="<,>,>,>,>"]
+|===
+| Command 
+| Mean [ms] 
+| Min [ms] 
+| Max [ms] 
+| Relative 
+
+| `Rust` 
+| 1.2 ± 0.1 
+| 1.1 
+| 2.2 
+| 1.00 
+
+| `Rust (alternative, rsjsonnet)` 
+| 2.8 ± 0.2 
+| 2.6 
+| 4.1 
+| 2.37 ± 0.32 
+
+| `Go` 
+| 7.4 ± 0.4 
+| 6.8 
+| 10.5 
+| 6.21 ± 0.77 
+
+| `Scala (native)` 
+| 4.2 ± 0.4 
+| 3.6 
+| 5.6 
+| 3.57 ± 0.52 
+
+| `Scala (GraalVM)` 
+| 3.1 ± 0.2 
+| 2.5 
+| 4.2 
+| 2.58 ± 0.36 
+
+| `C++` 
+| 4819.0 ± 22.8 
+| 4775.1 
+| 4863.2 
+| 4068.77 ± 454.41 
+|===
+
+=== std.base64DecodeBytes
+
+.Source
+[%collapsible]
+====
+[source,jsonnet]
+----
+{
+    foo: [
+        std.base64DecodeBytes("TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuIFNlZCB0dXJwaXMgdGluY2lkdW50IGlkIGFsaXF1ZXQgcmlzdXMuIEVnZXQgbWF1cmlzIHBoYXJldHJhIGV0IHVsdHJpY2VzIG5lcXVlIG9ybmFyZSBhZW5lYW4gZXVpc21vZC4gRGlhbSBxdWlzIGVuaW0gbG9ib3J0aXMgc2NlbGVyaXNxdWUgZmVybWVudHVtLiBWYXJpdXMgZHVpcyBhdCBjb25zZWN0ZXR1ciBsb3JlbSBkb25lYyBtYXNzYSBzYXBpZW4uIERpYW0gc2l0IGFtZXQgbmlzbCBzdXNjaXBpdCBhZGlwaXNjaW5nIGJpYmVuZHVtIGVzdCB1bHRyaWNpZXMgaW50ZWdlci4gTGVjdHVzIHVybmEgZHVpcyBjb252YWxsaXMgY29udmFsbGlzIHRlbGx1cy4gTmliaCBpcHN1bSBjb25zZXF1YXQgbmlzbCB2ZWwgcHJldGl1bSBsZWN0dXMgcXVhbSBpZCBsZW8uIEZldWdpYXQgaW4gYW50ZSBtZXR1cyBkaWN0dW0gYXQgdGVtcG9yIGNvbW1vZG8uIFZlbGl0IGRpZ25pc3NpbSBzb2RhbGVzIHV0IGV1IHNlbSBpbnRlZ2VyLiBEaWN0dW0gc2l0IGFtZXQganVzdG8gZG9uZWMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuIFNlZCB0dXJwaXMgdGluY2lkdW50IGlkIGFsaXF1ZXQgcmlzdXMuIEVnZXQgbWF1cmlzIHBoYXJldHJhIGV0IHVsdHJpY2VzIG5lcXVlIG9ybmFyZSBhZW5lYW4gZXVpc21vZC4gRGlhbSBxdWlzIGVuaW0gbG9ib3J0aXMgc2NlbGVyaXNxdWUgZmVybWVudHVtLiBWYXJpdXMgZHVpcyBhdCBjb25zZWN0ZXR1ciBsb3JlbSBkb25lYyBtYXNzYSBzYXBpZW4uIERpYW0gc2l0IGFtZXQgbmlzbCBzdXNjaXBpdCBhZGlwaXNjaW5nIGJpYmVuZHVtIGVzdCB1bHRyaWNpZXMgaW50ZWdlci4gTGVjdHVzIHVybmEgZHVpcyBjb252YWxsaXMgY29udmFsbGlzIHRlbGx1cy4gTmliaCBpcHN1bSBjb25zZXF1YXQgbmlzbCB2ZWwgcHJldGl1bSBsZWN0dXMgcXVhbSBpZCBsZW8uIEZldWdpYXQgaW4gYW50ZSBtZXR1cyBkaWN0dW0gYXQgdGVtcG9yIGNvbW1vZG8uIFZlbGl0IGRpZ25pc3NpbSBzb2RhbGVzIHV0IGV1IHNlbSBpbnRlZ2VyLiBEaWN0dW0gc2l0IGFtZXQganVzdG8gZG9uZWMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuIFNlZCB0dXJwaXMgdGluY2lkdW50IGlkIGFsaXF1ZXQgcmlzdXMuIEVnZXQgbWF1cmlzIHBoYXJldHJhIGV0IHVsdHJpY2VzIG5lcXVlIG9ybmFyZSBhZW5lYW4gZXVpc21vZC4gRGlhbSBxdWlzIGVuaW0gbG9ib3J0aXMgc2NlbGVyaXNxdWUgZmVybWVudHVtLiBWYXJpdXMgZHVpcyBhdCBjb25zZWN0ZXR1ciBsb3JlbSBkb25lYyBtYXNzYSBzYXBpZW4uIERpYW0gc2l0IGFtZXQgbmlzbCBzdXNjaXBpdCBhZGlwaXNjaW5nIGJpYmVuZHVtIGVzdCB1bHRyaWNpZXMgaW50ZWdlci4gTGVjdHVzIHVybmEgZHVpcyBjb252YWxsaXMgY29udmFsbGlzIHRlbGx1cy4gTmliaCBpcHN1bSBjb25zZXF1YXQgbmlzbCB2ZWwgcHJldGl1bSBsZWN0dXMgcXVhbSBpZCBsZW8uIEZldWdpYXQgaW4gYW50ZSBtZXR1cyBkaWN0dW0gYXQgdGVtcG9yIGNvbW1vZG8uIFZlbGl0IGRpZ25pc3NpbSBzb2RhbGVzIHV0IGV1IHNlbSBpbnRlZ2VyLiBEaWN0dW0gc2l0IGFtZXQganVzdG8gZG9uZWMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy5Mb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4gU2VkIHR1cnBpcyB0aW5jaWR1bnQgaWQgYWxpcXVldCByaXN1cy4gRWdldCBtYXVyaXMgcGhhcmV0cmEgZXQgdWx0cmljZXMgbmVxdWUgb3JuYXJlIGFlbmVhbiBldWlzbW9kLiBEaWFtIHF1aXMgZW5pbSBsb2JvcnRpcyBzY2VsZXJpc3F1ZSBmZXJtZW50dW0uIFZhcml1cyBkdWlzIGF0IGNvbnNlY3RldHVyIGxvcmVtIGRvbmVjIG1hc3NhIHNhcGllbi4gRGlhbSBzaXQgYW1ldCBuaXNsIHN1c2NpcGl0IGFkaXBpc2NpbmcgYmliZW5kdW0gZXN0IHVsdHJpY2llcyBpbnRlZ2VyLiBMZWN0dXMgdXJuYSBkdWlzIGNvbnZhbGxpcyBjb252YWxsaXMgdGVsbHVzLiBOaWJoIGlwc3VtIGNvbnNlcXVhdCBuaXNsIHZlbCBwcmV0aXVtIGxlY3R1cyBxdWFtIGlkIGxlby4gRmV1Z2lhdCBpbiBhbnRlIG1ldHVzIGRpY3R1bSBhdCB0ZW1wb3IgY29tbW9kby4gVmVsaXQgZGlnbmlzc2ltIHNvZGFsZXMgdXQgZXUgc2VtIGludGVnZXIuIERpY3R1bSBzaXQgYW1ldCBqdXN0byBkb25lYy4gU2NlbGVyaXNxdWUgbWF1cmlzIHBlbGxlbnRlc3F1ZSBwdWx2aW5hciBwZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4gU2VkIHR1cnBpcyB0aW5jaWR1bnQgaWQgYWxpcXVldCByaXN1cy4gRWdldCBtYXVyaXMgcGhhcmV0cmEgZXQgdWx0cmljZXMgbmVxdWUgb3JuYXJlIGFlbmVhbiBldWlzbW9kLiBEaWFtIHF1aXMgZW5pbSBsb2JvcnRpcyBzY2VsZXJpc3F1ZSBmZXJtZW50dW0uIFZhcml1cyBkdWlzIGF0IGNvbnNlY3RldHVyIGxvcmVtIGRvbmVjIG1hc3NhIHNhcGllbi4gRGlhbSBzaXQgYW1ldCBuaXNsIHN1c2NpcGl0IGFkaXBpc2NpbmcgYmliZW5kdW0gZXN0IHVsdHJpY2llcyBpbnRlZ2VyLiBMZWN0dXMgdXJuYSBkdWlzIGNvbnZhbGxpcyBjb252YWxsaXMgdGVsbHVzLiBOaWJoIGlwc3VtIGNvbnNlcXVhdCBuaXNsIHZlbCBwcmV0aXVtIGxlY3R1cyBxdWFtIGlkIGxlby4gRmV1Z2lhdCBpbiBhbnRlIG1ldHVzIGRpY3R1bSBhdCB0ZW1wb3IgY29tbW9kby4gVmVsaXQgZGlnbmlzc2ltIHNvZGFsZXMgdXQgZXUgc2VtIGludGVnZXIuIERpY3R1bSBzaXQgYW1ldCBqdXN0byBkb25lYy4gU2NlbGVyaXNxdWUgbWF1cmlzIHBlbGxlbnRlc3F1ZSBwdWx2aW5hciBwZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzLiBTY2VsZXJpc3F1ZSBtYXVyaXMgcGVsbGVudGVzcXVlIHB1bHZpbmFyIHBlbGxlbnRlc3F1ZSBoYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUgc2VuZWN0dXMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy4gU2NlbGVyaXNxdWUgbWF1cmlzIHBlbGxlbnRlc3F1ZSBwdWx2aW5hciBwZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzLiBTY2VsZXJpc3F1ZSBtYXVyaXMgcGVsbGVudGVzcXVlIHB1bHZpbmFyIHBlbGxlbnRlc3F1ZSBoYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUgc2VuZWN0dXMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy4=") for i in std.range(0,100)
+    ],
+}
+----
+====
+
+[cols="<,>,>,>,>"]
+|===
+| Command 
+| Mean [ms] 
+| Min [ms] 
+| Max [ms] 
+| Relative 
+
+| `Rust` 
+| 19.2 ± 0.9 
+| 17.5 
+| 23.8 
+| 1.00 
+
+| `Rust (alternative, rsjsonnet)` 
+| 44.5 ± 2.2 
+| 41.1 
+| 48.9 
+| 2.32 ± 0.16 
+
+| `Go` 
+| 115.3 ± 2.5 
+| 111.0 
+| 120.1 
+| 6.01 ± 0.32 
+
+| `Scala (native)` 
+| 37.2 ± 2.2 
+| 32.0 
+| 41.6 
+| 1.94 ± 0.15 
+
+| `Scala (GraalVM)` 
+| 28.7 ± 0.9 
+| 27.2 
+| 31.4 
+| 1.49 ± 0.09 
+
+| `C++` 
+| 4643.4 ± 18.6 
+| 4612.8 
+| 4678.5 
+| 242.13 ± 11.89 
+|===
+
+=== std.base64 (byte array)
+
+.Source
+[%collapsible]
+====
+[source,jsonnet]
+----
+{
+    foo: [
+        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)
+    ],
+}
+----
+====
+
+[cols="<,>,>,>,>"]
+|===
+| Command 
+| Mean [ms] 
+| Min [ms] 
+| Max [ms] 
+| Relative 
+
+| `Rust` 
+| 15.6 ± 0.5 
+| 14.8 
+| 17.3 
+| 2.48 ± 0.16 
+
+| `Rust (alternative, rsjsonnet)` 
+| 14.3 ± 0.5 
+| 13.3 
+| 15.6 
+| 2.26 ± 0.15 
+
+| `Go` 
+| 63.8 ± 2.8 
+| 57.3 
+| 69.1 
+| 10.10 ± 0.74 
+
+| `Scala (native)` 
+| 7.1 ± 0.6 
+| 6.1 
+| 8.9 
+| 1.12 ± 0.11 
+
+| `Scala (GraalVM)` 
+| 6.3 ± 0.4 
+| 5.5 
+| 7.7 
+| 1.00 
+
+| `C++` 
+| 7040.2 ± 47.1 
+| 6967.5 
+| 7138.0 
+| 1114.18 ± 64.89 
+|===
+
+=== std.foldl
+
+.Source
+[%collapsible]
+====
+[source,jsonnet]
+----
+local input = std.makeArray(10000, function(i) 'xxxxx');
+
+std.foldl(function(acc, value) acc + value, input, '')
+
+----
+====
+
+[cols="<,>,>,>,>"]
+|===
+| Command 
+| Mean [ms] 
+| Min [ms] 
+| Max [ms] 
+| Relative 
+
+| `Rust` 
+| 2.2 ± 0.2 
+| 2.0 
+| 3.4 
+| 1.00 
+
+| `Rust (alternative, rsjsonnet)` 
+| 26.7 ± 1.8 
+| 22.5 
+| 31.0 
+| 12.07 ± 1.31 
+
+| `Go` 
+| 1043.0 ± 18.2 
+| 1007.5 
+| 1076.2 
+| 470.67 ± 40.53 
+
+| `Scala (native)` 
+| 80.0 ± 4.1 
+| 72.6 
+| 87.4 
+| 36.11 ± 3.55 
+
+| `Scala (GraalVM)` 
+| 55.4 ± 4.5 
+| 44.3 
+| 63.8 
+| 24.98 ± 2.93 
+
+| `C++` 
+| 167.7 ± 3.2 
+| 161.3 
+| 173.6 
+| 75.67 ± 6.55 
+|===
+
+=== std.manifestJsonEx
+
+.Source
+[%collapsible]
+====
+[source,jsonnet]
+----
+{
+  bar: {
+    prometheusOperator+: {
+      service+: {
+        spec+: {
+          ports: [
+            {
+              name: 'https',
+              port: 8443,
+              targetPort: 'https',
+            },
+          ],
+        },
+      },
+      serviceMonitor+: {
+        spec+: {
+          endpoints: [
+            {
+              port: 'https',
+              scheme: 'https',
+              honorLabels: true,
+              bearerTokenFile: '/var/run/secrets/kubernetes.io/serviceaccount/token',
+              tlsConfig: {
+                insecureSkipVerify: true,
+              },
+            },
+          ]
+        },
+      },
+      clusterRole+: {
+        rules+: [
+          {
+            apiGroups: ['authentication.k8s.io'],
+            resources: ['tokenreviews'],
+            verbs: ['create'],
+          },
+          {
+            apiGroups: ['authorization.k8s.io'],
+            resources: ['subjectaccessreviews'],
+            verbs: ['create'],
+          },
+        ],
+      },
+    }
+  },
+  foo: std.manifestJsonEx(self.bar, "  ")
+}
+----
+====
+
+[cols="<,>,>,>,>"]
+|===
+| Command 
+| Mean [µs] 
+| Min [µs] 
+| Max [µs] 
+| Relative 
+
+| `Rust` 
+| 748.5 ± 89.4 
+| 618.9 
+| 1457.9 
+| 1.00 
+
+| `Rust (alternative, rsjsonnet)` 
+| 1173.6 ± 132.1 
+| 1020.2 
+| 2213.3 
+| 1.57 ± 0.26 
+
+| `Go` 
+| 1426.9 ± 76.1 
+| 1206.5 
+| 2024.4 
+| 1.91 ± 0.25 
+
+| `Scala (native)` 
+| 2443.6 ± 215.6 
+| 2080.3 
+| 3535.8 
+| 3.26 ± 0.48 
+
+| `Scala (GraalVM)` 
+| 1867.9 ± 187.6 
+| 1510.0 
+| 2727.7 
+| 2.50 ± 0.39 
+
+| `C++` 
+| 56868.5 ± 1565.7 
+| 53376.4 
+| 59440.7 
+| 75.97 ± 9.32 
+|===
+
+=== std.manifestTomlEx
+
+.Source
+[%collapsible]
+====
+[source,jsonnet]
+----
+{
+  bar: {
+    prometheusOperator+: {
+      service+: {
+        spec+: {
+          ports: [
+            {
+              name: 'https',
+              port: 8443,
+              targetPort: 'https',
+            },
+          ],
+        },
+      },
+      serviceMonitor+: {
+        spec+: {
+          endpoints: [
+            {
+              port: 'https',
+              scheme: 'https',
+              honorLabels: true,
+              bearerTokenFile: '/var/run/secrets/kubernetes.io/serviceaccount/token',
+              tlsConfig: {
+                insecureSkipVerify: true,
+              },
+            },
+          ],
+        },
+      },
+      clusterRole+: {
+        rules+: [
+          {
+            apiGroups: ['authentication.k8s.io'],
+            resources: ['tokenreviews'],
+            verbs: ['create'],
+          },
+          {
+            apiGroups: ['authorization.k8s.io'],
+            resources: ['subjectaccessreviews'],
+            verbs: ['create'],
+          },
+        ],
+      },
+    },
+  },
+  nothing: std.manifestTomlEx(self.bar, '  '),
+}
+
+----
+====
+
+[cols="<,>,>,>,>"]
+|===
+| Command 
+| Mean [µs] 
+| Min [µs] 
+| Max [µs] 
+| Relative 
+
+| `Rust` 
+| 750.5 ± 92.9 
+| 624.9 
+| 1531.7 
+| 1.00 
+
+| `Rust (alternative, rsjsonnet)` 
+| 1190.8 ± 141.6 
+| 1007.4 
+| 2224.5 
+| 1.59 ± 0.27 
+
+| `Go` 
+| 1427.7 ± 82.5 
+| 1217.9 
+| 1923.1 
+| 1.90 ± 0.26 
+
+| `Scala (native)` 
+| 2558.8 ± 258.8 
+| 2168.4 
+| 3590.2 
+| 3.41 ± 0.54 
+
+| `Scala (GraalVM)` 
+| 1940.1 ± 185.3 
+| 1568.4 
+| 3078.2 
+| 2.59 ± 0.40 
+
+| `C++` 
+| 519148.2 ± 5114.2 
+| 512290.7 
+| 527415.7 
+| 691.74 ± 85.90 
+|===
+
+=== std.parseInt
+
+.Source
+[%collapsible]
+====
+[source,jsonnet]
+----
+{
+    foo: [
+        std.parseInt("-123949595") for i in std.range(0,100)
+    ],
+}
+----
+====
+
+[cols="<,>,>,>,>"]
+|===
+| Command 
+| Mean [µs] 
+| Min [µs] 
+| Max [µs] 
+| Relative 
+
+| `Rust` 
+| 771.7 ± 99.3 
+| 633.6 
+| 1465.7 
+| 1.00 
+
+| `Rust (alternative, rsjsonnet)` 
+| 1177.7 ± 135.4 
+| 1030.0 
+| 2068.3 
+| 1.53 ± 0.26 
+
+| `Go` 
+| 1398.2 ± 78.8 
+| 1203.3 
+| 1922.2 
+| 1.81 ± 0.25 
+
+| `Scala (native)` 
+| 2383.6 ± 227.4 
+| 2008.7 
+| 3848.0 
+| 3.09 ± 0.49 
+
+| `Scala (GraalVM)` 
+| 1809.3 ± 167.6 
+| 1430.0 
+| 2685.7 
+| 2.34 ± 0.37 
+
+| `C++` 
+| 53474.0 ± 1377.1 
+| 50862.9 
+| 56321.0 
+| 69.30 ± 9.10 
+|===
+
+=== std.reverse
+
+.Source
+[%collapsible]
+====
+[source,jsonnet]
+----
+{
+    foo: [
+        std.reverse(std.range(0, 5000)) for i in std.range(0,100)
+    ],
+}
+----
+====
+
+[cols="<,>,>,>,>"]
+|===
+| Command 
+| Mean [ms] 
+| Min [ms] 
+| Max [ms] 
+| Relative 
+
+| `Rust` 
+| 24.5 ± 1.1 
+| 22.5 
+| 27.5 
+| 1.00 
+
+| `Rust (alternative, rsjsonnet)` 
+| 54.6 ± 2.3 
+| 51.0 
+| 63.3 
+| 2.23 ± 0.13 
+
+| `Go` 
+| 138.8 ± 2.4 
+| 136.2 
+| 145.1 
+| 5.67 ± 0.27 
+
+| `Scala (native)` 
+| 44.1 ± 2.4 
+| 38.2 
+| 47.7 
+| 1.80 ± 0.13 
+
+| `Scala (GraalVM)` 
+| 36.0 ± 1.3 
+| 32.5 
+| 38.7 
+| 1.47 ± 0.08 
+
+| `C++` 
+| 339.8 ± 2.1 
+| 336.1 
+| 344.3 
+| 13.88 ± 0.61 
+|===
+
+=== std.substr
+
+.Source
+[%collapsible]
+====
+[source,jsonnet]
+----
+{
+    foo: [
+        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)
+    ],
+}
+----
+====
+
+[cols="<,>,>,>,>"]
+|===
+| Command 
+| Mean [µs] 
+| Min [µs] 
+| Max [µs] 
+| Relative 
+
+| `Rust` 
+| 917.8 ± 100.9 
+| 786.2 
+| 1720.6 
+| 1.00 
+
+| `Rust (alternative, rsjsonnet)` 
+| 1542.7 ± 165.7 
+| 1356.8 
+| 2708.1 
+| 1.68 ± 0.26 
+
+| `Go` 
+| 3294.1 ± 238.4 
+| 2784.6 
+| 4146.2 
+| 3.59 ± 0.47 
+
+| `Scala (native)` 
+| 2991.7 ± 287.0 
+| 2557.2 
+| 4080.4 
+| 3.26 ± 0.48 
+
+| `Scala (GraalVM)` 
+| 2261.4 ± 199.8 
+| 1831.2 
+| 3287.4 
+| 2.46 ± 0.35 
+
+| `C++` 
+| 16726.5 ± 994.8 
+| 15091.1 
+| 19537.3 
+| 18.22 ± 2.28 
+|===
+
+=== Comparsion for array
+
+> Note: No results for C++, too slow, takes hours, skews results
+
+.Source
+[%collapsible]
+====
+[source,jsonnet]
+----
+local long_array = std.range(1, 1000000);
+long_array + [1] < long_array + [2]
+
+----
+====
+
+[cols="<,>,>,>,>"]
+|===
+| Command 
+| Mean [ms] 
+| Min [ms] 
+| Max [ms] 
+| Relative 
+
+| `Rust` 
+| 10.0 ± 0.5 
+| 9.3 
+| 12.6 
+| 1.00 
+
+| `Rust (alternative, rsjsonnet)` 
+| 70.6 ± 4.8 
+| 54.7 
+| 81.3 
+| 7.05 ± 0.60 
+
+| `Go` 
+| 77.3 ± 7.5 
+| 54.9 
+| 87.4 
+| 7.72 ± 0.84 
+
+| `Scala (native)` 
+| 39.1 ± 2.6 
+| 30.4 
+| 42.7 
+| 3.90 ± 0.33 
+
+| `Scala (GraalVM)` 
+| 64.3 ± 2.1 
+| 60.7 
+| 70.2 
+| 6.42 ± 0.38 
+|===
+
+=== Comparsion for primitives
+
+> Note: No results for C++, can't run: uses up to 192GB of RAM
+
+.Source
+[%collapsible]
+====
+[source,jsonnet]
+----
+([ i < j for i in std.range(1, 1000) for j in std.range(1, 1000)])
+
+----
+====
+
+[cols="<,>,>,>,>"]
+|===
+| Command 
+| Mean [ms] 
+| Min [ms] 
+| Max [ms] 
+| Relative 
+
+| `Rust` 
+| 218.1 ± 4.4 
+| 206.9 
+| 227.4 
+| 1.25 ± 0.04 
+
+| `Rust (alternative, rsjsonnet)` 
+| 432.2 ± 7.4 
+| 426.2 
+| 458.6 
+| 2.47 ± 0.08 
+
+| `Go` 
+| 892.8 ± 25.8 
+| 860.6 
+| 992.0 
+| 5.11 ± 0.20 
+
+| `Scala (native)` 
+| 174.8 ± 4.6 
+| 168.1 
+| 183.7 
+| 1.00 
+
+| `Scala (GraalVM)` 
+| 204.1 ± 4.6 
+| 198.9 
+| 221.1 
+| 1.17 ± 0.04 
+|===
deleteddocs/benchmarks.mddiffbeforeafterboth
--- a/docs/benchmarks.md
+++ /dev/null
@@ -1,1396 +0,0 @@
-# Benchmarks
-
-There 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).
-
-For simplicity, I will call these implementations by the language of their implementation.
-
-Unfortunately, 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 benchmarks
-
-<details>
-<summary>Tested versions</summary>
-
-Go: Jsonnet commandline interpreter (Go implementation) v0.20.0
-
-```
-Jsonnet commandline interpreter (Go implementation) v0.20.0
-
-jsonnet {<option>} <filename>
-
-Available options:
-  -h / --help                This message
-  -e / --exec                Treat filename as code
-  -J / --jpath <dir>         Specify an additional library search dir
-                             (right-most wins)
-  -o / --output-file <file>  Write to the output file rather than stdout
-  -m / --multi <dir>         Write multiple files to the directory, list files
-                             on stdout
-  -c / --create-output-dirs  Automatically creates all parent directories for
-                             files
-  -y / --yaml-stream         Write output as a YAML stream of JSON documents
-  -S / --string              Expect a string, manifest as plain text
-  -s / --max-stack <n>       Number of allowed stack frames
-  -t / --max-trace <n>       Max length of stack trace before cropping
-  --version                  Print version
-
-Available options for specifying values of 'external' variables:
-  Provide the value as a string:
-  -V / --ext-str <var>[=<val>]      If <val> is omitted, get from environment
-                                    var <var>
-       --ext-str-file <var>=<file>  Read the string from the file
-  Provide a value as Jsonnet code:
-  --ext-code <var>[=<code>]         If <code> is omitted, get from environment
-                                    var <var>
-  --ext-code-file <var>=<file>      Read the code from the file
-
-Available options for specifying values of 'top-level arguments':
-  Provide the value as a string:
-  -A / --tla-str <var>[=<val>]      If <val> is omitted, get from environment
-                                    var <var>
-       --tla-str-file <var>=<file>  Read the string from the file
-  Provide a value as Jsonnet code:
-  --tla-code <var>[=<code>]         If <code> is omitted, get from environment
-                                    var <var>
-  --tla-code-file <var>=<file>      Read the code from the file
-
-Environment variables:
-  JSONNET_PATH is a colon (semicolon on Windows) separated list of directories
-  added in reverse order before the paths specified by --jpath (i.e. left-most
-  wins). E.g. these are equivalent:
-    JSONNET_PATH=a:b jsonnet -J c -J d
-    JSONNET_PATH=d:c:a:b jsonnet
-    jsonnet -J b -J a -J c -J d
-
-In all cases:
-  <filename> can be - (stdin)
-  Multichar options are expanded e.g. -abc becomes -a -b -c.
-  The -- option suppresses option processing for subsequent arguments.
-  Note that since filenames and jsonnet programs can begin with -, it is
-  advised to use -- if the argument is unknown, e.g. jsonnet -- "$FILENAME".
-```
-
-C++: Jsonnet commandline interpreter v0.20.0
-
-```
-Jsonnet commandline interpreter v0.20.0
-
-jsonnet {<option>} <filename>
-
-Available options:
-  -h / --help             This message
-  -e / --exec             Treat filename as code
-  -J / --jpath <dir>      Specify an additional library search dir (right-most wins)
-  -o / --output-file <file> Write to the output file rather than stdout
-  -m / --multi <dir>      Write multiple files to the directory, list files on stdout
-  -y / --yaml-stream      Write output as a YAML stream of JSON documents
-  -S / --string           Expect a string, manifest as plain text
-  -s / --max-stack <n>    Number of allowed stack frames
-  -t / --max-trace <n>    Max length of stack trace before cropping
-  --gc-min-objects <n>    Do not run garbage collector until this many
-  --gc-growth-trigger <n> Run garbage collector after this amount of object growth
-  --version               Print version
-Available options for specifying values of 'external' variables:
-Provide the value as a string:
-  -V / --ext-str <var>[=<val>]     If <val> is omitted, get from environment var <var>
-       --ext-str-file <var>=<file> Read the string from the file
-Provide a value as Jsonnet code:
-  --ext-code <var>[=<code>]    If <code> is omitted, get from environment var <var>
-  --ext-code-file <var>=<file> Read the code from the file
-Available options for specifying values of 'top-level arguments':
-Provide the value as a string:
-  -A / --tla-str <var>[=<val>]     If <val> is omitted, get from environment var <var>
-       --tla-str-file <var>=<file> Read the string from the file
-Provide a value as Jsonnet code:
-  --tla-code <var>[=<code>]    If <code> is omitted, get from environment var <var>
-  --tla-code-file <var>=<file> Read the code from the file
-Environment variables:
-JSONNET_PATH is a colon (semicolon on Windows) separated list of directories added
-in reverse order before the paths specified by --jpath (i.e. left-most wins)
-E.g. JSONNET_PATH=a:b jsonnet -J c -J d is equivalent to:
-JSONNET_PATH=d:c:a:b jsonnet
-jsonnet -J b -J a -J c -J d
-
-In all cases:
-<filename> can be - (stdin)
-Multichar options are expanded e.g. -abc becomes -a -b -c.
-The -- option suppresses option processing for subsequent arguments.
-Note that since filenames and jsonnet programs can begin with -, it is advised to
-use -- if the argument is unknown, e.g. jsonnet -- "$FILENAME".
-```
-
-Scala:
-
-```
-Missing argument: file <str>
-Expected Signature: Sjsonnet 0.4.10
-usage: sjsonnet [sjsonnet-options] script-file
-  -i --interactive                      Run Mill in interactive mode, suitable for opening REPLs and
-                                        taking user input
-  -J --jpath <str>                      Specify an additional library search dir (right-most wins)
-  -o --output-file <str>                Write to the output file rather than stdout
-  -m --multi <str>                      Write multiple files to the directory, list files on stdout
-  -c --create-output-dirs               Automatically creates all parent directories for files
-  -y --yaml-stream                      Write output as a YAML stream of JSON documents
-  -S --string                           Expect a string, manifest as plain text
-  -V --ext-str <str>                    <var>[=<val>] Provide 'external' variable as string. 'If
-                                        <val> is omitted, get from environment var <var>
-  --ext-str-file <str>                  <var>=<file> Provide 'external' variable as string from the
-                                        file
-  -V --ext-code <str>                   <var>[=<code>] Provide 'external' variable as Jsonnet code.
-                                        If <code> is omitted, get from environment var <var>
-  --ext-code-file <str>                 <var>=<file> Provide 'external' variable as Jsonnet code
-                                        from the file
-  -A --tla-str <str>                    <var>[=<val>] Provide top-level arguments as string. 'If
-                                        <val> is omitted, get from environment var <var>
-  --tla-str-file <str>                  <var>=<file> Provide top-level arguments variable as string
-                                        from the file
-  -V --tla-code <str>                   <var>[=<val>] Provide top-level arguments as Jsonnet code.
-                                        'If <val> is omitted, get from environment var <var>
-  --tla-code-file <str>                 <var>=<file> Provide top-level arguments variable as Jsonnet
-                                        code from the file
-  -n --indent <int>                     How much to indent your output JSON
-  -p --preserve-order                   Preserves order of keys in the resulting JSON
-  --strict                              Enforce some additional syntax limitations
-  --yaml-out                            Write output as a YAML document
-  file <str>                            The jsonnet file you wish to evaluate
-  --yaml-debug                          Generate source line comments in the output YAML doc to make
-                                        it easier to figure out where values come from.
-  --no-static-errors                    Turn static errors into warnings
-  --fatal-warnings                      Fail if any warnings were emitted
-  -e --exec                             Evaluate the given string as Jsonnet rather than treating it
-                                        as a file name
-  --no-duplicate-keys-in-comprehension  Raise an error if an object comprehension contains duplicate
-                                        keys
-  --strict-import-syntax                Raise an error if import expressions are used without proper
-                                        parentheses, e.g. import "foo".bar rather than (import
-                                        "foo").bar
-  --strict-inherited-assertions         Properly handle assertions defined in a Jsonnet dictionary
-                                        that is extended more than once
-
-
-```
-
-Rust (alternative):
-
-```
-Usage: rsjsonnet [OPTIONS] <filename>
-
-Arguments:
-  <filename>  
-
-Options:
-  -e, --exec                      Treat filename as code
-  -J, --jpath <dir>               Specify an additional library search dir (right-most wins)
-  -o, --output-file <file>        Write to the output file rather than stdout
-  -m, --multi <dir>               Write multiple files to the directory, list files on stdout
-  -y, --yaml-stream               Write output as a YAML stream of JSON documents
-  -S, --string                    Expect a string, manifest as plain text
-  -s, --max-stack <n>             Number of allowed stack frames
-  -t, --max-trace <n>             Max length of stack trace before cropping
-  -V, --ext-str <var=[val]>       
-      --ext-str-file <var=file>   
-      --ext-code <var[=code]>     
-      --ext-code-file <var=file>  
-  -A, --tla-str <var[=val]>       
-      --tla-str-file <var=file>   
-      --tla-code <var[=code]>     
-      --tla-code-file <var=file>  
-  -h, --help                      Print help
-
-```
-
-</details>
-
-## Real world
-
-### Graalvm CI
-
-> Note: No results for C++, takes longer than a hour
-
-<details>
-<summary>Source</summary>
-
-```jsonnet
-# Common
-local common = import 'common.jsonnet';
-local graal_common = import 'graal-common.json';
-
-# Compiler
-local compiler = import 'compiler/ci/ci.jsonnet';
-
-# GraalWasm
-local wasm = import 'wasm/ci/ci.jsonnet';
-
-# Espresso
-local espresso = import 'espresso/ci/ci.jsonnet';
-
-# Regex
-local regex = import 'regex/ci/ci.jsonnet';
-
-# SDK
-local sdk = import 'sdk/ci/ci.jsonnet';
-
-# SubstrateVM
-local substratevm = import 'substratevm/ci/ci.jsonnet';
-
-# Sulong
-local sulong = import 'sulong/ci/ci.jsonnet';
-
-# Tools
-local tools = import 'tools/ci/ci.jsonnet';
-
-# Truffle
-local truffle = import 'truffle/ci/ci.jsonnet';
-
-# JavaDoc
-local javadoc = import "ci_includes/publish-javadoc.jsonnet";
-
-# VM
-local vm = import 'vm/ci/ci_includes/vm.jsonnet';
-
-local verify_ci = (import 'ci-check.libsonnet').verify_ci;
-
-{
-  # Ensure that entries in common.jsonnet can be resolved.
-  _checkCommon: (import 'common.jsonnet'),
-  ci_resources:: (import 'ci-resources.libsonnet'),
-  overlay: graal_common.ci.overlay,
-  specVersion: "3",
-  builds: [common.add_excludes_guard(b) for b in (
-    compiler.builds +
-    wasm.builds +
-    espresso.builds +
-    regex.builds +
-    sdk.builds +
-    substratevm.builds +
-    sulong.builds +
-    tools.builds +
-    truffle.builds +
-    javadoc.builds +
-    vm.builds
-  )],
-  assert verify_ci(self.builds),
-  // verify that the run-spec demo works
-  assert (import "ci/ci_common/run-spec-demo.jsonnet").check(),
-}
-
-```
-</details>
-
-| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
-|:---|---:|---:|---:|---:|
-| `Rust` | 93.6 ± 0.6 | 92.5 | 94.7 | 1.00 |
-| `Rust (alternative, rsjsonnet)` | 263.3 ± 1.8 | 259.0 | 268.4 | 2.81 ± 0.03 |
-| `Go` | 1204.6 ± 5.0 | 1196.0 | 1215.4 | 12.87 ± 0.10 |
-| `Scala` | 720.0 ± 2.9 | 713.4 | 725.3 | 7.70 ± 0.06 |
-
-### Kube-prometheus manifests
-
-<details>
-<summary>Source</summary>
-
-```jsonnet
-local kp =
-  (import 'kube-prometheus/main.libsonnet') +
-  // Uncomment the following imports to enable its patches
-  // (import 'kube-prometheus/addons/anti-affinity.libsonnet') +
-  // (import 'kube-prometheus/addons/managed-cluster.libsonnet') +
-  // (import 'kube-prometheus/addons/node-ports.libsonnet') +
-  // (import 'kube-prometheus/addons/static-etcd.libsonnet') +
-  // (import 'kube-prometheus/addons/custom-metrics.libsonnet') +
-  // (import 'kube-prometheus/addons/external-metrics.libsonnet') +
-  // (import 'kube-prometheus/addons/pyrra.libsonnet') +
-  {
-    values+:: {
-      common+: {
-        namespace: 'monitoring',
-      },
-    },
-  };
-
-{ 'setup/0namespace-namespace': kp.kubePrometheus.namespace } +
-{
-  ['setup/prometheus-operator-' + name]: kp.prometheusOperator[name]
-  for name in std.filter((function(name) name != 'serviceMonitor' && name != 'prometheusRule'), std.objectFields(kp.prometheusOperator))
-} +
-// { 'setup/pyrra-slo-CustomResourceDefinition': kp.pyrra.crd } +
-// serviceMonitor and prometheusRule are separated so that they can be created after the CRDs are ready
-{ 'prometheus-operator-serviceMonitor': kp.prometheusOperator.serviceMonitor } +
-{ 'prometheus-operator-prometheusRule': kp.prometheusOperator.prometheusRule } +
-{ 'kube-prometheus-prometheusRule': kp.kubePrometheus.prometheusRule } +
-{ ['alertmanager-' + name]: kp.alertmanager[name] for name in std.objectFields(kp.alertmanager) } +
-{ ['blackbox-exporter-' + name]: kp.blackboxExporter[name] for name in std.objectFields(kp.blackboxExporter) } +
-{ ['grafana-' + name]: kp.grafana[name] for name in std.objectFields(kp.grafana) } +
-// { ['pyrra-' + name]: kp.pyrra[name] for name in std.objectFields(kp.pyrra) if name != 'crd' } +
-{ ['kube-state-metrics-' + name]: kp.kubeStateMetrics[name] for name in std.objectFields(kp.kubeStateMetrics) } +
-{ ['kubernetes-' + name]: kp.kubernetesControlPlane[name] for name in std.objectFields(kp.kubernetesControlPlane) }
-{ ['node-exporter-' + name]: kp.nodeExporter[name] for name in std.objectFields(kp.nodeExporter) } +
-{ ['prometheus-' + name]: kp.prometheus[name] for name in std.objectFields(kp.prometheus) } +
-{ ['prometheus-adapter-' + name]: kp.prometheusAdapter[name] for name in std.objectFields(kp.prometheusAdapter) }
-
-```
-</details>
-
-| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
-|:---|---:|---:|---:|---:|
-| `Rust` | 129.4 ± 1.4 | 127.7 | 132.8 | 1.00 |
-| `Rust (alternative, rsjsonnet)` | 197.0 ± 1.9 | 193.6 | 200.7 | 1.52 ± 0.02 |
-| `Go` | 2127.7 ± 13.8 | 2105.4 | 2151.5 | 16.44 ± 0.21 |
-| `Scala` | 947.9 ± 11.1 | 926.1 | 967.9 | 7.33 ± 0.12 |
-| `C++` | 87633.8 ± 569.9 | 86464.2 | 89118.8 | 677.29 ± 8.72 |
-
-## Benchmarks from C++ jsonnet (/perf_tests)
-
-### Large string join
-
-<details>
-<summary>Source</summary>
-
-```jsonnet
-{
-    text: std.join(',', std.makeArray(76846, function(_) 'x')),
-}
-
-```
-</details>
-
-| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
-|:---|---:|---:|---:|---:|
-| `Rust` | 5.6 ± 0.1 | 5.4 | 6.2 | 1.00 |
-| `Rust (alternative, rsjsonnet)` | 45.3 ± 0.9 | 43.5 | 47.8 | 8.04 ± 0.25 |
-| `Go` | 98.2 ± 1.6 | 95.0 | 100.8 | 17.45 ± 0.50 |
-| `Scala` | 331.1 ± 5.8 | 322.3 | 343.7 | 58.79 ± 1.73 |
-| `C++` | 76.5 ± 0.7 | 75.4 | 78.0 | 13.59 ± 0.34 |
-
-### Large string template
-
-> Note: No results for Go, fails with os stack size exhausion
-
-| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
-|:---|---:|---:|---:|---:|
-| `Rust` | 6.7 ± 0.1 | 6.4 | 7.1 | 1.00 |
-| `Rust (alternative, rsjsonnet)` | 7.1 ± 0.2 | 6.8 | 7.6 | 1.05 ± 0.03 |
-| `Scala` | 392.7 ± 2.7 | 388.2 | 399.8 | 58.29 ± 1.19 |
-| `C++` | 14376.2 ± 35.8 | 14317.5 | 14448.6 | 2133.86 ± 41.53 |
-
-### Realistic 1
-
-<details>
-<summary>Source</summary>
-
-```jsonnet
-local utils = {
-  Func3(aaaaaaa, bbbbbbb, cccc)::
-    'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/%s/XXXXX/%s/XXXXXXXXXXXXXXX/%s'
-    % [aaaaaaa, bbbbbbb, cccc],
-};
-
-
-local long_list = [
-  '001xxxxxxxxxxxxxxx-xxx',
-  '002xxxxxxxxxxxxxxxxxx-xxx',
-  '003xxxxxxxxxxxxxxxx-xxxxxxx',
-  '004xxxxxx-xxxxxx',
-  '005xxxx-xxx-xxxx',
-  '006xxx-xxx-xxxxxx',
-  '007xxx-xxx-xxxx-xxxx',
-  '008xxx-xxx-xxxx-xxxx-xxxxxxx',
-  '009xxx-xxx-xxxxx-xxxx-xxxxxxx-xxxxxx',
-  '010xxx-xxx-xxxx-xxxxxxx-xxxxxx-xxxxxxx',
-  '011xxx-xxx-xxxxx-xxxxxxxx-xxxxxxx',
-  '012xxx-xxx-xxxx-xxxxxxxx-xxxxxxx-xxxxxx',
-  '013xxx-xxx-xxxx-xxxxxxxxxx',
-  '014xxx-xxx-xxxxx-xxxxxx-xx',
-  '015xxx-xxx-xxxxxx-xxxxxxx',
-  '016xxx-xxx-xxxx-xxxxxxxx-xxxxx',
-  '017xxx-xxx-xxxx-xxxxxxxxxxxxxxx',
-  '018xxx-xxx-xxxx-xxxxxxxx-xxxxxxx-xxxxxxx',
-  '019xxx-xxx-xxxx-xxxxxxxx-xx',
-  '020xxx-xxx-xxxx-xxxxxxxxxxxxxxxx',
-  '021xxx-xxx-xxxx-xxxxxxxx-xxxxxxxxxxxx-xxx',
-  '022xxx-xxxx-xxxx-xxxx-xxxxxxx',
-  '023xxx-xxxx-xxxx-xxx-xxxxxxx-xxxxxx-xxxxxxx',
-  '024xxx-xxx-xxxx-xxx-xxxx-xxxx-xxx-xxxxxxxxx',
-  '025xxx-xxxx-xxxx-xxxxxxxxx',
-  '026xxx-xxx-xxxx-xxx-xxxxxxx',
-  '027xxx-xxx-xxxx-xxx-xxxxxxx',
-  '028xxx-xxx-xxxx-xxxxxxxxxx',
-  '029xxx-xxx-xxxx-xxxxxx',
-  '030xxx-xxx-xxxx-xxx-xxxxxxx',
-  '031xxx-xxx-xxxx-xxx-xxxxxxxx',
-  '032xxx-xxx-xxxxx-xxxxxxxxxxxx-xxxxxxx',
-  '033xxx-xxx-xxxx-xxx-xxxx-xxxx',
-  '034xxx-xxx-xxxx-xxx-xxxxxxxx-xxxxxxxx',
-  '035xxx-xxx-xxxx-xxxxxxx',
-  '036xxx-xxx-xxxx-xxxxxxxx-xxxxxxx',
-  '037xxx-xxx-xxxx-xxxxxx',
-  '038xxx-xxx-xxxx-xxxxxxxxxx',
-  '039xxxx-xxx-xxxx-xxxxxx-xxxxxx-xxxxxxx',
-  '040xxx-xxx-xxxx-xxxxxx-xxxxxxx',
-  '041xxxx-xxx-xxxx-xxxxxx-xx',
-  '042xxx-xxx-xxxx-xxxxxxxxxxx',
-  '043xxx-xxx-xxxx-xxxxxxxxxxx-xxxxxxx',
-  '044xxx-xxx-xxxx-xxxxxxx-xxx-xxxxxx',
-  '045xxx-xxx-xxxx-xxxxxx-xxx-xxxxxx-xxx',
-  '046xxx-xxx-xxxx-xxxxxx-xxx-xxxxxx-xxx',
-  '047xxx-xxx-xxxx-xxxxxx-xxx-xxxxxx-xxxxxxx',
-  '048xxx-xxx-xxxx-xxxxxx-xxx-xxxxxx-xxxxxxxx',
-  '049xxx-xxx-xxxx-xxxxxx-xxx-xxxxxx-xxxxxxxxx',
-  '050xxx-xxx-xxxxx-xxxxx-xxxxxxx',
-  '051xxx-xxx-xxxx-xxxxx-xxxxxxxx-xxxxxx',
-  '052xxx-xxx-xxxx-xxxxx-xx',
-  '053xxx-xxx-xxxx-xxxx-xxxxxxx-xxx-xxxxxxx',
-  '054xxx-xxx-xxxx-xxxx-xxxxxxx-xxx-xxxxxx',
-  '055xxx-xxx-xxxx-xxx',
-  '056xxx-xxx-xxxx-xxxxxxx-xxxxxxx',
-  '057xxx-xxx-xxxx-xxxxxxx-xxx-xxxxxxx',
-  '058xxx-xxx-xxxx-xxxxxxxxx-xxxxxx-xxxxxxx',
-  '059xxx-xxx-xxxx-xx-xxxxxxxxxxx-xxxxx',
-  '060xxx-xxx-xxxx-xxxxxxxxxxxxxx-xxxxxxx',
-  '061xxx-xxx-xxxx-xxxxxxxx-xxxxxxx',
-  '062xxx-xxx-xxxx-xxxxxxxxxxxxx-xxxxxxx',
-  '063xxx-xxx-xxxx-xxxxxx-xxxxxxx',
-  '064xxx-xxx-xxxxx-xxxxxx-xxxxxxx',
-  '065xxx-xxx-xxxx-xxxxx-xxxxx',
-  '066xxx-xxx-xxxx-xxxxx-xxxx',
-  '067xxx-xxx-xxxx-xxxxxxxxxxxxxxxxx',
-  '068xxx-xxx-xxxx-xxxxxxxx-xxxxx-xxx',
-  '069xxx-xxx-xxxx-xxxxxxxx-xx-xxx-xxxxxxxx',
-  '070xxx-xxx-xxxx-xxxxxxxx-xxxxxx-xxxxxxx',
-  '071xxx-xxx-xxxx-xxxxxxxxxx',
-  '072xxx-xxxx-xxxx-xxxxxxxxxxxxxxxx',
-  '073xxx-xxx-xxxx-xxxxxx-xxxxxx-xxxxxxx',
-  '074xxx-xxx-xxxx-xxxxxxx-xxxxxxxxxxxxx',
-  '075xxx-xxx-xxxx-xxxxxxx-xxxxxxxxxxxxx-xxxxxxxxx',
-  '076xxx-xxx-xxxx-xxxxxxxxxxxxx-xxxxxxx',
-  '077xxx-xxx-xxxx-xxxxxxxxx-xxxxxxx-x2',
-  '078xxx-xxx-xxxx-xxx',
-  '079xxx-xxx-xxxx-xxxxxxxxxxxx',
-  '080xxx-xxx-xxxx-xxxxxxxxx-xxxxxxxx',
-  '081xxx-xxx-xxxx-xxxxxxxx-xxxxxxxxx',
-  '082xxx-xxx-xxxx-xxxxxxxxx',
-  '083xxx-xxx-xxxx-xxxxxxx',
-  '084xxx-xxx-xxxx-xxxxxxx-xxxxxx',
-  '085xxxx-xxx-xxxxxxx-xxxxx-xxxx',
-  '086xxx-xxx-xxxxxxxx-xxxx-xxxxxxxxxx',
-  '087xxx-xxx-xxxxxxx-xxxxxx-xxxxxxx',
-  '088xxx-xxx-xxxxxxx-xxxxxxxx',
-  '089xxx-xxx-xxxxxxxx-xxxxxxx',
-  '090xxx-xxx-xxxxxxxx-xxxxxxx-xxxxxx',
-  '091xxx-xxxx-xxxxxxxxxx',
-  '092xxx-xxx-xxxxxx-xx',
-  '093xxx-xxx-xxxxxxx',
-  '094xxx-xxx-xxxxxxx-xxxxx',
-  '095xxx-xxx-xxxxxxxxxx',
-  '096xxx-xxx-xxxxxxxxxxxxxxx',
-  '098xxx-xxx-xxxxxxxxxxxxxxxxx',
-  '098xxx-xxx-xxxxxxxx-xxxxxxx-xxxxxxx',
-  '099xxx-xxx-xxxxxxxx-xx',
-  '100xxx-xxx-xxxx-xxxxxxxxxxx-xxxxxxx',
-  '101xxx-xxxx-xxxxxxxxxxxxxxxx',
-  '102xxx-xxx-xxxxxxxxxxxxxxxxxx',
-  '103xxx-xxx-xxxxxxxx-xxxxxxxxxxxx-xxx',
-  '104xxx-xxx-xxxx-xxxxxxx',
-  '105xxx-xxx-xxx-xxxxxxx-xxxxxx-xxxxxxx',
-  '106xxx-xxx-xxx-xxxx-xxxx-xxx-xxxxxxxxx',
-  '107xxx-xxx-xxxxxxxxx',
-  '108xxx-xxx-xxx-xxxxxxx',
-  '109xxx-xxx-xxx-xxxxxxx',
-  '110xxx-xxxx-xxxxx',
-  '111xxx-xxx-xxx-xxxx-xxxx',
-  '112xxx-xxx-xxx-xxxxxxx',
-  '113xxx-xxx-xxx-xxxxxxx',
-  '114xxx-xxx-xxxxxxxxxxxx-xxxxxxx',
-  '115xxx-xxx-xxx-xxxx-xxxx',
-  '116xxx-xxx-xxx-xxxxxxxx-xxxxxxxx',
-  '117xxx-xxx-xxxxxxx',
-  '118xxx-xxx-xxxxxxxx-xxxxxxx',
-  '119xxx-xxx-xxxxxx',
-  '120xxxx-xxx-xxxxxxxxxx',
-  '121xxx-xxx-xxxxxx-xxxxxx-xxxxxxx',
-  '122xxx-xxx-xxxxxx-xxxxxxx',
-  '123xxx-xxx-xxxxxx-xx',
-  '124xxxx-xxx-xxx-xxxx-xxxxxxx',
-  '125xxx-xxx-xxxxxxxxxxx',
-  '126xxx-xxx-xxxxxxxxxxx-xxxxxxx',
-  '127xxx-xxx-xxxxxx-xxx-xxxxxx',
-  '128xxx-xxx-xxxxxxxxxx',
-  '129xxx-xxx-xxxxxxxxxx-xxx',
-  '130xxx-xxx-xxxxx-xxxxxxx',
-  '131xxx-xxx-xxxxxx-xxxxxxxx-xxx',
-  '132xxx-xxx-xxxxx-xxxxxxxx-xxxxxx',
-  '133xxx-xxx-xxxxx-xx',
-  '134xxx-xxx-xxxx-xxxxxxx-xxx-xxxxxxx',
-  '135xxx-xxx-xxxx-xxxxxxx-xxx-xxxxxx',
-  '136xxx-xxx-xxxxxxxxxxxxxxx',
-  '137xxx-xxx-xxx',
-  '138xxx-xxx-xxxxxxx-xxxxxxx',
-  '139xxx-xxx-xxxxxxx-xxx-xxxxxxx',
-  '140xxx-xxx-xxxxxxxxx-xxxxxx-xxxxxxx',
-  '141xxx-xxx-xxxxxxxxxx-xxxx-xxxxxxx',
-  '142xxx-xxx-xx-xxxxxxxxxx-xxxxx',
-  '143xxx-xxx-xxxxxxxxxxxxxx-xxxxxxx',
-  '144xxx-xxx-xxxxxxxxxxxxxxxxx',
-  '145xxx-xxx-xxxxxxxx-xxxxxxx',
-  '146xxx-xxx-xxxxxxxxxxxxx-xxxxxxx',
-  '147xxx-xxx-xxxxxxx-xxxxxxx',
-  '148xxx-xxx-xxxxxx-xxxxxxx',
-  '149xxx-xxx-xxxxx-xxxxx',
-  '150xxx-xxx-xxxxx-xxxx',
-  '151xxx-xxx-xxxxxxxxxxxxxxxxx',
-  '152xxx-xxx-xxxxxxxxxxxxxxxxxxx',
-  '153xxx-xxx-xxxxxxxxx-xxxxx-xxx',
-  '154xxx-xxx-xxxxxxxx-xxxxx-xxxx-xxxx',
-  '155xxx-xxx-xxxxxxxx-xxxxxxxxxxxx-xxxx',
-  '156xxx-xxx-xxxxxxxx-xx-xxx-xxxxxxxx',
-  '157xxx-xxx-xxxxxxxx-xxxxxx-xxxxxxx',
-  '158xxx-xxx-xxxxxxxxxx',
-  '159xxx-xxx-xxxx-xxxxxx',
-  '160xxx-xxx-xxxxxxxxxx',
-  '161xxx-xxx-xxxxxxxxxxxxx',
-  '162xxx-xxx-xxxxxxxxxxxxxxxx',
-  '163xxx-xxx-xxxxx-xxxxxx-xxxxxxx',
-  '164xxx-xxx-xxxxxxx-xxxxxxxxxxxxx',
-  '165xxx-xxx-xxxxxxxxxxxxxx-xxxxxxx',
-  '166xxx-xxx-xxxxxxxxx-xxxxxxx-x2',
-  '167xxx-xxx-xxx',
-  '168xxx-xxx-xxxxxxxxxxxx',
-  '169xxx-xxx-xxxxxxxxx-xxxxxxxx',
-  '170xxx-xxx-xxxxxxxxx-xxx-xxxxxxx',
-  '171xxx-xxx-xxxxxxxxx',
-  '172xxx-xxxx-xxxxxxxxx',
-  '173xxx-xxx',
-  '174xxx-xxxxxx-xxxxxxx',
-  '175xxx-xxxxxx-xxxxxx-xxxx',
-  '176xxx-xxxxxx-xxxxx',
-  '177xxx-xxxxx-xxxxxxxx',
-  '178xxx-xxxxxx',
-  '179xxx-xxxxxxx-xxxx',
-  '180xxx-xxxxxxx-xxxx-xxxx',
-  '181xxx-xxxxxxx-xxxx-xxxxxxx',
-  '182xxx-xxxxxxx-xxxx-xxxxxxxxxxxxxxx',
-  '183xxx-xxxxxxxx-xxxx-xxxxx',
-  '184xxx-xxxxxxx-xxxx-xxxxxxx',
-  '185xxx-xxxxxxx-xxxx-xxxxxxxx-xxxxxxx',
-  '186xxx-xxxxxxx-xxxx-xxx',
-  '187xxx-xxxxxxx-xxxx-xxxxxxx-xxx-xxxxxxx',
-  '188xxx-xxxxxxx-xxxx-xxxxxxxxxxxxxx-xxxxxxx',
-  '189xxx-xxxxxxxx-xxxx-xxxxxxxxxxxxxxxxx',
-  '190xxx-xxxxxxx-xxxx-xxxxx-xxxxxx-xxxxxxx',
-  '191xxx-xxxxxxx-xxxxxxxxxx',
-  '192xxx-xxxxxxx-xxxxxxx',
-  '193xxx-xxxxxxx-xxxxxxxxxxxxxxx',
-  '194xxx-xxxxxxx-xxxxx',
-  '195xxx-xxxxxxx-xxxxxxx',
-  '196xxx-xxxxxxx-xxxxxxxx-xxxxxxx',
-  '197xxx-xxxxxxx-xxx',
-  '198xxx-xxxxxxx-xxxxxxx-xxx-xxxxxxx',
-  '199xxx-xxxxxxx-xxxxxxxxxxxxxx-xxxxxxx',
-  '200xxx-xxxxxxxx-xxxxxxxxxxxxxxxxx',
-  '201xxx-xxxxxxx-xxxxx-xxxxxx-xxxxxxx',
-  '202xxx-xxx',
-  '203xxx-xxx-xxxxxx',
-  '204xxxxxxxxx-xxx',
-  '205xxxxxxxxxxx-xxx',
-  '206xxxxxxxxx-xxxxxxx',
-  '207xxxx-xxxxxx-xxxxxxxxxxx-xxxxx1',
-  '208xxxx-xxxxxxxx-xxxxxxxx-xxxxx1',
-  '209xxxx-xxxxxxx-xxxxxxx-xxxxx1',
-  '209xxxx-xxxxxxx-xxxxxxx-xxxxx2',
-  '210xxxx-xxxx-xxxxxxx-xxxxx1',
-  '211xxxx-xxxxx-xxxxxxxx1-xxxxx1',
-  '212xxxx-xxxx-xxxxxxxx2-xxxxx1',
-  '213xxxx-xxxx-xxxxxxx1-xxxxx1',
-  '214xxxx-xxxx-xxxxxxx2-xxxxx1',
-  '215xxxxxxxxx-xxxxxx',
-  '216xxxxxxxxx-xxxxxxx',
-  '217xxxxxxxxx-xxxx',
-];
-
-{
-  'yyyyyyyyy': {
-    local Func3(z, n) = utils.Func3('yyyyyyyyy', z, n),
-
-    global: {
-      [n]: {
-        members: [
-          Func3(z, '%s-gggg-%s-%s' % [n, z, suffix]),
-          for z in ['ooooooo-a', 'ooooooo-b', 'ooooooo-c',
-                       'ooooooo-a', 'ooooooo-b', 'ooooooo-c']
-          for suffix in ['a', 'b', 'c']
-        ],
-      }
-      for n in long_list
-    },
-  },
-}
-
-```
-</details>
-
-| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
-|:---|---:|---:|---:|---:|
-| `Rust` | 12.6 ± 0.1 | 12.3 | 12.9 | 1.00 |
-| `Rust (alternative, rsjsonnet)` | 49.7 ± 1.0 | 47.3 | 53.0 | 3.96 ± 0.09 |
-| `Go` | 6858.1 ± 34.9 | 6815.9 | 6951.8 | 546.32 ± 6.87 |
-| `Scala` | 382.3 ± 3.9 | 371.7 | 387.1 | 30.46 ± 0.47 |
-| `C++` | 24472.7 ± 155.7 | 24230.3 | 24799.3 | 1949.51 ± 25.63 |
-
-### Realistic 2
-
-<details>
-<summary>Source</summary>
-
-```jsonnet
-local rfc3339(timestamp) = '1970-01-01T00:00:00Z';
-
-local name1(a, b, c) =
-  'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%sBBBBBBB%sCCCCCCCCCCC%s'
-  % [a, b, c];
-
-local name2(x) =
-  'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX%s' % x;
-
-local T1 = 'PPPPPPPPPPPPPPPPPPPPPPP';
-local T2 = 'QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ';
-
-local LOCATIONS = [
-  'europe-west1-b',
-  'europe-west1-c',
-  'europe-west1-d',
-  'europe-west2-a',
-  'europe-west2-b',
-  'europe-west2-c',
-  'europe-west3-a',
-  'europe-west3-b',
-  'europe-west3-c',
-  'europe-west4-a',
-  'europe-west4-b',
-  'europe-west4-c',
-  'us-central1-a',
-  'us-central1-b',
-  'us-central1-c',
-  'us-central1-f',
-  'us-east1-b',
-  'us-east1-c',
-  'us-east1-d',
-  'us-east4-a',
-  'us-east4-b',
-  'us-east4-c',
-  'us-west1-a',
-  'us-west1-b',
-  'us-west1-c',
-];
-
-
-// The return value is a function to allow it to be parameterized.
-function(
-  timestamp=0,
-  x='xxxxxxxxxxxxxxxxxxx',
-  prefix='prefix',
-  num1=50,
-  count=25,
-  offset=0,
-)
-  local rfc_timestamp = rfc3339(timestamp);
-
-  local func1(i) =
-    local location = LOCATIONS[i % std.length(LOCATIONS)];
-    [
-      local name = '%s-%000d-%000d' % [prefix, i, j];
-      {
-        field_zz1: rfc_timestamp,
-        fie_z2: {
-          field_z3: name1(x, location, name),
-          field_zzzzzzzzzz4: name2(x),
-          field_zzz5: [name],
-          field_z6: T1,
-          field_z7: location,
-          fi_8: '???',
-          fiel_z9: '99',
-        },
-      }
-      for j in std.range(0, num1 - 1)
-    ];
-
-  local func2(i) =
-    local location = LOCATIONS[i % std.length(LOCATIONS)];
-    local all = [
-      name1(x, location, '%s-%000d-%000d' % [prefix, i, j])
-      for j in std.range(0, num1 - 1)
-    ];
-    [
-      {
-        field_yy1: rfc_timestamp,
-        field_yyyyy2: 'EEEE',
-        field_yyyyy3: {
-          field_y4: T2,
-          field_yyyyyyy5: p,
-          field_yyyyyyy6: q,
-        },
-      }
-      for p in all
-      for q in all
-      if p != q
-    ];
-
-
-  {
-    field_x1: '-----',
-    field_xxxxxxxxxxxxxxxx2: std.join([], [
-      func1(offset * count + i)
-      for i in std.range(0, count - 1)
-    ]),
-    field_xxxxxxxxxxxxxxxxxxxxxx3: std.join([], [
-      func2(offset * count + i)
-      for i in std.range(0, count - 1)
-    ]),
-  }
-
-
-```
-</details>
-
-| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
-|:---|---:|---:|---:|---:|
-| `Rust` | 259.9 ± 4.4 | 250.9 | 266.7 | 1.00 |
-| `Rust (alternative, rsjsonnet)` | 550.2 ± 16.6 | 531.9 | 600.7 | 2.12 ± 0.07 |
-| `Go` | 6732.4 ± 51.4 | 6660.2 | 6858.6 | 25.90 ± 0.48 |
-| `Scala` | 675.4 ± 10.9 | 667.3 | 720.0 | 2.60 ± 0.06 |
-| `C++` | 26414.5 ± 259.9 | 25948.9 | 26934.4 | 101.63 ± 1.99 |
-
-## Benchmarks from C++ jsonnet (/benchmarks)
-
-### Tail call
-
-<details>
-<summary>Source</summary>
-
-```jsonnet
-/*
-Copyright 2015 Google Inc. All rights reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-local sum(x) =
-  if x == 0 then
-    0
-  else
-    x + sum(x - 1);
-sum(300)
-
-```
-</details>
-
-| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
-|:---|---:|---:|---:|---:|
-| `Rust` | 1.8 ± 0.1 | 1.6 | 2.6 | 1.00 |
-| `Rust (alternative, rsjsonnet)` | 3.1 ± 0.1 | 2.8 | 3.4 | 1.69 ± 0.12 |
-| `Go` | 5.3 ± 0.2 | 4.9 | 5.9 | 2.90 ± 0.20 |
-| `Scala` | 287.4 ± 1.2 | 285.4 | 288.9 | 156.55 ± 9.92 |
-| `C++` | 32.1 ± 0.3 | 31.6 | 33.0 | 17.49 ± 1.12 |
-
-### Inheritance recursion
-
-<details>
-<summary>Source</summary>
-
-```jsonnet
-/*
-Copyright 2015 Google Inc. All rights reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-local Fib = {
-  n: 1,
-  local outer = self,
-  r: if self.n <= 1 then 1 else (Fib { n: outer.n - 1 }).r + (Fib { n: outer.n - 2 }).r,
-};
-
-(Fib { n: 25 }).r
-
-```
-</details>
-
-| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
-|:---|---:|---:|---:|---:|
-| `Rust` | 376.1 ± 5.2 | 364.3 | 383.7 | 1.00 |
-| `Rust (alternative, rsjsonnet)` | 496.7 ± 13.0 | 470.6 | 506.8 | 1.32 ± 0.04 |
-| `Go` | 873.9 ± 7.1 | 859.3 | 888.0 | 2.32 ± 0.04 |
-| `Scala` | 420.8 ± 6.3 | 413.9 | 437.1 | 1.12 ± 0.02 |
-| `C++` | 2647.5 ± 14.2 | 2630.9 | 2675.6 | 7.04 ± 0.10 |
-
-### Simple recursive call
-
-<details>
-<summary>Source</summary>
-
-```jsonnet
-/*
-Copyright 2015 Google Inc. All rights reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-local fibonacci(n) =
-  if n <= 1 then
-    1
-  else
-    fibonacci(n - 1) + fibonacci(n - 2);
-
-fibonacci(25)
-
-```
-</details>
-
-| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
-|:---|---:|---:|---:|---:|
-| `Rust` | 81.3 ± 0.3 | 80.9 | 82.4 | 1.00 |
-| `Rust (alternative, rsjsonnet)` | 202.3 ± 12.0 | 183.1 | 237.6 | 2.49 ± 0.15 |
-| `Go` | 349.4 ± 1.7 | 347.2 | 354.2 | 4.30 ± 0.03 |
-| `Scala` | 322.5 ± 3.0 | 318.7 | 330.7 | 3.97 ± 0.04 |
-| `C++` | 193.5 ± 0.9 | 191.4 | 194.8 | 2.38 ± 0.01 |
-
-### Foldl string concat
-
-<details>
-<summary>Source</summary>
-
-```jsonnet
-std.foldl(function(e, res) e + res, std.makeArray(20000, function(i) 'aaaaa'), '')
-
-```
-</details>
-
-| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
-|:---|---:|---:|---:|---:|
-| `Rust` | 8.9 ± 0.1 | 8.6 | 9.3 | 1.00 |
-| `Rust (alternative, rsjsonnet)` | 303.1 ± 3.8 | 297.6 | 308.1 | 34.06 ± 0.68 |
-| `Go` | 50.9 ± 0.8 | 48.3 | 52.2 | 5.72 ± 0.13 |
-| `Scala` | 550.6 ± 5.5 | 542.8 | 563.7 | 61.86 ± 1.13 |
-| `C++` | 902.6 ± 4.8 | 891.4 | 912.1 | 101.41 ± 1.65 |
-
-### Array sorts
-
-> Note: No results for Scala, sjsonnet doesn't support keyF in std.sort: https://github.com/databricks/sjsonnet/issues/204
-
-<details>
-<summary>Source</summary>
-
-```jsonnet
-// A benchmark for builtin sort
-
-local reverse = std.reverse;
-local sort = std.sort;
-
-true
-&& std.assertEqual(std.range(1, 500), sort(std.range(1, 500)))
-&& std.assertEqual(std.range(1, 1000), sort(std.range(1, 1000)))
-&& std.assertEqual(reverse(std.range(1, 1000)), sort(std.range(1, 1000), keyF=function(x) -x))
-&& std.assertEqual(std.range(1, 1000), sort(reverse(std.range(1, 1000))))
-&& std.assertEqual(std.makeArray(2000, function(i) std.floor((i + 2) / 2)), sort(std.range(1, 1000) + reverse(std.range(1, 1000))))
-
-```
-</details>
-
-| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
-|:---|---:|---:|---:|---:|
-| `Rust` | 3.2 ± 0.2 | 2.9 | 4.1 | 1.00 |
-| `Rust (alternative, rsjsonnet)` | 14.4 ± 0.6 | 13.1 | 16.2 | 4.46 ± 0.28 |
-| `Go` | 12.1 ± 0.2 | 11.4 | 12.8 | 3.74 ± 0.20 |
-| `C++` | 3637.1 ± 24.9 | 3557.4 | 3664.7 | 1128.64 ± 56.81 |
-
-### Lazy array
-
-<details>
-<summary>Source</summary>
-
-```jsonnet
-local f2(f) = function(x) f(f(x));
-local id(x) = x;
-
-local slowId = std.makeArray(20, function(i) if i == 0 then id else f2(slowId[i - 1]));
-
-slowId[15](42)
-
-```
-</details>
-
-| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
-|:---|---:|---:|---:|---:|
-| `Rust` | 54.1 ± 1.1 | 52.3 | 56.3 | 1.30 ± 0.03 |
-| `Rust (alternative, rsjsonnet)` | 41.7 ± 0.7 | 39.6 | 43.8 | 1.00 |
-| `Go` | 596.5 ± 5.2 | 585.1 | 606.9 | 14.30 ± 0.29 |
-| `Scala` | 306.6 ± 1.6 | 303.5 | 310.4 | 7.35 ± 0.14 |
-| `C++` | 184.5 ± 1.8 | 182.0 | 187.9 | 4.42 ± 0.09 |
-
-### Inheritance function recursion
-
-<details>
-<summary>Source</summary>
-
-```jsonnet
-local fibnext = {
-  a: super.a + super.b,
-  b: super.a,
-};
-local fib(n) =
-  if n == 0 then
-    { a: 1, b: 1 }
-  else
-    fib(n - 1) + fibnext;
-
-fib(25)
-
-```
-</details>
-
-| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
-|:---|---:|---:|---:|---:|
-| `Rust` | 1.6 ± 0.1 | 1.5 | 2.5 | 1.00 |
-| `Rust (alternative, rsjsonnet)` | 2.9 ± 0.1 | 2.7 | 3.7 | 1.78 ± 0.13 |
-| `Go` | 2.4 ± 0.1 | 2.1 | 2.9 | 1.48 ± 0.12 |
-| `Scala` | 293.2 ± 1.5 | 289.9 | 296.1 | 178.20 ± 12.35 |
-| `C++` | 999.1 ± 9.2 | 974.4 | 1010.9 | 607.23 ± 42.34 |
-
-### String strips
-
-<details>
-<summary>Source</summary>
-
-```jsonnet
-// This string must be longer than max stack frames
-local veryLongString = std.join('', std.repeat(['e'], 510));
-
-std.assertEqual(std.stripChars(veryLongString + 'ok' + veryLongString, 'e'), 'ok') &&
-std.assertEqual(std.lstripChars(veryLongString + 'ok', 'e'), 'ok') &&
-std.assertEqual(std.rstripChars('ok' + veryLongString, 'e'), 'ok') &&
-
-true
-
-```
-</details>
-
-| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
-|:---|---:|---:|---:|---:|
-| `Rust` | 8.6 ± 0.2 | 8.4 | 9.5 | 1.00 |
-| `Rust (alternative, rsjsonnet)` | 18.4 ± 0.4 | 17.6 | 20.8 | 2.13 ± 0.06 |
-| `Go` | 11.2 ± 0.2 | 10.4 | 11.9 | 1.29 ± 0.04 |
-| `Scala` | 294.9 ± 2.0 | 292.2 | 301.9 | 34.10 ± 0.65 |
-| `C++` | 37345.3 ± 208.2 | 36567.2 | 37689.0 | 4318.10 ± 80.13 |
-
-### Big object
-
-<details>
-<summary>Source</summary>
-
-```jsonnet
-// Generator source
-local n = 2000;
-
-local objLocal(name, body) = 'local ' + name + ' = ' + body + ',';
-local objField(name, body) = name + ': ' + body + ',';
-
-local allLocals =
-  std.makeArray(n, function(i) objLocal('l' + i, '1'));
-
-local allFields =
-  std.makeArray(n, function(i) objField('f' + i, '2'));
-
-local indent = '  ';
-local indentAndSeparate(s) = indent + s + '\n';
-
-local objContents = std.map(indentAndSeparate, allLocals + allFields);
-
-local objectBody = std.join('', objContents);
-'{\n' + objectBody + '}\n'
-
-```
-</details>
-
-| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
-|:---|---:|---:|---:|---:|
-| `Rust` | 2.2 ± 0.1 | 1.9 | 3.0 | 1.00 |
-| `Rust (alternative, rsjsonnet)` | 3.2 ± 0.1 | 2.9 | 3.5 | 1.46 ± 0.10 |
-| `Go` | 4.1 ± 0.1 | 3.7 | 4.6 | 1.85 ± 0.13 |
-| `Scala` | 292.3 ± 2.9 | 289.3 | 304.0 | 132.11 ± 8.64 |
-| `C++` | 28.3 ± 0.3 | 27.7 | 29.1 | 12.80 ± 0.84 |
-
-## Benchmarks from Go jsonnet (builtins)
-
-### std.base64
-
-<details>
-<summary>Source</summary>
-
-```jsonnet
-{
-    foo: [
-        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)
-    ],
-}
-```
-</details>
-
-| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
-|:---|---:|---:|---:|---:|
-| `Rust` | 2.7 ± 0.1 | 2.4 | 3.4 | 1.00 |
-| `Rust (alternative, rsjsonnet)` | 2195.9 ± 48.5 | 2098.1 | 2229.6 | 804.07 ± 39.58 |
-| `Go` | 17.0 ± 0.3 | 16.1 | 17.7 | 6.22 ± 0.29 |
-| `Scala` | 313.8 ± 1.2 | 311.3 | 316.1 | 114.91 ± 5.07 |
-| `C++` | 14621.6 ± 110.0 | 14473.9 | 14774.9 | 5354.05 ± 238.94 |
-
-### std.base64Decode
-
-<details>
-<summary>Source</summary>
-
-```jsonnet
-{
-    foo: [
-        std.base64Decode("TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuIFNlZCB0dXJwaXMgdGluY2lkdW50IGlkIGFsaXF1ZXQgcmlzdXMuIEVnZXQgbWF1cmlzIHBoYXJldHJhIGV0IHVsdHJpY2VzIG5lcXVlIG9ybmFyZSBhZW5lYW4gZXVpc21vZC4gRGlhbSBxdWlzIGVuaW0gbG9ib3J0aXMgc2NlbGVyaXNxdWUgZmVybWVudHVtLiBWYXJpdXMgZHVpcyBhdCBjb25zZWN0ZXR1ciBsb3JlbSBkb25lYyBtYXNzYSBzYXBpZW4uIERpYW0gc2l0IGFtZXQgbmlzbCBzdXNjaXBpdCBhZGlwaXNjaW5nIGJpYmVuZHVtIGVzdCB1bHRyaWNpZXMgaW50ZWdlci4gTGVjdHVzIHVybmEgZHVpcyBjb252YWxsaXMgY29udmFsbGlzIHRlbGx1cy4gTmliaCBpcHN1bSBjb25zZXF1YXQgbmlzbCB2ZWwgcHJldGl1bSBsZWN0dXMgcXVhbSBpZCBsZW8uIEZldWdpYXQgaW4gYW50ZSBtZXR1cyBkaWN0dW0gYXQgdGVtcG9yIGNvbW1vZG8uIFZlbGl0IGRpZ25pc3NpbSBzb2RhbGVzIHV0IGV1IHNlbSBpbnRlZ2VyLiBEaWN0dW0gc2l0IGFtZXQganVzdG8gZG9uZWMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuIFNlZCB0dXJwaXMgdGluY2lkdW50IGlkIGFsaXF1ZXQgcmlzdXMuIEVnZXQgbWF1cmlzIHBoYXJldHJhIGV0IHVsdHJpY2VzIG5lcXVlIG9ybmFyZSBhZW5lYW4gZXVpc21vZC4gRGlhbSBxdWlzIGVuaW0gbG9ib3J0aXMgc2NlbGVyaXNxdWUgZmVybWVudHVtLiBWYXJpdXMgZHVpcyBhdCBjb25zZWN0ZXR1ciBsb3JlbSBkb25lYyBtYXNzYSBzYXBpZW4uIERpYW0gc2l0IGFtZXQgbmlzbCBzdXNjaXBpdCBhZGlwaXNjaW5nIGJpYmVuZHVtIGVzdCB1bHRyaWNpZXMgaW50ZWdlci4gTGVjdHVzIHVybmEgZHVpcyBjb252YWxsaXMgY29udmFsbGlzIHRlbGx1cy4gTmliaCBpcHN1bSBjb25zZXF1YXQgbmlzbCB2ZWwgcHJldGl1bSBsZWN0dXMgcXVhbSBpZCBsZW8uIEZldWdpYXQgaW4gYW50ZSBtZXR1cyBkaWN0dW0gYXQgdGVtcG9yIGNvbW1vZG8uIFZlbGl0IGRpZ25pc3NpbSBzb2RhbGVzIHV0IGV1IHNlbSBpbnRlZ2VyLiBEaWN0dW0gc2l0IGFtZXQganVzdG8gZG9uZWMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuIFNlZCB0dXJwaXMgdGluY2lkdW50IGlkIGFsaXF1ZXQgcmlzdXMuIEVnZXQgbWF1cmlzIHBoYXJldHJhIGV0IHVsdHJpY2VzIG5lcXVlIG9ybmFyZSBhZW5lYW4gZXVpc21vZC4gRGlhbSBxdWlzIGVuaW0gbG9ib3J0aXMgc2NlbGVyaXNxdWUgZmVybWVudHVtLiBWYXJpdXMgZHVpcyBhdCBjb25zZWN0ZXR1ciBsb3JlbSBkb25lYyBtYXNzYSBzYXBpZW4uIERpYW0gc2l0IGFtZXQgbmlzbCBzdXNjaXBpdCBhZGlwaXNjaW5nIGJpYmVuZHVtIGVzdCB1bHRyaWNpZXMgaW50ZWdlci4gTGVjdHVzIHVybmEgZHVpcyBjb252YWxsaXMgY29udmFsbGlzIHRlbGx1cy4gTmliaCBpcHN1bSBjb25zZXF1YXQgbmlzbCB2ZWwgcHJldGl1bSBsZWN0dXMgcXVhbSBpZCBsZW8uIEZldWdpYXQgaW4gYW50ZSBtZXR1cyBkaWN0dW0gYXQgdGVtcG9yIGNvbW1vZG8uIFZlbGl0IGRpZ25pc3NpbSBzb2RhbGVzIHV0IGV1IHNlbSBpbnRlZ2VyLiBEaWN0dW0gc2l0IGFtZXQganVzdG8gZG9uZWMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy5Mb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4gU2VkIHR1cnBpcyB0aW5jaWR1bnQgaWQgYWxpcXVldCByaXN1cy4gRWdldCBtYXVyaXMgcGhhcmV0cmEgZXQgdWx0cmljZXMgbmVxdWUgb3JuYXJlIGFlbmVhbiBldWlzbW9kLiBEaWFtIHF1aXMgZW5pbSBsb2JvcnRpcyBzY2VsZXJpc3F1ZSBmZXJtZW50dW0uIFZhcml1cyBkdWlzIGF0IGNvbnNlY3RldHVyIGxvcmVtIGRvbmVjIG1hc3NhIHNhcGllbi4gRGlhbSBzaXQgYW1ldCBuaXNsIHN1c2NpcGl0IGFkaXBpc2NpbmcgYmliZW5kdW0gZXN0IHVsdHJpY2llcyBpbnRlZ2VyLiBMZWN0dXMgdXJuYSBkdWlzIGNvbnZhbGxpcyBjb252YWxsaXMgdGVsbHVzLiBOaWJoIGlwc3VtIGNvbnNlcXVhdCBuaXNsIHZlbCBwcmV0aXVtIGxlY3R1cyBxdWFtIGlkIGxlby4gRmV1Z2lhdCBpbiBhbnRlIG1ldHVzIGRpY3R1bSBhdCB0ZW1wb3IgY29tbW9kby4gVmVsaXQgZGlnbmlzc2ltIHNvZGFsZXMgdXQgZXUgc2VtIGludGVnZXIuIERpY3R1bSBzaXQgYW1ldCBqdXN0byBkb25lYy4gU2NlbGVyaXNxdWUgbWF1cmlzIHBlbGxlbnRlc3F1ZSBwdWx2aW5hciBwZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4gU2VkIHR1cnBpcyB0aW5jaWR1bnQgaWQgYWxpcXVldCByaXN1cy4gRWdldCBtYXVyaXMgcGhhcmV0cmEgZXQgdWx0cmljZXMgbmVxdWUgb3JuYXJlIGFlbmVhbiBldWlzbW9kLiBEaWFtIHF1aXMgZW5pbSBsb2JvcnRpcyBzY2VsZXJpc3F1ZSBmZXJtZW50dW0uIFZhcml1cyBkdWlzIGF0IGNvbnNlY3RldHVyIGxvcmVtIGRvbmVjIG1hc3NhIHNhcGllbi4gRGlhbSBzaXQgYW1ldCBuaXNsIHN1c2NpcGl0IGFkaXBpc2NpbmcgYmliZW5kdW0gZXN0IHVsdHJpY2llcyBpbnRlZ2VyLiBMZWN0dXMgdXJuYSBkdWlzIGNvbnZhbGxpcyBjb252YWxsaXMgdGVsbHVzLiBOaWJoIGlwc3VtIGNvbnNlcXVhdCBuaXNsIHZlbCBwcmV0aXVtIGxlY3R1cyBxdWFtIGlkIGxlby4gRmV1Z2lhdCBpbiBhbnRlIG1ldHVzIGRpY3R1bSBhdCB0ZW1wb3IgY29tbW9kby4gVmVsaXQgZGlnbmlzc2ltIHNvZGFsZXMgdXQgZXUgc2VtIGludGVnZXIuIERpY3R1bSBzaXQgYW1ldCBqdXN0byBkb25lYy4gU2NlbGVyaXNxdWUgbWF1cmlzIHBlbGxlbnRlc3F1ZSBwdWx2aW5hciBwZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzLiBTY2VsZXJpc3F1ZSBtYXVyaXMgcGVsbGVudGVzcXVlIHB1bHZpbmFyIHBlbGxlbnRlc3F1ZSBoYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUgc2VuZWN0dXMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy4gU2NlbGVyaXNxdWUgbWF1cmlzIHBlbGxlbnRlc3F1ZSBwdWx2aW5hciBwZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzLiBTY2VsZXJpc3F1ZSBtYXVyaXMgcGVsbGVudGVzcXVlIHB1bHZpbmFyIHBlbGxlbnRlc3F1ZSBoYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUgc2VuZWN0dXMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy4=") for i in std.range(0,100)
-    ],
-}
-```
-</details>
-
-| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
-|:---|---:|---:|---:|---:|
-| `Rust` | 2.6 ± 0.1 | 2.3 | 3.1 | 1.00 |
-| `Rust (alternative, rsjsonnet)` | 7889.2 ± 74.7 | 7711.6 | 8051.1 | 3045.22 ± 138.95 |
-| `Go` | 15.2 ± 0.3 | 14.6 | 16.5 | 5.85 ± 0.28 |
-| `Scala` | 313.0 ± 2.5 | 309.5 | 321.2 | 120.80 ± 5.47 |
-| `C++` | 9930.9 ± 26.5 | 9895.0 | 9997.9 | 3833.33 ± 171.41 |
-
-### std.base64DecodeBytes
-
-<details>
-<summary>Source</summary>
-
-```jsonnet
-{
-    foo: [
-        std.base64DecodeBytes("TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuIFNlZCB0dXJwaXMgdGluY2lkdW50IGlkIGFsaXF1ZXQgcmlzdXMuIEVnZXQgbWF1cmlzIHBoYXJldHJhIGV0IHVsdHJpY2VzIG5lcXVlIG9ybmFyZSBhZW5lYW4gZXVpc21vZC4gRGlhbSBxdWlzIGVuaW0gbG9ib3J0aXMgc2NlbGVyaXNxdWUgZmVybWVudHVtLiBWYXJpdXMgZHVpcyBhdCBjb25zZWN0ZXR1ciBsb3JlbSBkb25lYyBtYXNzYSBzYXBpZW4uIERpYW0gc2l0IGFtZXQgbmlzbCBzdXNjaXBpdCBhZGlwaXNjaW5nIGJpYmVuZHVtIGVzdCB1bHRyaWNpZXMgaW50ZWdlci4gTGVjdHVzIHVybmEgZHVpcyBjb252YWxsaXMgY29udmFsbGlzIHRlbGx1cy4gTmliaCBpcHN1bSBjb25zZXF1YXQgbmlzbCB2ZWwgcHJldGl1bSBsZWN0dXMgcXVhbSBpZCBsZW8uIEZldWdpYXQgaW4gYW50ZSBtZXR1cyBkaWN0dW0gYXQgdGVtcG9yIGNvbW1vZG8uIFZlbGl0IGRpZ25pc3NpbSBzb2RhbGVzIHV0IGV1IHNlbSBpbnRlZ2VyLiBEaWN0dW0gc2l0IGFtZXQganVzdG8gZG9uZWMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuIFNlZCB0dXJwaXMgdGluY2lkdW50IGlkIGFsaXF1ZXQgcmlzdXMuIEVnZXQgbWF1cmlzIHBoYXJldHJhIGV0IHVsdHJpY2VzIG5lcXVlIG9ybmFyZSBhZW5lYW4gZXVpc21vZC4gRGlhbSBxdWlzIGVuaW0gbG9ib3J0aXMgc2NlbGVyaXNxdWUgZmVybWVudHVtLiBWYXJpdXMgZHVpcyBhdCBjb25zZWN0ZXR1ciBsb3JlbSBkb25lYyBtYXNzYSBzYXBpZW4uIERpYW0gc2l0IGFtZXQgbmlzbCBzdXNjaXBpdCBhZGlwaXNjaW5nIGJpYmVuZHVtIGVzdCB1bHRyaWNpZXMgaW50ZWdlci4gTGVjdHVzIHVybmEgZHVpcyBjb252YWxsaXMgY29udmFsbGlzIHRlbGx1cy4gTmliaCBpcHN1bSBjb25zZXF1YXQgbmlzbCB2ZWwgcHJldGl1bSBsZWN0dXMgcXVhbSBpZCBsZW8uIEZldWdpYXQgaW4gYW50ZSBtZXR1cyBkaWN0dW0gYXQgdGVtcG9yIGNvbW1vZG8uIFZlbGl0IGRpZ25pc3NpbSBzb2RhbGVzIHV0IGV1IHNlbSBpbnRlZ2VyLiBEaWN0dW0gc2l0IGFtZXQganVzdG8gZG9uZWMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuIFNlZCB0dXJwaXMgdGluY2lkdW50IGlkIGFsaXF1ZXQgcmlzdXMuIEVnZXQgbWF1cmlzIHBoYXJldHJhIGV0IHVsdHJpY2VzIG5lcXVlIG9ybmFyZSBhZW5lYW4gZXVpc21vZC4gRGlhbSBxdWlzIGVuaW0gbG9ib3J0aXMgc2NlbGVyaXNxdWUgZmVybWVudHVtLiBWYXJpdXMgZHVpcyBhdCBjb25zZWN0ZXR1ciBsb3JlbSBkb25lYyBtYXNzYSBzYXBpZW4uIERpYW0gc2l0IGFtZXQgbmlzbCBzdXNjaXBpdCBhZGlwaXNjaW5nIGJpYmVuZHVtIGVzdCB1bHRyaWNpZXMgaW50ZWdlci4gTGVjdHVzIHVybmEgZHVpcyBjb252YWxsaXMgY29udmFsbGlzIHRlbGx1cy4gTmliaCBpcHN1bSBjb25zZXF1YXQgbmlzbCB2ZWwgcHJldGl1bSBsZWN0dXMgcXVhbSBpZCBsZW8uIEZldWdpYXQgaW4gYW50ZSBtZXR1cyBkaWN0dW0gYXQgdGVtcG9yIGNvbW1vZG8uIFZlbGl0IGRpZ25pc3NpbSBzb2RhbGVzIHV0IGV1IHNlbSBpbnRlZ2VyLiBEaWN0dW0gc2l0IGFtZXQganVzdG8gZG9uZWMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy5Mb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4gU2VkIHR1cnBpcyB0aW5jaWR1bnQgaWQgYWxpcXVldCByaXN1cy4gRWdldCBtYXVyaXMgcGhhcmV0cmEgZXQgdWx0cmljZXMgbmVxdWUgb3JuYXJlIGFlbmVhbiBldWlzbW9kLiBEaWFtIHF1aXMgZW5pbSBsb2JvcnRpcyBzY2VsZXJpc3F1ZSBmZXJtZW50dW0uIFZhcml1cyBkdWlzIGF0IGNvbnNlY3RldHVyIGxvcmVtIGRvbmVjIG1hc3NhIHNhcGllbi4gRGlhbSBzaXQgYW1ldCBuaXNsIHN1c2NpcGl0IGFkaXBpc2NpbmcgYmliZW5kdW0gZXN0IHVsdHJpY2llcyBpbnRlZ2VyLiBMZWN0dXMgdXJuYSBkdWlzIGNvbnZhbGxpcyBjb252YWxsaXMgdGVsbHVzLiBOaWJoIGlwc3VtIGNvbnNlcXVhdCBuaXNsIHZlbCBwcmV0aXVtIGxlY3R1cyBxdWFtIGlkIGxlby4gRmV1Z2lhdCBpbiBhbnRlIG1ldHVzIGRpY3R1bSBhdCB0ZW1wb3IgY29tbW9kby4gVmVsaXQgZGlnbmlzc2ltIHNvZGFsZXMgdXQgZXUgc2VtIGludGVnZXIuIERpY3R1bSBzaXQgYW1ldCBqdXN0byBkb25lYy4gU2NlbGVyaXNxdWUgbWF1cmlzIHBlbGxlbnRlc3F1ZSBwdWx2aW5hciBwZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4gU2VkIHR1cnBpcyB0aW5jaWR1bnQgaWQgYWxpcXVldCByaXN1cy4gRWdldCBtYXVyaXMgcGhhcmV0cmEgZXQgdWx0cmljZXMgbmVxdWUgb3JuYXJlIGFlbmVhbiBldWlzbW9kLiBEaWFtIHF1aXMgZW5pbSBsb2JvcnRpcyBzY2VsZXJpc3F1ZSBmZXJtZW50dW0uIFZhcml1cyBkdWlzIGF0IGNvbnNlY3RldHVyIGxvcmVtIGRvbmVjIG1hc3NhIHNhcGllbi4gRGlhbSBzaXQgYW1ldCBuaXNsIHN1c2NpcGl0IGFkaXBpc2NpbmcgYmliZW5kdW0gZXN0IHVsdHJpY2llcyBpbnRlZ2VyLiBMZWN0dXMgdXJuYSBkdWlzIGNvbnZhbGxpcyBjb252YWxsaXMgdGVsbHVzLiBOaWJoIGlwc3VtIGNvbnNlcXVhdCBuaXNsIHZlbCBwcmV0aXVtIGxlY3R1cyBxdWFtIGlkIGxlby4gRmV1Z2lhdCBpbiBhbnRlIG1ldHVzIGRpY3R1bSBhdCB0ZW1wb3IgY29tbW9kby4gVmVsaXQgZGlnbmlzc2ltIHNvZGFsZXMgdXQgZXUgc2VtIGludGVnZXIuIERpY3R1bSBzaXQgYW1ldCBqdXN0byBkb25lYy4gU2NlbGVyaXNxdWUgbWF1cmlzIHBlbGxlbnRlc3F1ZSBwdWx2aW5hciBwZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzLiBTY2VsZXJpc3F1ZSBtYXVyaXMgcGVsbGVudGVzcXVlIHB1bHZpbmFyIHBlbGxlbnRlc3F1ZSBoYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUgc2VuZWN0dXMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy4gU2NlbGVyaXNxdWUgbWF1cmlzIHBlbGxlbnRlc3F1ZSBwdWx2aW5hciBwZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzLiBTY2VsZXJpc3F1ZSBtYXVyaXMgcGVsbGVudGVzcXVlIHB1bHZpbmFyIHBlbGxlbnRlc3F1ZSBoYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUgc2VuZWN0dXMuIFNjZWxlcmlzcXVlIG1hdXJpcyBwZWxsZW50ZXNxdWUgcHVsdmluYXIgcGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy4=") for i in std.range(0,100)
-    ],
-}
-```
-</details>
-
-| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
-|:---|---:|---:|---:|---:|
-| `Rust` | 34.8 ± 0.5 | 33.4 | 36.0 | 1.00 |
-| `Rust (alternative, rsjsonnet)` | 8116.2 ± 37.2 | 8049.1 | 8176.2 | 233.52 ± 3.24 |
-| `Go` | 271.1 ± 2.3 | 267.1 | 275.7 | 7.80 ± 0.12 |
-| `Scala` | 357.2 ± 2.3 | 353.5 | 363.4 | 10.28 ± 0.15 |
-| `C++` | 9653.7 ± 22.5 | 9621.4 | 9694.3 | 277.75 ± 3.69 |
-
-### std.base64 (byte array)
-
-<details>
-<summary>Source</summary>
-
-```jsonnet
-{
-    foo: [
-        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)
-    ],
-}
-```
-</details>
-
-| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
-|:---|---:|---:|---:|---:|
-| `Rust` | 30.3 ± 0.4 | 29.1 | 31.6 | 1.00 |
-| `Rust (alternative, rsjsonnet)` | 1460.8 ± 47.6 | 1375.2 | 1568.3 | 48.26 ± 1.72 |
-| `Go` | 156.5 ± 1.9 | 152.5 | 159.4 | 5.17 ± 0.10 |
-| `Scala` | 355.9 ± 2.9 | 351.4 | 365.6 | 11.76 ± 0.20 |
-| `C++` | 13362.4 ± 88.3 | 13028.4 | 13473.8 | 441.41 ± 7.01 |
-
-### std.foldl
-
-<details>
-<summary>Source</summary>
-
-```jsonnet
-local input = std.makeArray(10000, function(i) 'xxxxx');
-
-std.foldl(function(acc, value) acc + value, input, '')
-
-```
-</details>
-
-| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
-|:---|---:|---:|---:|---:|
-| `Rust` | 5.3 ± 0.2 | 5.0 | 6.2 | 1.00 |
-| `Rust (alternative, rsjsonnet)` | 81.5 ± 1.6 | 78.9 | 83.8 | 15.38 ± 0.55 |
-| `Go` | 26.6 ± 0.5 | 25.0 | 27.5 | 5.02 ± 0.18 |
-| `Scala` | 405.4 ± 3.0 | 400.9 | 413.6 | 76.52 ± 2.34 |
-| `C++` | 265.3 ± 2.7 | 260.6 | 271.5 | 50.08 ± 1.57 |
-
-### std.manifestJsonEx
-
-<details>
-<summary>Source</summary>
-
-```jsonnet
-{
-  bar: {
-    prometheusOperator+: {
-      service+: {
-        spec+: {
-          ports: [
-            {
-              name: 'https',
-              port: 8443,
-              targetPort: 'https',
-            },
-          ],
-        },
-      },
-      serviceMonitor+: {
-        spec+: {
-          endpoints: [
-            {
-              port: 'https',
-              scheme: 'https',
-              honorLabels: true,
-              bearerTokenFile: '/var/run/secrets/kubernetes.io/serviceaccount/token',
-              tlsConfig: {
-                insecureSkipVerify: true,
-              },
-            },
-          ]
-        },
-      },
-      clusterRole+: {
-        rules+: [
-          {
-            apiGroups: ['authentication.k8s.io'],
-            resources: ['tokenreviews'],
-            verbs: ['create'],
-          },
-          {
-            apiGroups: ['authorization.k8s.io'],
-            resources: ['subjectaccessreviews'],
-            verbs: ['create'],
-          },
-        ],
-      },
-    }
-  },
-  foo: std.manifestJsonEx(self.bar, "  ")
-}
-```
-</details>
-
-| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
-|:---|---:|---:|---:|---:|
-| `Rust` | 1.7 ± 0.1 | 1.4 | 2.7 | 1.00 |
-| `Rust (alternative, rsjsonnet)` | 2.9 ± 0.1 | 2.7 | 3.3 | 1.73 ± 0.13 |
-| `Go` | 3.2 ± 0.1 | 2.7 | 3.8 | 1.92 ± 0.15 |
-| `Scala` | 294.7 ± 1.7 | 291.6 | 299.0 | 175.84 ± 12.30 |
-| `C++` | 101.4 ± 0.8 | 99.3 | 102.9 | 60.48 ± 4.24 |
-
-### std.manifestTomlEx
-
-> Note: No results for Scala, std.manifestTomlEx is not implemented: https://github.com/databricks/sjsonnet/issues/111
-
-<details>
-<summary>Source</summary>
-
-```jsonnet
-{
-  bar: {
-    prometheusOperator+: {
-      service+: {
-        spec+: {
-          ports: [
-            {
-              name: 'https',
-              port: 8443,
-              targetPort: 'https',
-            },
-          ],
-        },
-      },
-      serviceMonitor+: {
-        spec+: {
-          endpoints: [
-            {
-              port: 'https',
-              scheme: 'https',
-              honorLabels: true,
-              bearerTokenFile: '/var/run/secrets/kubernetes.io/serviceaccount/token',
-              tlsConfig: {
-                insecureSkipVerify: true,
-              },
-            },
-          ],
-        },
-      },
-      clusterRole+: {
-        rules+: [
-          {
-            apiGroups: ['authentication.k8s.io'],
-            resources: ['tokenreviews'],
-            verbs: ['create'],
-          },
-          {
-            apiGroups: ['authorization.k8s.io'],
-            resources: ['subjectaccessreviews'],
-            verbs: ['create'],
-          },
-        ],
-      },
-    },
-  },
-  nothing: std.manifestTomlEx(self.bar, '  '),
-}
-
-```
-</details>
-
-| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
-|:---|---:|---:|---:|---:|
-| `Rust` | 1.7 ± 0.1 | 1.4 | 2.7 | 1.00 |
-| `Rust (alternative, rsjsonnet)` | 7.8 ± 0.2 | 7.3 | 8.5 | 4.65 ± 0.36 |
-| `Go` | 3.2 ± 0.1 | 2.9 | 3.7 | 1.90 ± 0.16 |
-| `C++` | 1046.1 ± 4.9 | 1039.7 | 1053.9 | 622.36 ± 44.25 |
-
-### std.parseInt
-
-<details>
-<summary>Source</summary>
-
-```jsonnet
-{
-    foo: [
-        std.parseInt("-123949595") for i in std.range(0,100)
-    ],
-}
-```
-</details>
-
-| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
-|:---|---:|---:|---:|---:|
-| `Rust` | 1.7 ± 0.1 | 1.4 | 2.6 | 1.00 |
-| `Rust (alternative, rsjsonnet)` | 2.9 ± 0.1 | 2.6 | 3.4 | 1.71 ± 0.16 |
-| `Go` | 2.8 ± 0.1 | 2.4 | 3.3 | 1.64 ± 0.16 |
-| `Scala` | 292.7 ± 1.7 | 289.2 | 295.8 | 170.68 ± 14.76 |
-| `C++` | 101.0 ± 0.7 | 99.0 | 102.0 | 58.88 ± 5.10 |
-
-### std.reverse
-
-<details>
-<summary>Source</summary>
-
-```jsonnet
-{
-    foo: [
-        std.reverse(std.range(0, 5000)) for i in std.range(0,100)
-    ],
-}
-```
-</details>
-
-| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
-|:---|---:|---:|---:|---:|
-| `Rust` | 45.3 ± 0.5 | 44.0 | 46.5 | 1.00 |
-| `Rust (alternative, rsjsonnet)` | 784.1 ± 20.4 | 741.5 | 802.0 | 17.31 ± 0.49 |
-| `Go` | 327.4 ± 2.1 | 323.8 | 331.4 | 7.23 ± 0.10 |
-| `Scala` | 367.0 ± 2.4 | 361.1 | 370.2 | 8.10 ± 0.11 |
-| `C++` | 659.3 ± 5.4 | 644.6 | 666.0 | 14.55 ± 0.21 |
-
-### std.substr
-
-<details>
-<summary>Source</summary>
-
-```jsonnet
-{
-    foo: [
-        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)
-    ],
-}
-```
-</details>
-
-| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
-|:---|---:|---:|---:|---:|
-| `Rust` | 2.2 ± 0.2 | 1.9 | 3.2 | 1.00 |
-| `Rust (alternative, rsjsonnet)` | 3.2 ± 0.1 | 3.1 | 3.6 | 1.49 ± 0.11 |
-| `Go` | 6.8 ± 0.2 | 6.3 | 7.4 | 3.12 ± 0.24 |
-| `Scala` | 303.6 ± 3.6 | 300.5 | 318.2 | 139.43 ± 9.76 |
-| `C++` | 29.1 ± 0.4 | 28.3 | 30.2 | 13.36 ± 0.94 |
-
-### Comparsion for array
-
-> Note: No results for Scala, array comparsion is not implemented
-
-<details>
-<summary>Source</summary>
-
-```jsonnet
-local long_array = std.range(1, 1000000);
-long_array + [1] < long_array + [2]
-
-```
-</details>
-
-| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
-|:---|---:|---:|---:|---:|
-| `Rust` | 25.7 ± 0.2 | 25.0 | 26.0 | 1.00 |
-| `Rust (alternative, rsjsonnet)` | 228.1 ± 7.9 | 214.0 | 245.1 | 8.89 ± 0.31 |
-| `Go` | 150.4 ± 10.4 | 135.9 | 169.4 | 5.86 ± 0.41 |
-| `C++` | 125755.8 ± 989.6 | 123095.8 | 127475.4 | 4901.85 ± 49.12 |
-
-### Comparsion for primitives
-
-> Note: No results for C++, can't run: uses up to 192GB of RAM
-
-<details>
-<summary>Source</summary>
-
-```jsonnet
-([ i < j for i in std.range(1, 1000) for j in std.range(1, 1000)])
-
-```
-</details>
-
-| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
-|:---|---:|---:|---:|---:|
-| `Rust` | 385.9 ± 4.2 | 372.4 | 391.5 | 1.00 |
-| `Rust (alternative, rsjsonnet)` | 1287.4 ± 27.0 | 1244.2 | 1335.1 | 3.34 ± 0.08 |
-| `Go` | 1817.1 ± 18.6 | 1779.7 | 1842.9 | 4.71 ± 0.07 |
-| `Scala` | 453.1 ± 3.9 | 448.1 | 462.2 | 1.17 ± 0.02 |
addednix/benchmarks.adocdiffbeforeafterboth
--- /dev/null
+++ b/nix/benchmarks.adoc
@@ -0,0 +1,7 @@
+= Benchmarks
+
+There are multiple implementations of jsonnet implemented in different languages: Rust (this repo), https://github.com/google/go-jsonnet/[Go], https://github.com/databricks/sjsonnet[Scala], https://github.com/google/jsonnet[C++], https://github.com/moleike/haskell-jsonnet[Haskell].
+
+For simplicity, I will call these implementations by the language of their implementation.
+
+Unfortunately, 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 benchmarks
deletednix/benchmarks.mddiffbeforeafterboth
--- a/nix/benchmarks.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# Benchmarks
-
-There 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).
-
-For simplicity, I will call these implementations by the language of their implementation.
-
-Unfortunately, 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 benchmarks
modifiednix/benchmarks.nixdiffbeforeafterboth
79 skipGo ? "",79 skipGo ? "",
80 vendor ? "",80 vendor ? "",
81 }:81 }:
82 ''82 ''
83 echo >> $out83 echo >> $out
84 echo "### ${name}" >> $out84 echo "=== ${name}" >> $out
85 echo >> $out85 echo >> $out
86 ${optionalString (skipRustAlternative != "") ''86 ${optionalString (skipRustAlternative != "") ''
87 echo "> Note: No results for Rust (alternative), ${skipRustAlternative}" >> $out87 echo "> Note: No results for Rust (alternative), ${skipRustAlternative}" >> $out
88 echo >> $out88 echo >> $out
89 ''}89 ''}
90 ${optionalString (skipGo != "") ''90 ${optionalString (skipGo != "") ''
91 echo "> Note: No results for Go, ${skipGo}" >> $out91 echo "> Note: No results for Go, ${skipGo}" >> $out
92 echo >> $out92 echo >> $out
93 ''}93 ''}
94 ${optionalString (skipScala != "") ''94 ${optionalString (skipScala != "") ''
95 echo "> Note: No results for Scala/Scala (native)/Scala (GraalVM), ${skipScala}" >> $out95 echo "> Note: No results for Scala (native)/Scala (GraalVM), ${skipScala}" >> $out
96 echo >> $out96 echo >> $out
97 ''}97 ''}
98 ${optionalString (skipCpp != "") ''98 ${optionalString (skipCpp != "") ''
99 echo "> Note: No results for C++, ${skipCpp}" >> $out99 echo "> Note: No results for C++, ${skipCpp}" >> $out
100 echo >> $out100 echo >> $out
101 ''}101 ''}
102 ${optionalString (!quick && !omitSource) ''102 ${optionalString (!quick && !omitSource) ''
103 echo "<details>" >> $out103 echo ".Source" >> $out
104 echo "<summary>Source</summary>" >> $out104 echo "[%collapsible]" >> $out
105 echo "====" >> $out
105 echo >> $out106 echo "[source,jsonnet]" >> $out
106 echo "\`\`\`jsonnet" >> $out107 echo "----" >> $out
107 ${optionalString pathIsGenerator "echo \"// Generator source\" >> $out"}108 ${optionalString pathIsGenerator "echo \"// Generator source\" >> $out"}
108 cat ${path} >> $out109 cat ${path} >> $out
109 echo >> $out110 echo >> $out
110 echo "\`\`\`" >> $out111 echo "----" >> $out
111 echo "</details>" >> $out112 echo "====" >> $out
112 echo >> $out113 echo >> $out
113 ''}114 ''}
114 path=${path}115 path=${path}
115 ${optionalString pathIsGenerator ''116 ${optionalString pathIsGenerator ''
116 go-jsonnet $path > generated.jsonnet117 go-jsonnet $path > generated.jsonnet
117 path=generated.jsonnet118 path=generated.jsonnet
118 ''}119 ''}
119 hyperfine -N -w4 -m20 --output=pipe --style=basic --export-asciidoc result.adoc \120 hyperfine -N -w4 -m20 --output=pipe --style=basic --export-asciidoc result.adoc \
120 ${121 ${
121 concatStringsSep " " (122 concatStringsSep " " (
122 forEach jrsonnetVariants (123 forEach jrsonnetVariants (
123 variant:124 variant:
124 "\"${variant.drv}/bin/jrsonnet $path${optionalString (vendor != "") " -J${vendor}"}\" -n \"Rust${125 "\"${variant.drv}/bin/jrsonnet $path${optionalString (vendor != "") " -J${vendor}"}\" -n \"Rust${
125 if variant.name != "" then " (${variant.name})" else ""126 if variant.name != "" then " (${variant.name})" else ""
126 }\""127 }\""
127 )128 )
128 )129 )
129 } \130 } \
130 ${131 ${
131 optionalString (skipRustAlternative == "")132 optionalString (skipRustAlternative == "")
132 "\"rsjsonnet $path${133 "\"rsjsonnet $path${
133 optionalString (vendor != "") " -J ${vendor}"134 optionalString (vendor != "") " -J ${vendor}"
134 }\" -n \"Rust (alternative, rsjsonnet)\""135 }\" -n \"Rust (alternative, rsjsonnet)\""
135 } \136 } \
136 ${137 ${
137 optionalString (skipGo == "")138 optionalString (skipGo == "")
138 "\"go-jsonnet $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"Go\""139 "\"go-jsonnet $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"Go\""
139 } \
140 ${
141 optionalString (skipScala == "")
142 "\"sjsonnet $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"Scala\""140 } \
143 } \141 ${
144 ${142 optionalString (skipScala == "")
145 optionalString (skipScala == "")143 "\"sjsonnet-native $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"Scala (native)\""
146 "\"sjsonnet-native $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"Scala (native)\""144 } \
147 } \145 ${
148 ${146 optionalString (skipScala == "")
149 optionalString (skipScala == "")147 "\"sjsonnet-graalvm $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"Scala (GraalVM)\""
150 "\"sjsonnet-graalvm $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"Scala (GraalVM)\""148 } \
151 } \149 ${optionalString (skipCpp == "")
152 ${optionalString (skipCpp == "")150 "\"jsonnet $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"C++\""
153 "\"jsonnet $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"C++\""151 }
154 }152 cat result.adoc >> $out
155 cat result.adoc >> $out153 '';
156 '';
157 in154 in
158 ''155 ''
159 set -oux156 set -oux
160157 ulimit -s unlimited
158
161 temp=$(mktemp -d)159 temp=$(mktemp -d)
162 cd $temp160 cd $temp
163161
164 touch $out162 touch $out
165 ${optionalString (!quick) ''163 ${optionalString (!quick) ''
166 cat ${./benchmarks.md} >> $out164 cat ${./benchmarks.adoc} >> $out
167 echo >> $out165 echo >> $out
168166
169 echo "<details>" >> $out167 echo "CPU: $(grep 'model name' /proc/cpuinfo | head -1 | cut -d: -f2 | xargs), $(grep -c '^processor' /proc/cpuinfo) threads" >> $out
170 echo "<summary>Tested versions</summary>" >> $out
171 echo >> $out
172 echo Go: $(go-jsonnet --version) >> $out168 echo >> $out
173 echo >> $out169
174 echo "\`\`\`" >> $out170 echo ".Tested versions" >> $out
175 go-jsonnet --help >> $out171 echo "[%collapsible]" >> $out
176 echo "\`\`\`" >> $out172 echo "====" >> $out
177 echo >> $out173 echo "* Go: $(go-jsonnet --version)" >> $out
178 echo C++: $(jsonnet --version) >> $out174 echo "* C++: $(jsonnet --version)" >> $out
179 echo >> $out
180 echo "\`\`\`" >> $out
181 jsonnet --help >> $out175 echo "* Scala (native/GraalVM): $(sjsonnet-native 2>&1 | grep -oP 'Sjsonnet \S+')" >> $out
182 echo "\`\`\`" >> $out
183 echo >> $out
184 echo Scala: >> $out
185 echo >> $out
186 echo "\`\`\`" >> $out
187 sjsonnet 2>> $out || true
188 echo "\`\`\`" >> $out176 echo "* Rust (alternative): rsjsonnet ${rsjsonnet.version} (${rsjsonnet.src.rev})" >> $out
189 echo >> $out
190 echo "Scala (native):" >> $out
191 echo >> $out
192 echo "\`\`\`" >> $out177 ${concatStringsSep "\n" (forEach jrsonnetVariants (variant:
193 sjsonnet-native 2>> $out || true
194 echo "\`\`\`" >> $out
195 echo >> $out
196 echo "Scala (GraalVM):" >> $out178 "echo \"* Rust${if variant.name != "" then " (${variant.name})" else ""}: $(${variant.drv}/bin/jrsonnet --version 2>&1)\" >> $out"
197 echo >> $out
198 echo "\`\`\`" >> $out
199 sjsonnet-graalvm 2>> $out || true
200 echo "\`\`\`" >> $out
201 echo >> $out
202 echo "Rust (alternative):" >> $out
203 echo >> $out
204 echo "\`\`\`" >> $out
205 rsjsonnet --help 2>> $out || true
206 echo "\`\`\`" >> $out179 ))}
207 echo >> $out180 echo "====" >> $out
208 echo "</details>" >> $out181 echo >> $out
209 echo >> $out182 ''}
210
211 echo >> $out
212 ''}183 echo "== Real world" >> $out
213 echo "## Real world" >> $out184 ${mkBench {
214 ${mkBench {185 name = "Graalvm CI";
215 name = "Graalvm CI";186 path = "${graalvmBench}/ci.jsonnet";
216 path = "${graalvmBench}/ci.jsonnet";187 omitSource = true;
217 omitSource = true;188 skipCpp = "takes longer than a hour";
218 skipCpp = "takes longer than a hour";189 skipGo = skipSlow;
219 skipGo = skipSlow;190 skipScala = skipSlow;
220 skipScala = skipSlow;191 }}
221 }}192 ${mkBench {
222 ${mkBench {193 name = "Kube-prometheus manifests";
223 name = "Kube-prometheus manifests";194 vendor = "${kubePrometheusBench}/vendor";
224 vendor = "${kubePrometheusBench}/vendor";195 path = "${kubePrometheusBench}/example.jsonnet";
225 path = "${kubePrometheusBench}/example.jsonnet";196 omitSource = true;
226 omitSource = true;197 skipCpp = "too slow, takes hours, skews results";
227 skipCpp = "too slow, takes hours, skews results";198 skipGo = skipSlow;
228 skipGo = skipSlow;199 skipScala = skipSlow;
229 skipScala = skipSlow;200 }}
230 }}201
231202 echo >> $out
232 echo >> $out203 echo "== Benchmarks from C++ jsonnet (/perf_tests)" >> $out
233 echo "## Benchmarks from C++ jsonnet (/perf_tests)" >> $out204 ${mkBench {
234 ${mkBench {205 name = "Large string join";
235 name = "Large string join";206 path = "${jsonnetBench}/perf_tests/large_string_join.jsonnet";
236 path = "${jsonnetBench}/perf_tests/large_string_join.jsonnet";207 skipScala = skipSlow;
237 skipScala = skipSlow;208 }}
238 }}209 ${mkBench {
239 ${mkBench {210 name = "Large string template";
240 name = "Large string template";211 omitSource = true;
241 omitSource = true;212 path = "${jsonnetBench}/perf_tests/large_string_template.jsonnet";
242 path = "${jsonnetBench}/perf_tests/large_string_template.jsonnet";213 skipGo = "fails with os stack size exhausion";
243 skipGo = "fails with os stack size exhausion";214 skipCpp = "too slow, takes hours, skews results";
244 skipCpp = "too slow, takes hours, skews results";215 skipScala = skipSlow;
245 skipScala = skipSlow;216 }}
246 }}217 ${mkBench {
247 ${mkBench {218 name = "Realistic 1";
248 name = "Realistic 1";219 path = "${jsonnetBench}/perf_tests/realistic1.jsonnet";
249 path = "${jsonnetBench}/perf_tests/realistic1.jsonnet";220 skipGo = skipSlow;
250 skipGo = skipSlow;221 skipCpp = "too slow, takes hours, skews results";
251 skipCpp = "too slow, takes hours, skews results";222 skipScala = skipSlow;
252 skipScala = skipSlow;223 }}
253 }}224 ${mkBench {
254 ${mkBench {225 name = "Realistic 2";
255 name = "Realistic 2";226 path = "${jsonnetBench}/perf_tests/realistic2.jsonnet";
256 path = "${jsonnetBench}/perf_tests/realistic2.jsonnet";227 skipGo = skipSlow;
257 skipGo = skipSlow;228 skipCpp = "too slow, takes hours, skews results";
258 skipCpp = "too slow, takes hours, skews results";229 skipScala = skipSlow;
259 skipScala = skipSlow;230 }}
260 }}231
261232 echo >> $out
262 echo >> $out233 echo "== Benchmarks from C++ jsonnet (/benchmarks)" >> $out
263 echo "## Benchmarks from C++ jsonnet (/benchmarks)" >> $out234 ${mkBench {
264 ${mkBench {235 name = "Tail call";
265 name = "Tail call";236 path = "${jsonnetBench}/benchmarks/bench.01.jsonnet";
266 path = "${jsonnetBench}/benchmarks/bench.01.jsonnet";237 skipScala = skipSlow;
267 skipScala = skipSlow;238 }}
268 }}239 ${mkBench {
269 ${mkBench {240 name = "Inheritance recursion";
270 name = "Inheritance recursion";241 path = "${jsonnetBench}/benchmarks/bench.02.jsonnet";
271 path = "${jsonnetBench}/benchmarks/bench.02.jsonnet";242 skipCpp = skipSlow;
272 skipCpp = skipSlow;243 skipGo = skipSlow;
273 skipGo = skipSlow;244 }}
274 }}245 ${mkBench {
275 ${mkBench {246 name = "Simple recursive call";
276 name = "Simple recursive call";247 path = "${jsonnetBench}/benchmarks/bench.03.jsonnet";
277 path = "${jsonnetBench}/benchmarks/bench.03.jsonnet";248 skipScala = skipSlow;
278 skipScala = skipSlow;249 skipGo = skipSlow;
279 skipGo = skipSlow;250 }}
280 }}251 ${mkBench {
281 ${mkBench {252 name = "Foldl string concat";
282 name = "Foldl string concat";253 path = "${jsonnetBench}/benchmarks/bench.04.jsonnet";
283 path = "${jsonnetBench}/benchmarks/bench.04.jsonnet";254 skipCpp = skipSlow;
284 skipCpp = skipSlow;255 skipScala = skipSlow;
285 skipScala = skipSlow;256 }}
286 }}257 ${mkBench {
287 ${mkBench {258 name = "Array sorts";
288 name = "Array sorts";259 path = "${jsonnetBench}/benchmarks/bench.06.jsonnet";
289 path = "${jsonnetBench}/benchmarks/bench.06.jsonnet";260 skipCpp = skipSlow;
290 skipCpp = skipSlow;261 }}
291 }}262 ${mkBench {
292 ${mkBench {263 name = "Lazy array";
293 name = "Lazy array";264 path = "${jsonnetBench}/benchmarks/bench.07.jsonnet";
294 path = "${jsonnetBench}/benchmarks/bench.07.jsonnet";265 skipGo = skipSlow;
295 skipGo = skipSlow;266 }}
296 skipScala = skipSlow;
297 }}267 ${mkBench {
298 ${mkBench {268 name = "Inheritance function recursion";
299 name = "Inheritance function recursion";269 path = "${jsonnetBench}/benchmarks/bench.08.jsonnet";
300 path = "${jsonnetBench}/benchmarks/bench.08.jsonnet";270 skipCpp = skipSlow;
301 skipCpp = skipSlow;271 skipScala = skipSlow;
302 skipScala = skipSlow;272 }}
303 }}273 ${mkBench {
304 ${mkBench {274 name = "String strips";
305 name = "String strips";275 path = "${jsonnetBench}/benchmarks/bench.09.jsonnet";
306 path = "${jsonnetBench}/benchmarks/bench.09.jsonnet";276 skipCpp = "too slow, takes hours, skews results";
307 skipCpp = "too slow, takes hours, skews results";277 skipScala = skipSlow;
308 skipScala = skipSlow;278 }}
309 }}279 ${mkBench {
310 ${mkBench {280 name = "Big object";
311 name = "Big object";281 path = "${jsonnetBench}/benchmarks/gen_big_object.jsonnet";
312 path = "${jsonnetBench}/benchmarks/gen_big_object.jsonnet";282 pathIsGenerator = true;
313 pathIsGenerator = true;283 skipScala = skipSlow;
314 skipScala = skipSlow;284 }}
315 }}285
316286 echo >> $out
317 echo >> $out287 echo "== Benchmarks from Go jsonnet (builtins)" >> $out
318 echo "## Benchmarks from Go jsonnet (builtins)" >> $out288 ${mkBench {
319 ${mkBench {289 name = "std.base64";
320 name = "std.base64";290 path = "${goJsonnetBench}/base64.jsonnet";
321 path = "${goJsonnetBench}/base64.jsonnet";291 skipRustAlternative = skipSlow;
322 skipRustAlternative = skipSlow;292 skipCpp = "too slow, takes hours, skews results";
323 skipCpp = "too slow, takes hours, skews results";293 skipScala = skipSlow;
324 skipScala = skipSlow;294 }}
325 }}295 ${mkBench {
326 ${mkBench {296 name = "std.base64Decode";
327 name = "std.base64Decode";297 path = "${goJsonnetBench}/base64Decode.jsonnet";
328 path = "${goJsonnetBench}/base64Decode.jsonnet";298 skipRustAlternative = skipSlow;
329 skipRustAlternative = skipSlow;299 skipCpp = skipSlow;
330 skipCpp = skipSlow;300 skipScala = skipSlow;
331 skipScala = skipSlow;301 }}
332 }}302 ${mkBench {
333 ${mkBench {303 name = "std.base64DecodeBytes";
334 name = "std.base64DecodeBytes";304 path = "${goJsonnetBench}/base64DecodeBytes.jsonnet";
335 path = "${goJsonnetBench}/base64DecodeBytes.jsonnet";305 skipRustAlternative = skipSlow;
336 skipRustAlternative = skipSlow;306 skipCpp = skipSlow;
337 skipCpp = skipSlow;307 skipGo = skipSlow;
338 skipGo = skipSlow;308 skipScala = skipSlow;
339 skipScala = skipSlow;309 }}
340 }}310 ${mkBench {
341 ${mkBench {311 name = "std.base64 (byte array)";
342 name = "std.base64 (byte array)";312 path = "${goJsonnetBench}/base64_byte_array.jsonnet";
343 path = "${goJsonnetBench}/base64_byte_array.jsonnet";313 skipRustAlternative = skipSlow;
344 skipRustAlternative = skipSlow;314 skipCpp = skipSlow;
345 skipCpp = skipSlow;315 skipGo = skipSlow;
346 skipGo = skipSlow;316 skipScala = skipSlow;
347 skipScala = skipSlow;317 }}
348 }}318 ${mkBench {
349 ${mkBench {319 name = "std.foldl";
350 name = "std.foldl";320 path = "${goJsonnetBench}/foldl.jsonnet";
351 path = "${goJsonnetBench}/foldl.jsonnet";321 skipScala = skipSlow;
352 skipScala = skipSlow;322 }}
353 }}323 ${mkBench {
354 ${mkBench {324 name = "std.manifestJsonEx";
355 name = "std.manifestJsonEx";325 path = "${goJsonnetBench}/manifestJsonEx.jsonnet";
356 path = "${goJsonnetBench}/manifestJsonEx.jsonnet";326 skipScala = skipSlow;
357 skipScala = skipSlow;327 skipCpp = skipSlow;
358 skipCpp = skipSlow;328 }}
359 }}329 ${mkBench {
360 ${mkBench {330 name = "std.manifestTomlEx";
361 name = "std.manifestTomlEx";331 path = "${goJsonnetBench}/manifestTomlEx.jsonnet";
362 path = "${goJsonnetBench}/manifestTomlEx.jsonnet";332 skipCpp = skipSlow;
363 skipCpp = skipSlow;333 }}
364 }}334 ${mkBench {
365 ${mkBench {335 name = "std.parseInt";
366 name = "std.parseInt";336 path = "${goJsonnetBench}/parseInt.jsonnet";
367 path = "${goJsonnetBench}/parseInt.jsonnet";337 skipScala = skipSlow;
368 skipScala = skipSlow;338 skipCpp = skipSlow;
369 skipCpp = skipSlow;339 }}
370 }}340 ${mkBench {
371 ${mkBench {341 name = "std.reverse";
372 name = "std.reverse";342 path = "${goJsonnetBench}/reverse.jsonnet";
373 path = "${goJsonnetBench}/reverse.jsonnet";343 skipCpp = skipSlow;
374 skipCpp = skipSlow;344 skipGo = skipSlow;
375 skipGo = skipSlow;345 }}
376 }}346 ${mkBench {
377 ${mkBench {347 name = "std.substr";
378 name = "std.substr";348 path = "${goJsonnetBench}/substr.jsonnet";
379 path = "${goJsonnetBench}/substr.jsonnet";349 skipScala = skipSlow;
380 skipScala = skipSlow;350 }}
381 }}351 ${mkBench {
382 ${mkBench {352 name = "Comparsion for array";
383 name = "Comparsion for array";353 path = "${goJsonnetBench}/comparison.jsonnet";
384 path = "${goJsonnetBench}/comparison.jsonnet";354 skipCpp = "too slow, takes hours, skews results";
385 skipCpp = "too slow, takes hours, skews results";355 }}
386 }}356 ${mkBench {
387 ${mkBench {357 name = "Comparsion for primitives";
388 name = "Comparsion for primitives";358 path = "${goJsonnetBench}/comparison2.jsonnet";
389 path = "${goJsonnetBench}/comparison2.jsonnet";359 skipRustAlternative = skipSlow;
390 skipRustAlternative = skipSlow;360 skipCpp = "can't run: uses up to 192GB of RAM";
391 skipCpp = "can't run: uses up to 192GB of RAM";361 skipGo = skipSlow;
392 skipGo = skipSlow;362 skipScala = skipSlow;
393 skipScala = skipSlow;363 }}
394 }}364 '';
395 '';
396}365}
397366
modifiednix/jrsonnet-release.nixdiffbeforeafterboth
--- a/nix/jrsonnet-release.nix
+++ b/nix/jrsonnet-release.nix
@@ -24,6 +24,6 @@
   buildInputs = [makeWrapper];
 
   postInstall = ''
-    wrapProgram $out/bin/jrsonnet --add-flags "--max-stack=200000 --os-stack=200000"
+    wrapProgram $out/bin/jrsonnet --add-flags "--max-stack=200000"
   '';
 }
modifiednix/jrsonnet.nixdiffbeforeafterboth
--- a/nix/jrsonnet.nix
+++ b/nix/jrsonnet.nix
@@ -22,6 +22,6 @@
 
     # To clean-up hyperfine output
     postInstall = optionalString forBenchmarks ''
-      wrapProgram $out/bin/jrsonnet --add-flags "--max-stack=200000 --os-stack=200000"
+      wrapProgram $out/bin/jrsonnet --add-flags "--max-stack=200000"
     '';
   }
modifiednix/sjsonnet.nixdiffbeforeafterboth
--- a/nix/sjsonnet.nix
+++ b/nix/sjsonnet.nix
@@ -60,7 +60,7 @@
   installPhase = ''
     mkdir -p $out/bin $out/lib
     cp $src $out/lib/sjsonnet.jar
-    makeWrapper ${java}/bin/java $out/bin/sjsonnet --add-flags "-Xss100m -XX:+UseStringDeduplication -jar $out/lib/sjsonnet.jar"
+    makeWrapper ${java}/bin/java $out/bin/sjsonnet --add-flags "-Xss100m -XX:+UseStringDeduplication -jar $out/lib/sjsonnet.jar --max-stack 200000"
 
     cp ${nativeSrc} $out/bin/sjsonnet-native
     chmod +x $out/bin/sjsonnet-native