git.delta.rocks / jrsonnet / refs/commits / 31c77c8e98ed

difftreelog

ci update jsonnet impls

yppuxtsxYaroslav Bolyukin2026-03-23parent: #6bd9146.patch.diff
in: master

6 files changed

modifiedcrates/jrsonnet-ir-parser/src/lib.rsdiffbeforeafterboth
--- a/crates/jrsonnet-ir-parser/src/lib.rs
+++ b/crates/jrsonnet-ir-parser/src/lib.rs
@@ -304,10 +304,10 @@
 		None
 	};
 	let step = if p.try_eat(T![:]) {
-		if !p.at(T![']']) {
+		if p.at(T![']']) {
+			None
+		} else {
 			Some(spanned(p, expr)?)
-		} else {
-			None
 		}
 	} else {
 		None
modifiednix/benchmarks.nixdiffbeforeafterboth
15}:15}:
16with lib; let16with lib;
17let
17 jsonnetBench = fetchFromGitHub {18 inherit (cpp-jsonnet) jsonnetBench;
18 rev = "v0.19.1";
19 owner = "google";
20 repo = "jsonnet";
21 hash = "sha256-q1MNdbyrx4vvN5woe0o90pPqaNtsZjI5RQ7KJt7rOpU=";
22 };
23 goJsonnetBench =
24 (fetchFromGitHub {19 inherit (go-jsonnet) goJsonnetBench;
25 owner = "google";
26 repo = "go-jsonnet";
27 rev = "v0.19.1";
28 hash = "sha256-FgQYnas0qkIedRAA8ApZXLzEylg6PS6+8zzl7j+yOeI=";
29 })
30 + "/builtin-benchmarks";
31 graalvmBench = fetchFromGitHub {20 graalvmBench = fetchFromGitHub {
32 owner = "oracle";21 owner = "oracle";
33 repo = "graal";22 repo = "graal";
48 outputHashMode = "recursive";38 outputHashMode = "recursive";
49 buildInputs = [cacert];39 buildInputs = [ cacert ];
50 }40 }
51 ''41 ''
52 mkdir -p $out42 mkdir -p $out
53 cp -r ${src}/* $out/43 cp -r ${src}/* $out/
54 cd $out44 cd $out
55 chmod u+w jsonnetfile.lock.json45 chmod u+w jsonnetfile.lock.json
56 mkdir vendor46 mkdir vendor
57 ${jsonnet-bundler}/bin/jb install47 ${jsonnet-bundler}/bin/jb install
58 '';48 '';
5949
60 # Removes outsiders from the output50 # Removes outsiders from the output
61 # Useful when comparing performance of different jrsonnet releases51 # Useful when comparing performance of different jrsonnet releases
89 skipCpp ? "",78 skipCpp ? "",
90 skipGo ? "",79 skipGo ? "",
91 vendor ? "",80 vendor ? "",
92 }: ''81 }:
82 ''
93 echo >> $out83 echo >> $out
94 echo "### ${name}" >> $out84 echo "### ${name}" >> $out
95 echo >> $out85 echo >> $out
96 ${optionalString (skipRustAlternative != "") ''86 ${optionalString (skipRustAlternative != "") ''
97 echo "> Note: No results for Rust (alternative), ${skipRustAlternative}" >> $out87 echo "> Note: No results for Rust (alternative), ${skipRustAlternative}" >> $out
98 echo >> $out88 echo >> $out
99 ''}89 ''}
100 ${optionalString (skipGo != "") ''90 ${optionalString (skipGo != "") ''
101 echo "> Note: No results for Go, ${skipGo}" >> $out91 echo "> Note: No results for Go, ${skipGo}" >> $out
102 echo >> $out92 echo >> $out
103 ''}93 ''}
104 ${optionalString (skipScala != "") ''94 ${optionalString (skipScala != "") ''
105 echo "> Note: No results for Scala, ${skipScala}" >> $out95 echo "> Note: No results for Scala/Scala (native)/Scala (GraalVM), ${skipScala}" >> $out
106 echo >> $out96 echo >> $out
107 ''}97 ''}
108 ${optionalString (skipCpp != "") ''98 ${optionalString (skipCpp != "") ''
109 echo "> Note: No results for C++, ${skipCpp}" >> $out99 echo "> Note: No results for C++, ${skipCpp}" >> $out
110 echo >> $out100 echo >> $out
111 ''}101 ''}
112 ${optionalString (!quick && !omitSource) ''102 ${optionalString (!quick && !omitSource) ''
113 echo "<details>" >> $out103 echo "<details>" >> $out
114 echo "<summary>Source</summary>" >> $out104 echo "<summary>Source</summary>" >> $out
115 echo >> $out105 echo >> $out
116 echo "\`\`\`jsonnet" >> $out106 echo "\`\`\`jsonnet" >> $out
117 ${optionalString pathIsGenerator "echo \"// Generator source\" >> $out"}107 ${optionalString pathIsGenerator "echo \"// Generator source\" >> $out"}
118 cat ${path} >> $out108 cat ${path} >> $out
119 echo >> $out109 echo >> $out
120 echo "\`\`\`" >> $out110 echo "\`\`\`" >> $out
121 echo "</details>" >> $out111 echo "</details>" >> $out
122 echo >> $out112 echo >> $out
123 ''}113 ''}
124 path=${path}114 path=${path}
125 ${optionalString pathIsGenerator ''115 ${optionalString pathIsGenerator ''
126 go-jsonnet $path > generated.jsonnet116 go-jsonnet $path > generated.jsonnet
127 path=generated.jsonnet117 path=generated.jsonnet
128 ''}118 ''}
129 hyperfine -N -w4 -m20 --output=pipe --style=basic --export-asciidoc result.adoc \119 hyperfine -N -w4 -m20 --output=pipe --style=basic --export-asciidoc result.adoc \
130 ${concatStringsSep " " (forEach jrsonnetVariants (120 ${
121 concatStringsSep " " (
122 forEach jrsonnetVariants (
131 variant: "\"${variant.drv}/bin/jrsonnet $path${optionalString (vendor != "") " -J${vendor}"}\" -n \"Rust${123 variant:
124 "\"${variant.drv}/bin/jrsonnet $path${optionalString (vendor != "") " -J${vendor}"}\" -n \"Rust${
132 if variant.name != ""125 if variant.name != "" then " (${variant.name})" else ""
133 then " (${variant.name})"126 }\""
134 else ""127 )
135 }\""128 )
136 ))} \129 } \
137 ${optionalString (skipRustAlternative == "") "\"rsjsonnet $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"Rust (alternative, rsjsonnet)\""} \130 ${
131 optionalString (skipRustAlternative == "")
132 "\"rsjsonnet $path${
133 optionalString (vendor != "") " -J ${vendor}"
134 }\" -n \"Rust (alternative, rsjsonnet)\""
135 } \
138 ${optionalString (skipGo == "") "\"go-jsonnet $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"Go\""} \136 ${
137 optionalString (skipGo == "")
138 "\"go-jsonnet $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"Go\""
139 } \
139 ${optionalString (skipScala == "") "\"sjsonnet $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"Scala\""} \140 ${
141 optionalString (skipScala == "")
142 "\"sjsonnet $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"Scala\""
143 } \
140 ${optionalString (skipCpp == "") "\"jsonnet $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"C++\""}144 ${
145 optionalString (skipScala == "")
146 "\"sjsonnet-native $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"Scala (native)\""
147 } \
148 ${
149 optionalString (skipScala == "")
150 "\"sjsonnet-graalvm $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"Scala (GraalVM)\""
151 } \
152 ${optionalString (skipCpp == "")
153 "\"jsonnet $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"C++\""
154 }
141 cat result.adoc >> $out155 cat result.adoc >> $out
142 '';156 '';
143 in ''157 in
158 ''
144 set -oux159 set -oux
145160
146 temp=$(mktemp -d)161 temp=$(mktemp -d)
147 cd $temp162 cd $temp
148163
149 touch $out164 touch $out
150 ${optionalString (!quick) ''165 ${optionalString (!quick) ''
151 cat ${./benchmarks.md} >> $out166 cat ${./benchmarks.md} >> $out
152 echo >> $out167 echo >> $out
153168
154 echo "<details>" >> $out169 echo "<details>" >> $out
155 echo "<summary>Tested versions</summary>" >> $out170 echo "<summary>Tested versions</summary>" >> $out
156 echo >> $out171 echo >> $out
157 echo Go: $(go-jsonnet --version) >> $out172 echo Go: $(go-jsonnet --version) >> $out
158 echo >> $out173 echo >> $out
159 echo "\`\`\`" >> $out174 echo "\`\`\`" >> $out
160 go-jsonnet --help >> $out175 go-jsonnet --help >> $out
161 echo "\`\`\`" >> $out176 echo "\`\`\`" >> $out
162 echo >> $out177 echo >> $out
163 echo C++: $(jsonnet --version) >> $out178 echo C++: $(jsonnet --version) >> $out
164 echo >> $out179 echo >> $out
165 echo "\`\`\`" >> $out180 echo "\`\`\`" >> $out
166 jsonnet --help >> $out181 jsonnet --help >> $out
167 echo "\`\`\`" >> $out182 echo "\`\`\`" >> $out
168 echo >> $out183 echo >> $out
169 echo Scala: >> $out184 echo Scala: >> $out
170 echo >> $out185 echo >> $out
171 echo "\`\`\`" >> $out186 echo "\`\`\`" >> $out
172 sjsonnet 2>> $out || true187 sjsonnet 2>> $out || true
173 echo "\`\`\`" >> $out188 echo "\`\`\`" >> $out
174 echo >> $out189 echo >> $out
175 echo "Rust (alternative):" >> $out190 echo "Scala (native):" >> $out
191 echo >> $out
192 echo "\`\`\`" >> $out
193 sjsonnet-native 2>> $out || true
194 echo "\`\`\`" >> $out
195 echo >> $out
196 echo "Scala (GraalVM):" >> $out
197 echo >> $out
198 echo "\`\`\`" >> $out
199 sjsonnet-graalvm 2>> $out || true
200 echo "\`\`\`" >> $out
201 echo >> $out
202 echo "Rust (alternative):" >> $out
176 echo >> $out203 echo >> $out
177 echo "\`\`\`" >> $out204 echo "\`\`\`" >> $out
178 rsjsonnet --help 2>> $out || true205 rsjsonnet --help 2>> $out || true
179 echo "\`\`\`" >> $out206 echo "\`\`\`" >> $out
180 echo >> $out207 echo >> $out
181 echo "</details>" >> $out208 echo "</details>" >> $out
182 echo >> $out209 echo >> $out
183210
184 echo >> $out211 echo >> $out
185 ''}212 ''}
186 echo "## Real world" >> $out213 echo "## Real world" >> $out
187 ${mkBench {214 ${mkBench {
188 name = "Graalvm CI";215 name = "Graalvm CI";
189 path = "${graalvmBench}/ci.jsonnet";216 path = "${graalvmBench}/ci.jsonnet";
190 skipCpp = "takes longer than a hour";217 omitSource = true;
218 skipCpp = "takes longer than a hour";
191 skipGo = skipSlow;219 skipGo = skipSlow;
192 skipScala = skipSlow;220 skipScala = skipSlow;
193 }}221 }}
194 ${mkBench {222 ${mkBench {
195 name = "Kube-prometheus manifests";223 name = "Kube-prometheus manifests";
196 vendor = "${kubePrometheusBench}/vendor";224 vendor = "${kubePrometheusBench}/vendor";
197 path = "${kubePrometheusBench}/example.jsonnet";225 path = "${kubePrometheusBench}/example.jsonnet";
198 skipCpp = skipSlow;226 omitSource = true;
227 skipCpp = "too slow, takes hours, skews results";
199 skipGo = skipSlow;228 skipGo = skipSlow;
200 skipScala = skipSlow;229 skipScala = skipSlow;
201 }}230 }}
202231
203 echo >> $out232 echo >> $out
204 echo "## Benchmarks from C++ jsonnet (/perf_tests)" >> $out233 echo "## Benchmarks from C++ jsonnet (/perf_tests)" >> $out
205 ${mkBench {234 ${mkBench {
206 name = "Large string join";235 name = "Large string join";
207 path = "${jsonnetBench}/perf_tests/large_string_join.jsonnet";236 path = "${jsonnetBench}/perf_tests/large_string_join.jsonnet";
208 skipScala = skipSlow;237 skipScala = skipSlow;
209 }}238 }}
210 ${mkBench {239 ${mkBench {
211 name = "Large string template";240 name = "Large string template";
212 omitSource = true;241 omitSource = true;
213 path = "${jsonnetBench}/perf_tests/large_string_template.jsonnet";242 path = "${jsonnetBench}/perf_tests/large_string_template.jsonnet";
214 skipGo = "fails with os stack size exhausion";243 skipGo = "fails with os stack size exhausion";
215 skipCpp = skipSlow;244 skipCpp = "too slow, takes hours, skews results";
216 skipScala = skipSlow;245 skipScala = skipSlow;
217 }}246 }}
218 ${mkBench {247 ${mkBench {
219 name = "Realistic 1";248 name = "Realistic 1";
220 path = "${jsonnetBench}/perf_tests/realistic1.jsonnet";249 path = "${jsonnetBench}/perf_tests/realistic1.jsonnet";
221 skipGo = skipSlow;250 skipGo = skipSlow;
222 skipCpp = skipSlow;251 skipCpp = "too slow, takes hours, skews results";
223 skipScala = skipSlow;252 skipScala = skipSlow;
224 }}253 }}
225 ${mkBench {254 ${mkBench {
226 name = "Realistic 2";255 name = "Realistic 2";
227 path = "${jsonnetBench}/perf_tests/realistic2.jsonnet";256 path = "${jsonnetBench}/perf_tests/realistic2.jsonnet";
228 skipGo = skipSlow;257 skipGo = skipSlow;
229 skipCpp = skipSlow;258 skipCpp = "too slow, takes hours, skews results";
230 skipScala = skipSlow;259 skipScala = skipSlow;
231 }}260 }}
232261
233 echo >> $out262 echo >> $out
234 echo "## Benchmarks from C++ jsonnet (/benchmarks)" >> $out263 echo "## Benchmarks from C++ jsonnet (/benchmarks)" >> $out
235 ${mkBench {264 ${mkBench {
236 name = "Tail call";265 name = "Tail call";
237 path = "${jsonnetBench}/benchmarks/bench.01.jsonnet";266 path = "${jsonnetBench}/benchmarks/bench.01.jsonnet";
238 skipScala = skipSlow;267 skipScala = skipSlow;
239 }}268 }}
240 ${mkBench {269 ${mkBench {
241 name = "Inheritance recursion";270 name = "Inheritance recursion";
242 path = "${jsonnetBench}/benchmarks/bench.02.jsonnet";271 path = "${jsonnetBench}/benchmarks/bench.02.jsonnet";
243 skipCpp = skipSlow;272 skipCpp = skipSlow;
244 skipGo = skipSlow;273 skipGo = skipSlow;
245 }}274 }}
246 ${mkBench {275 ${mkBench {
247 name = "Simple recursive call";276 name = "Simple recursive call";
248 path = "${jsonnetBench}/benchmarks/bench.03.jsonnet";277 path = "${jsonnetBench}/benchmarks/bench.03.jsonnet";
249 skipScala = skipSlow;278 skipScala = skipSlow;
250 skipGo = skipSlow;279 skipGo = skipSlow;
251 }}280 }}
252 ${mkBench {281 ${mkBench {
253 name = "Foldl string concat";282 name = "Foldl string concat";
254 path = "${jsonnetBench}/benchmarks/bench.04.jsonnet";283 path = "${jsonnetBench}/benchmarks/bench.04.jsonnet";
255 skipCpp = skipSlow;284 skipCpp = skipSlow;
256 skipScala = skipSlow;285 skipScala = skipSlow;
257 }}286 }}
258 ${mkBench {287 ${mkBench {
259 name = "Array sorts";288 name = "Array sorts";
260 path = "${jsonnetBench}/benchmarks/bench.06.jsonnet";289 path = "${jsonnetBench}/benchmarks/bench.06.jsonnet";
261 skipCpp = skipSlow;290 skipCpp = skipSlow;
262 # std.assertEqual(reverse(std.range(1, 1000)), sort(std.range(1, 1000), keyF=function(x) -x))291 }}
263 skipScala = "sjsonnet doesn't support keyF in std.sort: https://github.com/databricks/sjsonnet/issues/204";
264 }}292 ${mkBench {
265 ${mkBench {293 name = "Lazy array";
266 name = "Lazy array";294 path = "${jsonnetBench}/benchmarks/bench.07.jsonnet";
267 path = "${jsonnetBench}/benchmarks/bench.07.jsonnet";295 skipGo = skipSlow;
268 skipGo = skipSlow;296 skipScala = skipSlow;
269 skipScala = skipSlow;297 }}
270 }}298 ${mkBench {
271 ${mkBench {299 name = "Inheritance function recursion";
272 name = "Inheritance function recursion";300 path = "${jsonnetBench}/benchmarks/bench.08.jsonnet";
273 path = "${jsonnetBench}/benchmarks/bench.08.jsonnet";301 skipCpp = skipSlow;
274 skipCpp = skipSlow;302 skipScala = skipSlow;
275 skipScala = skipSlow;303 }}
276 }}304 ${mkBench {
277 ${mkBench {305 name = "String strips";
278 name = "String strips";306 path = "${jsonnetBench}/benchmarks/bench.09.jsonnet";
279 path = "${jsonnetBench}/benchmarks/bench.09.jsonnet";307 skipCpp = "too slow, takes hours, skews results";
280 skipCpp = skipSlow;308 skipScala = skipSlow;
281 skipScala = skipSlow;309 }}
282 }}310 ${mkBench {
283 ${mkBench {311 name = "Big object";
284 name = "Big object";312 path = "${jsonnetBench}/benchmarks/gen_big_object.jsonnet";
285 path = "${jsonnetBench}/benchmarks/gen_big_object.jsonnet";313 pathIsGenerator = true;
286 pathIsGenerator = true;314 skipScala = skipSlow;
287 skipScala = skipSlow;315 }}
288 }}316
289317 echo >> $out
290 echo >> $out318 echo "## Benchmarks from Go jsonnet (builtins)" >> $out
291 echo "## Benchmarks from Go jsonnet (builtins)" >> $out319 ${mkBench {
292 ${mkBench {320 name = "std.base64";
293 name = "std.base64";321 path = "${goJsonnetBench}/base64.jsonnet";
294 path = "${goJsonnetBench}/base64.jsonnet";322 skipRustAlternative = skipSlow;
295 skipRustAlternative = skipSlow;323 skipCpp = "too slow, takes hours, skews results";
296 skipCpp = skipSlow;324 skipScala = skipSlow;
297 skipScala = skipSlow;325 }}
298 }}326 ${mkBench {
299 ${mkBench {327 name = "std.base64Decode";
300 name = "std.base64Decode";328 path = "${goJsonnetBench}/base64Decode.jsonnet";
301 path = "${goJsonnetBench}/base64Decode.jsonnet";329 skipRustAlternative = skipSlow;
302 skipRustAlternative = skipSlow;330 skipCpp = skipSlow;
303 skipCpp = skipSlow;331 skipScala = skipSlow;
304 skipScala = skipSlow;332 }}
305 }}333 ${mkBench {
306 ${mkBench {334 name = "std.base64DecodeBytes";
307 name = "std.base64DecodeBytes";335 path = "${goJsonnetBench}/base64DecodeBytes.jsonnet";
308 path = "${goJsonnetBench}/base64DecodeBytes.jsonnet";336 skipRustAlternative = skipSlow;
309 skipRustAlternative = skipSlow;337 skipCpp = skipSlow;
310 skipCpp = skipSlow;338 skipGo = skipSlow;
311 skipGo = skipSlow;339 skipScala = skipSlow;
312 skipScala = skipSlow;340 }}
313 }}341 ${mkBench {
314 ${mkBench {342 name = "std.base64 (byte array)";
315 name = "std.base64 (byte array)";343 path = "${goJsonnetBench}/base64_byte_array.jsonnet";
316 path = "${goJsonnetBench}/base64_byte_array.jsonnet";344 skipRustAlternative = skipSlow;
317 skipRustAlternative = skipSlow;345 skipCpp = skipSlow;
318 skipCpp = skipSlow;346 skipGo = skipSlow;
319 skipGo = skipSlow;347 skipScala = skipSlow;
320 skipScala = skipSlow;348 }}
321 }}349 ${mkBench {
322 ${mkBench {350 name = "std.foldl";
323 name = "std.foldl";351 path = "${goJsonnetBench}/foldl.jsonnet";
324 path = "${goJsonnetBench}/foldl.jsonnet";352 skipScala = skipSlow;
325 skipScala = skipSlow;353 }}
326 }}354 ${mkBench {
327 ${mkBench {355 name = "std.manifestJsonEx";
328 name = "std.manifestJsonEx";356 path = "${goJsonnetBench}/manifestJsonEx.jsonnet";
329 path = "${goJsonnetBench}/manifestJsonEx.jsonnet";357 skipScala = skipSlow;
330 skipScala = skipSlow;358 skipCpp = skipSlow;
331 skipCpp = skipSlow;359 }}
332 }}360 ${mkBench {
333 ${mkBench {361 name = "std.manifestTomlEx";
334 name = "std.manifestTomlEx";362 path = "${goJsonnetBench}/manifestTomlEx.jsonnet";
335 path = "${goJsonnetBench}/manifestTomlEx.jsonnet";363 skipCpp = skipSlow;
336 skipScala = "std.manifestTomlEx is not implemented: https://github.com/databricks/sjsonnet/issues/111";
337 skipCpp = skipSlow;364 }}
338 }}365 ${mkBench {
339 ${mkBench {366 name = "std.parseInt";
340 name = "std.parseInt";367 path = "${goJsonnetBench}/parseInt.jsonnet";
341 path = "${goJsonnetBench}/parseInt.jsonnet";368 skipScala = skipSlow;
342 skipScala = skipSlow;369 skipCpp = skipSlow;
343 skipCpp = skipSlow;370 }}
344 }}371 ${mkBench {
345 ${mkBench {372 name = "std.reverse";
346 name = "std.reverse";373 path = "${goJsonnetBench}/reverse.jsonnet";
347 path = "${goJsonnetBench}/reverse.jsonnet";374 skipCpp = skipSlow;
348 skipCpp = skipSlow;375 skipGo = skipSlow;
349 skipGo = skipSlow;376 }}
350 }}377 ${mkBench {
351 ${mkBench {378 name = "std.substr";
352 name = "std.substr";379 path = "${goJsonnetBench}/substr.jsonnet";
353 path = "${goJsonnetBench}/substr.jsonnet";380 skipScala = skipSlow;
354 skipScala = skipSlow;381 }}
355 }}382 ${mkBench {
356 ${mkBench {383 name = "Comparsion for array";
357 name = "Comparsion for array";384 path = "${goJsonnetBench}/comparison.jsonnet";
358 path = "${goJsonnetBench}/comparison.jsonnet";385 skipCpp = "too slow, takes hours, skews results";
359 skipScala = "array comparsion is not implemented";
360 skipCpp = skipSlow;386 }}
361 }}387 ${mkBench {
362 ${mkBench {388 name = "Comparsion for primitives";
363 name = "Comparsion for primitives";389 path = "${goJsonnetBench}/comparison2.jsonnet";
364 path = "${goJsonnetBench}/comparison2.jsonnet";390 skipRustAlternative = skipSlow;
365 skipRustAlternative = skipSlow;391 skipCpp = "can't run: uses up to 192GB of RAM";
366 skipCpp = "can't run: uses up to 192GB of RAM";392 skipGo = skipSlow;
367 skipGo = skipSlow;393 skipScala = skipSlow;
368 skipScala = skipSlow;394 }}
369 }}395 '';
370 '';
371 }396}
372397
modifiednix/cpp-jsonnet.nixdiffbeforeafterboth
--- a/nix/cpp-jsonnet.nix
+++ b/nix/cpp-jsonnet.nix
@@ -5,12 +5,12 @@
 }:
 let
   pname = "cpp-jsonnet";
-  version = "0.21.0";
+  version = "2026-03-23";
   src = fetchFromGitHub {
-    rev = "v${version}";
+    rev = "d33798d495d50df427dac0dc6934220e366976fb";
     owner = "google";
     repo = "jsonnet";
-    hash = "sha256-QHp0DOu/pqcgN7di219cHzfFb7fWtdGGE6J1ZXgbOGQ=";
+    hash = "sha256-fpXaYK6WKpXQ0/VbHHsE8ZR/0VpJHmFul/3a6HzBa5o=";
   };
 in
 stdenv.mkDerivation {
@@ -28,5 +28,8 @@
     wrapProgram $out/bin/jsonnet --add-flags "--max-stack 200000"
   '';
 
-  passthru = { inherit src; };
+  passthru = {
+    inherit src;
+    jsonnetBench = src;
+  };
 }
modifiednix/go-jsonnet.nixdiffbeforeafterboth
--- a/nix/go-jsonnet.nix
+++ b/nix/go-jsonnet.nix
@@ -5,18 +5,18 @@
 }:
 let
   pname = "go-jsonnet";
-  version = "0.21.0";
+  version = "2026-03-23";
   src = fetchFromGitHub {
     owner = "google";
     repo = pname;
-    rev = "v${version}";
-    hash = "sha256-J92xNDpCidbiSsN6NveS6BX6Tx+qDQqkgm6pjk1wBTQ=";
+    rev = "b5ef4cd9c4e24f2f14a68ef3bda0ca3079e11e78";
+    hash = "sha256-htC8671r74E26J42eubcFL4lPOURIdSK0P7GjZOWhao=";
   };
 in
 buildGoModule {
   inherit pname version src;
 
-  vendorHash = "sha256-Uh2rAXdye9QmmZuEqx1qeokE9Z9domyHsSFlU7YZsZw=";
+  vendorHash = "sha256-uFCvMmiZVaRYhaORI92W0pkDjDZNiWIcop70FssJiZo=";
 
   buildInputs = [ makeWrapper ];
 
@@ -25,7 +25,10 @@
     wrapProgram $out/bin/go-jsonnet --add-flags "--max-stack 200000"
   '';
 
-  passthru = { inherit src; };
+  passthru = {
+    inherit src;
+    goJsonnetBench = src + "/builtin-benchmarks";
+  };
 
   doCheck = false;
 
modifiednix/rsjsonnet.nixdiffbeforeafterboth
--- a/nix/rsjsonnet.nix
+++ b/nix/rsjsonnet.nix
@@ -5,16 +5,16 @@
 }:
 rustPlatform.buildRustPackage rec {
   pname = "rsjsonnet";
-  version = "0.4.0";
+  version = "2026-03-23";
 
   src = fetchFromGitHub {
     owner = "eduardosm";
     repo = pname;
-    rev = "v${version}";
-    hash = "sha256-Oas/fll5YerHAMI91fTEQqe6praYh4Ro8idsdvzldpA=";
+    rev = "27be31532180c611383ceb2b7f03193ab1253487";
+    hash = "sha256-0VM6v1VfQOGUXuYOuh90ta1GaLf1YA+Apm3SkH8CDN4=";
   };
 
-  cargoHash = "sha256-jH2BOvD0Iss34hODhLFHKx5pGMVtkZir7E1bYwjSa8E=";
+  cargoHash = "sha256-0IDAxm4J2rEqfUGNYoQTP0RPrEZe4YPe2E6TT7A4THo=";
 
   nativeBuildInputs = [makeWrapper];
 
modifiednix/sjsonnet.nixdiffbeforeafterboth
--- a/nix/sjsonnet.nix
+++ b/nix/sjsonnet.nix
@@ -4,27 +4,71 @@
 # TODO: Somehow build client-server version of sjsonnet, and use it in benchmarks
 {
   stdenv,
+  lib,
   fetchurl,
   jdk25_headless,
   makeWrapper,
+  autoPatchelfHook,
+  zlib,
+  openssl,
   java ? jdk25_headless,
 }:
-stdenv.mkDerivation rec {
+let
+  version = "0.6.2";
+  baseUrl = "https://github.com/databricks/sjsonnet/releases/download/${version}";
+
+  nativePlatform = {
+    x86_64-linux = "linux-x86_64";
+    aarch64-linux = "linux-arm64";
+    aarch64-darwin = "darwin-arm64";
+    # Nobody cares about darwin on intel
+  }.${stdenv.hostPlatform.system} or (throw "unsupported system: ${stdenv.hostPlatform.system}");
+
+  nativeSrc = fetchurl {
+    url = "${baseUrl}/sjsonnet-${version}-${nativePlatform}";
+    hash = {
+      x86_64-linux = "sha256-r79Q6SovcPIomDDUYTGIP35/y5t9Xo5Z3ohP7pxsF8I=";
+      aarch64-linux = "sha256-LxWR94u1Oncau57Kmtzj2UFEofWGT4+laDTbRDkwv08=";
+      aarch64-darwin = "sha256-gNZ6XekMm+ebeD7UFeRfoapXw/90gHk8MoeGD86dzKk=";
+    }.${stdenv.hostPlatform.system};
+  };
+
+  graalvmSrc = fetchurl {
+    url = "${baseUrl}/sjsonnet-graalvm-${version}-${nativePlatform}";
+    hash = {
+      x86_64-linux = "sha256-XNJCnQlwVFySrUevn1nLN/DY8UBGgvCFAitkedLB+yM=";
+      aarch64-linux = "sha256-J+C3pmiBEmo8M00IDHp9jznonibXmHVRlhsvQ4apVWw=";
+      aarch64-darwin = "sha256-TXNL52sS4NE3GjbOFtgf6aCP268qGKMFaoTwAfJfgGc=";
+    }.${stdenv.hostPlatform.system};
+  };
+in
+stdenv.mkDerivation {
   pname = "sjsonnet";
-  version = "0.6.0";
+  inherit version;
 
   src = fetchurl {
-    url = "https://github.com/databricks/${pname}/releases/download/${version}/${pname}-${version}.jar";
-    hash = "sha256-HQovfF/hX664apg9Pl9SdrK03b8rmZ9IjHpf7uNY8FM=";
+    url = "${baseUrl}/sjsonnet-${version}.jar";
+    hash = "sha256-jvkrxY48d/UdMGRoB9SxCJU2JJirfhZNyNMSkMrrQ7w=";
   };
 
   unpackPhase = "true";
-  buildInputs = [java makeWrapper];
+  nativeBuildInputs = [ makeWrapper ]
+    ++ lib.optionals stdenv.hostPlatform.isLinux [ autoPatchelfHook ];
+  buildInputs = [ java ]
+    ++ lib.optionals stdenv.hostPlatform.isLinux [ zlib openssl stdenv.cc.cc.lib ];
 
   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"
+
+    cp ${nativeSrc} $out/bin/sjsonnet-native
+    chmod +x $out/bin/sjsonnet-native
+    wrapProgram $out/bin/sjsonnet-native --add-flags "--max-stack 200000"
+
+    cp ${graalvmSrc} $out/bin/sjsonnet-graalvm
+    chmod +x $out/bin/sjsonnet-graalvm
+    wrapProgram $out/bin/sjsonnet-graalvm --add-flags "--max-stack 200000"
   '';
   separateDebugInfo = false;
 }