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
before · nix/benchmarks.nix
1{2  lib,3  runCommand,4  jsonnet-bundler,5  cacert,6  stdenv,7  fetchFromGitHub,8  go-jsonnet,9  sjsonnet,10  cpp-jsonnet,11  rsjsonnet,12  hyperfine,13  quick ? false,14  jrsonnetVariants,15}:16with lib; let17  jsonnetBench = fetchFromGitHub {18    rev = "v0.19.1";19    owner = "google";20    repo = "jsonnet";21    hash = "sha256-q1MNdbyrx4vvN5woe0o90pPqaNtsZjI5RQ7KJt7rOpU=";22  };23  goJsonnetBench =24    (fetchFromGitHub {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 {32    owner = "oracle";33    repo = "graal";34    rev = "bc305df3fe587960f7635f0185571500e5988475";35    hash = "sha256-4EKB1b2o4/qtYQ+nqbbs621OJrtjApsAWEBcw5EjrYc=";36  };37  kubePrometheusBench = let38    src = fetchFromGitHub {39      owner = "prometheus-operator";40      repo = "kube-prometheus";41      rev = "d3889807798d1697ea0691f10caf1b6a1997a8bd";42      hash = "sha256-TeYWHzoZAmDp2PzT7EH8XRUcvb3tR8Qfxel7o2QBvIM=";43    };44  in45    runCommand "kube-prometheus-vendor"46    {47      outputHash = "sha256-AGc0dHlD/Ld7I5b1+gOotzJkYrn+bB1VjISdD5NITtw=";48      outputHashMode = "recursive";49      buildInputs = [cacert];50    }51    ''52      mkdir -p $out53      cp -r ${src}/* $out/54      cd $out55      chmod u+w jsonnetfile.lock.json56      mkdir vendor57      ${jsonnet-bundler}/bin/jb install58    '';5960  # Removes outsiders from the output61  # Useful when comparing performance of different jrsonnet releases62  skipSlow =63    if quick64    then "slow benchmark, but only quick requested"65    else "";66in67  stdenv.mkDerivation {68    name = "benchmarks";69    __impure = true;70    unpackPhase = "true";7172    buildInputs = [73      sjsonnet74      cpp-jsonnet75      rsjsonnet76      go-jsonnet7778      hyperfine79    ];8081    installPhase = let82      mkBench = {83        name,84        path,85        omitSource ? false,86        pathIsGenerator ? false,87        skipRustAlternative ? "",88        skipScala ? "",89        skipCpp ? "",90        skipGo ? "",91        vendor ? "",92      }: ''93        echo >> $out94        echo "### ${name}" >> $out95        echo >> $out96        ${optionalString (skipRustAlternative != "") ''97          echo "> Note: No results for Rust (alternative), ${skipRustAlternative}" >> $out98          echo >> $out99        ''}100        ${optionalString (skipGo != "") ''101          echo "> Note: No results for Go, ${skipGo}" >> $out102          echo >> $out103        ''}104        ${optionalString (skipScala != "") ''105          echo "> Note: No results for Scala, ${skipScala}" >> $out106          echo >> $out107        ''}108        ${optionalString (skipCpp != "") ''109          echo "> Note: No results for C++, ${skipCpp}" >> $out110          echo >> $out111        ''}112        ${optionalString (!quick && !omitSource) ''113          echo "<details>" >> $out114          echo "<summary>Source</summary>" >> $out115          echo >> $out116          echo "\`\`\`jsonnet" >> $out117          ${optionalString pathIsGenerator "echo \"// Generator source\" >> $out"}118          cat ${path} >> $out119          echo >> $out120          echo "\`\`\`" >> $out121          echo "</details>" >> $out122          echo >> $out123        ''}124        path=${path}125        ${optionalString pathIsGenerator ''126          go-jsonnet $path > generated.jsonnet127          path=generated.jsonnet128        ''}129        hyperfine -N -w4 -m20 --output=pipe --style=basic --export-asciidoc result.adoc \130          ${concatStringsSep " " (forEach jrsonnetVariants (131          variant: "\"${variant.drv}/bin/jrsonnet $path${optionalString (vendor != "") " -J${vendor}"}\" -n \"Rust${132            if variant.name != ""133            then " (${variant.name})"134            else ""135          }\""136        ))} \137          ${optionalString (skipRustAlternative == "") "\"rsjsonnet $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"Rust (alternative, rsjsonnet)\""} \138          ${optionalString (skipGo == "") "\"go-jsonnet $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"Go\""} \139          ${optionalString (skipScala == "") "\"sjsonnet $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"Scala\""} \140          ${optionalString (skipCpp == "") "\"jsonnet $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"C++\""}141        cat result.adoc >> $out142      '';143    in ''144      set -oux145146      temp=$(mktemp -d)147      cd $temp148149      touch $out150      ${optionalString (!quick) ''151        cat ${./benchmarks.md} >> $out152        echo >> $out153154        echo "<details>" >> $out155        echo "<summary>Tested versions</summary>" >> $out156        echo >> $out157        echo Go: $(go-jsonnet --version) >> $out158        echo >> $out159        echo "\`\`\`" >> $out160        go-jsonnet --help >> $out161        echo "\`\`\`" >> $out162        echo >> $out163        echo C++: $(jsonnet --version) >> $out164        echo >> $out165        echo "\`\`\`" >> $out166        jsonnet --help >> $out167        echo "\`\`\`" >> $out168        echo >> $out169        echo Scala: >> $out170        echo >> $out171        echo "\`\`\`" >> $out172        sjsonnet 2>> $out || true173        echo "\`\`\`" >> $out174        echo >> $out175        echo "Rust (alternative):" >> $out176        echo >> $out177        echo "\`\`\`" >> $out178        rsjsonnet --help 2>> $out || true179        echo "\`\`\`" >> $out180        echo >> $out181        echo "</details>" >> $out182        echo >> $out183184        echo >> $out185      ''}186      echo "## Real world" >> $out187      ${mkBench {188        name = "Graalvm CI";189        path = "${graalvmBench}/ci.jsonnet";190        skipCpp = "takes longer than a hour";191        skipGo = skipSlow;192        skipScala = skipSlow;193      }}194      ${mkBench {195        name = "Kube-prometheus manifests";196        vendor = "${kubePrometheusBench}/vendor";197        path = "${kubePrometheusBench}/example.jsonnet";198        skipCpp = skipSlow;199        skipGo = skipSlow;200        skipScala = skipSlow;201      }}202203      echo >> $out204      echo "## Benchmarks from C++ jsonnet (/perf_tests)" >> $out205      ${mkBench {206        name = "Large string join";207        path = "${jsonnetBench}/perf_tests/large_string_join.jsonnet";208        skipScala = skipSlow;209      }}210      ${mkBench {211        name = "Large string template";212        omitSource = true;213        path = "${jsonnetBench}/perf_tests/large_string_template.jsonnet";214        skipGo = "fails with os stack size exhausion";215        skipCpp = skipSlow;216        skipScala = skipSlow;217      }}218      ${mkBench {219        name = "Realistic 1";220        path = "${jsonnetBench}/perf_tests/realistic1.jsonnet";221        skipGo = skipSlow;222        skipCpp = skipSlow;223        skipScala = skipSlow;224      }}225      ${mkBench {226        name = "Realistic 2";227        path = "${jsonnetBench}/perf_tests/realistic2.jsonnet";228        skipGo = skipSlow;229        skipCpp = skipSlow;230        skipScala = skipSlow;231      }}232233      echo >> $out234      echo "## Benchmarks from C++ jsonnet (/benchmarks)" >> $out235      ${mkBench {236        name = "Tail call";237        path = "${jsonnetBench}/benchmarks/bench.01.jsonnet";238        skipScala = skipSlow;239      }}240      ${mkBench {241        name = "Inheritance recursion";242        path = "${jsonnetBench}/benchmarks/bench.02.jsonnet";243        skipCpp = skipSlow;244        skipGo = skipSlow;245      }}246      ${mkBench {247        name = "Simple recursive call";248        path = "${jsonnetBench}/benchmarks/bench.03.jsonnet";249        skipScala = skipSlow;250        skipGo = skipSlow;251      }}252      ${mkBench {253        name = "Foldl string concat";254        path = "${jsonnetBench}/benchmarks/bench.04.jsonnet";255        skipCpp = skipSlow;256        skipScala = skipSlow;257      }}258      ${mkBench {259        name = "Array sorts";260        path = "${jsonnetBench}/benchmarks/bench.06.jsonnet";261        skipCpp = skipSlow;262        # std.assertEqual(reverse(std.range(1, 1000)), sort(std.range(1, 1000), keyF=function(x) -x))263        skipScala = "sjsonnet doesn't support keyF in std.sort: https://github.com/databricks/sjsonnet/issues/204";264      }}265      ${mkBench {266        name = "Lazy array";267        path = "${jsonnetBench}/benchmarks/bench.07.jsonnet";268        skipGo = skipSlow;269        skipScala = skipSlow;270      }}271      ${mkBench {272        name = "Inheritance function recursion";273        path = "${jsonnetBench}/benchmarks/bench.08.jsonnet";274        skipCpp = skipSlow;275        skipScala = skipSlow;276      }}277      ${mkBench {278        name = "String strips";279        path = "${jsonnetBench}/benchmarks/bench.09.jsonnet";280        skipCpp = skipSlow;281        skipScala = skipSlow;282      }}283      ${mkBench {284        name = "Big object";285        path = "${jsonnetBench}/benchmarks/gen_big_object.jsonnet";286        pathIsGenerator = true;287        skipScala = skipSlow;288      }}289290      echo >> $out291      echo "## Benchmarks from Go jsonnet (builtins)" >> $out292      ${mkBench {293        name = "std.base64";294        path = "${goJsonnetBench}/base64.jsonnet";295        skipRustAlternative = skipSlow;296        skipCpp = skipSlow;297        skipScala = skipSlow;298      }}299      ${mkBench {300        name = "std.base64Decode";301        path = "${goJsonnetBench}/base64Decode.jsonnet";302        skipRustAlternative = skipSlow;303        skipCpp = skipSlow;304        skipScala = skipSlow;305      }}306      ${mkBench {307        name = "std.base64DecodeBytes";308        path = "${goJsonnetBench}/base64DecodeBytes.jsonnet";309        skipRustAlternative = skipSlow;310        skipCpp = skipSlow;311        skipGo = skipSlow;312        skipScala = skipSlow;313      }}314      ${mkBench {315        name = "std.base64 (byte array)";316        path = "${goJsonnetBench}/base64_byte_array.jsonnet";317        skipRustAlternative = skipSlow;318        skipCpp = skipSlow;319        skipGo = skipSlow;320        skipScala = skipSlow;321      }}322      ${mkBench {323        name = "std.foldl";324        path = "${goJsonnetBench}/foldl.jsonnet";325        skipScala = skipSlow;326      }}327      ${mkBench {328        name = "std.manifestJsonEx";329        path = "${goJsonnetBench}/manifestJsonEx.jsonnet";330        skipScala = skipSlow;331        skipCpp = skipSlow;332      }}333      ${mkBench {334        name = "std.manifestTomlEx";335        path = "${goJsonnetBench}/manifestTomlEx.jsonnet";336        skipScala = "std.manifestTomlEx is not implemented: https://github.com/databricks/sjsonnet/issues/111";337        skipCpp = skipSlow;338      }}339      ${mkBench {340        name = "std.parseInt";341        path = "${goJsonnetBench}/parseInt.jsonnet";342        skipScala = skipSlow;343        skipCpp = skipSlow;344      }}345      ${mkBench {346        name = "std.reverse";347        path = "${goJsonnetBench}/reverse.jsonnet";348        skipCpp = skipSlow;349        skipGo = skipSlow;350      }}351      ${mkBench {352        name = "std.substr";353        path = "${goJsonnetBench}/substr.jsonnet";354        skipScala = skipSlow;355      }}356      ${mkBench {357        name = "Comparsion for array";358        path = "${goJsonnetBench}/comparison.jsonnet";359        skipScala = "array comparsion is not implemented";360        skipCpp = skipSlow;361      }}362      ${mkBench {363        name = "Comparsion for primitives";364        path = "${goJsonnetBench}/comparison2.jsonnet";365        skipRustAlternative = skipSlow;366        skipCpp = "can't run: uses up to 192GB of RAM";367        skipGo = skipSlow;368        skipScala = skipSlow;369      }}370    '';371  }
after · nix/benchmarks.nix
1{2  lib,3  runCommand,4  jsonnet-bundler,5  cacert,6  stdenv,7  fetchFromGitHub,8  go-jsonnet,9  sjsonnet,10  cpp-jsonnet,11  rsjsonnet,12  hyperfine,13  quick ? false,14  jrsonnetVariants,15}:16with lib;17let18  inherit (cpp-jsonnet) jsonnetBench;19  inherit (go-jsonnet) goJsonnetBench;20  graalvmBench = fetchFromGitHub {21    owner = "oracle";22    repo = "graal";23    rev = "bc305df3fe587960f7635f0185571500e5988475";24    hash = "sha256-4EKB1b2o4/qtYQ+nqbbs621OJrtjApsAWEBcw5EjrYc=";25  };26  kubePrometheusBench =27    let28      src = fetchFromGitHub {29        owner = "prometheus-operator";30        repo = "kube-prometheus";31        rev = "d3889807798d1697ea0691f10caf1b6a1997a8bd";32        hash = "sha256-TeYWHzoZAmDp2PzT7EH8XRUcvb3tR8Qfxel7o2QBvIM=";33      };34    in35    runCommand "kube-prometheus-vendor"36      {37        outputHash = "sha256-AGc0dHlD/Ld7I5b1+gOotzJkYrn+bB1VjISdD5NITtw=";38        outputHashMode = "recursive";39        buildInputs = [ cacert ];40      }41      ''42        mkdir -p $out43        cp -r ${src}/* $out/44        cd $out45        chmod u+w jsonnetfile.lock.json46        mkdir vendor47        ${jsonnet-bundler}/bin/jb install48      '';4950  # Removes outsiders from the output51  # Useful when comparing performance of different jrsonnet releases52  skipSlow = if quick then "slow benchmark, but only quick requested" else "";53in54stdenv.mkDerivation {55  name = "benchmarks";56  __impure = true;57  unpackPhase = "true";5859  buildInputs = [60    sjsonnet61    cpp-jsonnet62    rsjsonnet63    go-jsonnet6465    hyperfine66  ];6768  installPhase =69    let70      mkBench =71        {72          name,73          path,74          omitSource ? false,75          pathIsGenerator ? false,76          skipRustAlternative ? "",77          skipScala ? "",78          skipCpp ? "",79          skipGo ? "",80          vendor ? "",81        }:82        ''83          echo >> $out84          echo "### ${name}" >> $out85          echo >> $out86          ${optionalString (skipRustAlternative != "") ''87            echo "> Note: No results for Rust (alternative), ${skipRustAlternative}" >> $out88            echo >> $out89          ''}90          ${optionalString (skipGo != "") ''91            echo "> Note: No results for Go, ${skipGo}" >> $out92            echo >> $out93          ''}94          ${optionalString (skipScala != "") ''95            echo "> Note: No results for Scala/Scala (native)/Scala (GraalVM), ${skipScala}" >> $out96            echo >> $out97          ''}98          ${optionalString (skipCpp != "") ''99            echo "> Note: No results for C++, ${skipCpp}" >> $out100            echo >> $out101          ''}102          ${optionalString (!quick && !omitSource) ''103            echo "<details>" >> $out104            echo "<summary>Source</summary>" >> $out105            echo >> $out106            echo "\`\`\`jsonnet" >> $out107            ${optionalString pathIsGenerator "echo \"// Generator source\" >> $out"}108            cat ${path} >> $out109            echo >> $out110            echo "\`\`\`" >> $out111            echo "</details>" >> $out112            echo >> $out113          ''}114          path=${path}115          ${optionalString pathIsGenerator ''116            go-jsonnet $path > generated.jsonnet117            path=generated.jsonnet118          ''}119          hyperfine -N -w4 -m20 --output=pipe --style=basic --export-asciidoc result.adoc \120            ${121              concatStringsSep " " (122                forEach jrsonnetVariants (123                  variant:124                  "\"${variant.drv}/bin/jrsonnet $path${optionalString (vendor != "") " -J${vendor}"}\" -n \"Rust${125                    if variant.name != "" then " (${variant.name})" else ""126                  }\""127                )128              )129            } \130            ${131              optionalString (skipRustAlternative == "")132                "\"rsjsonnet $path${133                  optionalString (vendor != "") " -J ${vendor}"134                }\" -n \"Rust (alternative, rsjsonnet)\""135            } \136            ${137              optionalString (skipGo == "")138                "\"go-jsonnet $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"Go\""139            } \140            ${141              optionalString (skipScala == "")142                "\"sjsonnet $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"Scala\""143            } \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            }155          cat result.adoc >> $out156        '';157    in158    ''159      set -oux160161      temp=$(mktemp -d)162      cd $temp163164      touch $out165      ${optionalString (!quick) ''166        cat ${./benchmarks.md} >> $out167        echo >> $out168169        echo "<details>" >> $out170        echo "<summary>Tested versions</summary>" >> $out171        echo >> $out172        echo Go: $(go-jsonnet --version) >> $out173        echo >> $out174        echo "\`\`\`" >> $out175        go-jsonnet --help >> $out176        echo "\`\`\`" >> $out177        echo >> $out178        echo C++: $(jsonnet --version) >> $out179        echo >> $out180        echo "\`\`\`" >> $out181        jsonnet --help >> $out182        echo "\`\`\`" >> $out183        echo >> $out184        echo Scala: >> $out185        echo >> $out186        echo "\`\`\`" >> $out187        sjsonnet 2>> $out || true188        echo "\`\`\`" >> $out189        echo >> $out190        echo "Scala (native):" >> $out191        echo >> $out192        echo "\`\`\`" >> $out193        sjsonnet-native 2>> $out || true194        echo "\`\`\`" >> $out195        echo >> $out196        echo "Scala (GraalVM):" >> $out197        echo >> $out198        echo "\`\`\`" >> $out199        sjsonnet-graalvm 2>> $out || true200        echo "\`\`\`" >> $out201        echo >> $out202        echo "Rust (alternative):" >> $out203        echo >> $out204        echo "\`\`\`" >> $out205        rsjsonnet --help 2>> $out || true206        echo "\`\`\`" >> $out207        echo >> $out208        echo "</details>" >> $out209        echo >> $out210211        echo >> $out212      ''}213      echo "## Real world" >> $out214      ${mkBench {215        name = "Graalvm CI";216        path = "${graalvmBench}/ci.jsonnet";217        omitSource = true;218        skipCpp = "takes longer than a hour";219        skipGo = skipSlow;220        skipScala = skipSlow;221      }}222      ${mkBench {223        name = "Kube-prometheus manifests";224        vendor = "${kubePrometheusBench}/vendor";225        path = "${kubePrometheusBench}/example.jsonnet";226        omitSource = true;227        skipCpp = "too slow, takes hours, skews results";228        skipGo = skipSlow;229        skipScala = skipSlow;230      }}231232      echo >> $out233      echo "## Benchmarks from C++ jsonnet (/perf_tests)" >> $out234      ${mkBench {235        name = "Large string join";236        path = "${jsonnetBench}/perf_tests/large_string_join.jsonnet";237        skipScala = skipSlow;238      }}239      ${mkBench {240        name = "Large string template";241        omitSource = true;242        path = "${jsonnetBench}/perf_tests/large_string_template.jsonnet";243        skipGo = "fails with os stack size exhausion";244        skipCpp = "too slow, takes hours, skews results";245        skipScala = skipSlow;246      }}247      ${mkBench {248        name = "Realistic 1";249        path = "${jsonnetBench}/perf_tests/realistic1.jsonnet";250        skipGo = skipSlow;251        skipCpp = "too slow, takes hours, skews results";252        skipScala = skipSlow;253      }}254      ${mkBench {255        name = "Realistic 2";256        path = "${jsonnetBench}/perf_tests/realistic2.jsonnet";257        skipGo = skipSlow;258        skipCpp = "too slow, takes hours, skews results";259        skipScala = skipSlow;260      }}261262      echo >> $out263      echo "## Benchmarks from C++ jsonnet (/benchmarks)" >> $out264      ${mkBench {265        name = "Tail call";266        path = "${jsonnetBench}/benchmarks/bench.01.jsonnet";267        skipScala = skipSlow;268      }}269      ${mkBench {270        name = "Inheritance recursion";271        path = "${jsonnetBench}/benchmarks/bench.02.jsonnet";272        skipCpp = skipSlow;273        skipGo = skipSlow;274      }}275      ${mkBench {276        name = "Simple recursive call";277        path = "${jsonnetBench}/benchmarks/bench.03.jsonnet";278        skipScala = skipSlow;279        skipGo = skipSlow;280      }}281      ${mkBench {282        name = "Foldl string concat";283        path = "${jsonnetBench}/benchmarks/bench.04.jsonnet";284        skipCpp = skipSlow;285        skipScala = skipSlow;286      }}287      ${mkBench {288        name = "Array sorts";289        path = "${jsonnetBench}/benchmarks/bench.06.jsonnet";290        skipCpp = skipSlow;291      }}292      ${mkBench {293        name = "Lazy array";294        path = "${jsonnetBench}/benchmarks/bench.07.jsonnet";295        skipGo = skipSlow;296        skipScala = skipSlow;297      }}298      ${mkBench {299        name = "Inheritance function recursion";300        path = "${jsonnetBench}/benchmarks/bench.08.jsonnet";301        skipCpp = skipSlow;302        skipScala = skipSlow;303      }}304      ${mkBench {305        name = "String strips";306        path = "${jsonnetBench}/benchmarks/bench.09.jsonnet";307        skipCpp = "too slow, takes hours, skews results";308        skipScala = skipSlow;309      }}310      ${mkBench {311        name = "Big object";312        path = "${jsonnetBench}/benchmarks/gen_big_object.jsonnet";313        pathIsGenerator = true;314        skipScala = skipSlow;315      }}316317      echo >> $out318      echo "## Benchmarks from Go jsonnet (builtins)" >> $out319      ${mkBench {320        name = "std.base64";321        path = "${goJsonnetBench}/base64.jsonnet";322        skipRustAlternative = skipSlow;323        skipCpp = "too slow, takes hours, skews results";324        skipScala = skipSlow;325      }}326      ${mkBench {327        name = "std.base64Decode";328        path = "${goJsonnetBench}/base64Decode.jsonnet";329        skipRustAlternative = skipSlow;330        skipCpp = skipSlow;331        skipScala = skipSlow;332      }}333      ${mkBench {334        name = "std.base64DecodeBytes";335        path = "${goJsonnetBench}/base64DecodeBytes.jsonnet";336        skipRustAlternative = skipSlow;337        skipCpp = skipSlow;338        skipGo = skipSlow;339        skipScala = skipSlow;340      }}341      ${mkBench {342        name = "std.base64 (byte array)";343        path = "${goJsonnetBench}/base64_byte_array.jsonnet";344        skipRustAlternative = skipSlow;345        skipCpp = skipSlow;346        skipGo = skipSlow;347        skipScala = skipSlow;348      }}349      ${mkBench {350        name = "std.foldl";351        path = "${goJsonnetBench}/foldl.jsonnet";352        skipScala = skipSlow;353      }}354      ${mkBench {355        name = "std.manifestJsonEx";356        path = "${goJsonnetBench}/manifestJsonEx.jsonnet";357        skipScala = skipSlow;358        skipCpp = skipSlow;359      }}360      ${mkBench {361        name = "std.manifestTomlEx";362        path = "${goJsonnetBench}/manifestTomlEx.jsonnet";363        skipCpp = skipSlow;364      }}365      ${mkBench {366        name = "std.parseInt";367        path = "${goJsonnetBench}/parseInt.jsonnet";368        skipScala = skipSlow;369        skipCpp = skipSlow;370      }}371      ${mkBench {372        name = "std.reverse";373        path = "${goJsonnetBench}/reverse.jsonnet";374        skipCpp = skipSlow;375        skipGo = skipSlow;376      }}377      ${mkBench {378        name = "std.substr";379        path = "${goJsonnetBench}/substr.jsonnet";380        skipScala = skipSlow;381      }}382      ${mkBench {383        name = "Comparsion for array";384        path = "${goJsonnetBench}/comparison.jsonnet";385        skipCpp = "too slow, takes hours, skews results";386      }}387      ${mkBench {388        name = "Comparsion for primitives";389        path = "${goJsonnetBench}/comparison2.jsonnet";390        skipRustAlternative = skipSlow;391        skipCpp = "can't run: uses up to 192GB of RAM";392        skipGo = skipSlow;393        skipScala = skipSlow;394      }}395    '';396}
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;
 }