difftreelog
chore update other impls for benchmarking
in: master
9 files changed
flake.nixdiffbeforeafterboth--- a/flake.nix
+++ b/flake.nix
@@ -45,7 +45,7 @@
jsonnetImpls = {
go-jsonnet = pkgs.callPackage ./nix/go-jsonnet.nix { };
sjsonnet = pkgs.callPackage ./nix/sjsonnet.nix { };
- jsonnet = pkgs.callPackage ./nix/jsonnet.nix { };
+ cpp-jsonnet = pkgs.callPackage ./nix/cpp-jsonnet.nix { };
# I didn't managed to build it, and nixpkgs version is marked as broken
# haskell-jsonnet = pkgs.callPackage ./nix/haskell-jsonnet.nix { };
rsjsonnet = pkgs.callPackage ./nix/rsjsonnet.nix { };
@@ -55,11 +55,7 @@
default = jrsonnet;
jrsonnet = pkgs.callPackage ./nix/jrsonnet.nix {
- inherit craneLib;
- };
- jrsonnet-nightly = pkgs.callPackage ./nix/jrsonnet.nix {
inherit craneLib;
- withNightlyFeatures = true;
};
jrsonnet-experimental = pkgs.callPackage ./nix/jrsonnet.nix {
inherit craneLib;
@@ -77,7 +73,7 @@
inherit (config.legacyPackages.jsonnetImpls)
go-jsonnet
sjsonnet
- jsonnet
+ cpp-jsonnet
rsjsonnet
;
jrsonnetVariants = [
@@ -91,7 +87,7 @@
inherit (config.legacyPackages.jsonnetImpls)
go-jsonnet
sjsonnet
- jsonnet
+ cpp-jsonnet
rsjsonnet
;
quick = true;
@@ -106,7 +102,7 @@
inherit (config.legacyPackages.jsonnetImpls)
go-jsonnet
sjsonnet
- jsonnet
+ cpp-jsonnet
rsjsonnet
;
jrsonnetVariants = [
@@ -115,8 +111,8 @@
name = "current";
}
{
- drv = jrsonnet-nightly.override { forBenchmarks = true; };
- name = "current-nightly";
+ drv = jrsonnet-experimental.override { forBenchmarks = true; };
+ name = "current-experimental";
}
{
drv = jrsonnet-release.override { forBenchmarks = true; };
@@ -128,7 +124,7 @@
inherit (config.legacyPackages.jsonnetImpls)
go-jsonnet
sjsonnet
- jsonnet
+ cpp-jsonnet
rsjsonnet
;
quick = true;
@@ -138,8 +134,8 @@
name = "current";
}
{
- drv = jrsonnet-nightly.override { forBenchmarks = true; };
- name = "current-nightly";
+ drv = jrsonnet-experimental.override { forBenchmarks = true; };
+ name = "current-experimental";
}
{
drv = jrsonnet-release.override { forBenchmarks = true; };
nix/benchmarks.nixdiffbeforeafterboth1{2 lib,3 runCommand,4 jsonnet-bundler,5 cacert,6 stdenv,7 fetchFromGitHub,8 go-jsonnet,9 sjsonnet,10 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 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 ${optionalStringpathIsGenerator"echo \"// Generator source\" >> $out"}118 cat ${path} >> $out119 echo >> $out120 echo "\`\`\`" >> $out121 echo "</details>" >> $out122 echo >> $out123 ''}124 path=${path}125 ${optionalStringpathIsGenerator''126 go-jsonnet $path > generated.jsonnet127 path=generated.jsonnet128 ''}129 hyperfine -N -w4 -m20 --output=pipe --style=basic --export-asciidoc result.adoc \130 ${concatStringsSep" "(forEachjrsonnetVariants(131variant"\"${variant.drv}/bin/jrsonnet $path${optionalString(vendor!="")" -J${vendor}"}\" -n \"Rust${132 ifvariant.name!=""133then" (${variant.name})"134else""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 ${} >> $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{188name="Graalvm CI";189path="${graalvmBench}/ci.jsonnet";190skipCpp="takes longer than a hour";191skipGo=skipSlow;192skipScala=skipSlow;193}}194 ${mkBench{195name="Kube-prometheus manifests";196vendor="${kubePrometheusBench}/vendor";197path="${kubePrometheusBench}/example.jsonnet";198skipCpp=skipSlow;199skipGo=skipSlow;200skipScala=skipSlow;201}}202203 echo >> $out204 echo "## Benchmarks from C++ jsonnet (/perf_tests)" >> $out205 ${mkBench{206name="Large string join";207path="${jsonnetBench}/perf_tests/large_string_join.jsonnet";208skipScala=skipSlow;209}}210 ${mkBench{211name="Large string template";212omitSource=true;213path="${jsonnetBench}/perf_tests/large_string_template.jsonnet";214skipGo="fails with os stack size exhausion";215skipCpp=skipSlow;216skipScala=skipSlow;217}}218 ${mkBench{219name="Realistic 1";220path="${jsonnetBench}/perf_tests/realistic1.jsonnet";221skipGo=skipSlow;222skipCpp=skipSlow;223skipScala=skipSlow;224}}225 ${mkBench{226name="Realistic 2";227path="${jsonnetBench}/perf_tests/realistic2.jsonnet";228skipGo=skipSlow;229skipCpp=skipSlow;230skipScala=skipSlow;231}}232233 echo >> $out234 echo "## Benchmarks from C++ jsonnet (/benchmarks)" >> $out235 ${mkBench{236name="Tail call";237path="${jsonnetBench}/benchmarks/bench.01.jsonnet";238skipScala=skipSlow;239}}240 ${mkBench{241name="Inheritance recursion";242path="${jsonnetBench}/benchmarks/bench.02.jsonnet";243skipCpp=skipSlow;244skipGo=skipSlow;245}}246 ${mkBench{247name="Simple recursive call";248path="${jsonnetBench}/benchmarks/bench.03.jsonnet";249skipScala=skipSlow;250skipGo=skipSlow;251}}252 ${mkBench{253name="Foldl string concat";254path="${jsonnetBench}/benchmarks/bench.04.jsonnet";255skipCpp=skipSlow;256skipScala=skipSlow;257}}258 ${mkBench{259name="Array sorts";260path="${jsonnetBench}/benchmarks/bench.06.jsonnet";261skipCpp=skipSlow;262# std.assertEqual(reverse(std.range(1, 1000)), sort(std.range(1, 1000), keyF=function(x) -x))263skipScala="sjsonnet doesn't support keyF in std.sort: https://github.com/databricks/sjsonnet/issues/204";264}}265 ${mkBench{266name="Lazy array";267path="${jsonnetBench}/benchmarks/bench.07.jsonnet";268skipGo=skipSlow;269skipScala=skipSlow;270}}271 ${mkBench{272name="Inheritance function recursion";273path="${jsonnetBench}/benchmarks/bench.08.jsonnet";274skipCpp=skipSlow;275skipScala=skipSlow;276}}277 ${mkBench{278name="String strips";279path="${jsonnetBench}/benchmarks/bench.09.jsonnet";280skipCpp=skipSlow;281skipScala=skipSlow;282}}283 ${mkBench{284name="Big object";285path="${jsonnetBench}/benchmarks/gen_big_object.jsonnet";286pathIsGenerator=true;287skipScala=skipSlow;288}}289290 echo >> $out291 echo "## Benchmarks from Go jsonnet (builtins)" >> $out292 ${mkBench{293name="std.base64";294path="${goJsonnetBench}/base64.jsonnet";295skipRustAlternative=skipSlow;296skipCpp=skipSlow;297skipScala=skipSlow;298}}299 ${mkBench{300name="std.base64Decode";301path="${goJsonnetBench}/base64Decode.jsonnet";302skipRustAlternative=skipSlow;303skipCpp=skipSlow;304skipScala=skipSlow;305}}306 ${mkBench{307name="std.base64DecodeBytes";308path="${goJsonnetBench}/base64DecodeBytes.jsonnet";309skipRustAlternative=skipSlow;310skipCpp=skipSlow;311skipGo=skipSlow;312skipScala=skipSlow;313}}314 ${mkBench{315name="std.base64 (byte array)";316path="${goJsonnetBench}/base64_byte_array.jsonnet";317skipRustAlternative=skipSlow;318skipCpp=skipSlow;319skipGo=skipSlow;320skipScala=skipSlow;321}}322 ${mkBench{323name="std.foldl";324path="${goJsonnetBench}/foldl.jsonnet";325skipScala=skipSlow;326}}327 ${mkBench{328name="std.manifestJsonEx";329path="${goJsonnetBench}/manifestJsonEx.jsonnet";330skipScala=skipSlow;331skipCpp=skipSlow;332}}333 ${mkBench{334name="std.manifestTomlEx";335path="${goJsonnetBench}/manifestTomlEx.jsonnet";336skipScala="std.manifestTomlEx is not implemented: https://github.com/databricks/sjsonnet/issues/111";337skipCpp=skipSlow;338}}339 ${mkBench{340name="std.parseInt";341path="${goJsonnetBench}/parseInt.jsonnet";342skipScala=skipSlow;343skipCpp=skipSlow;344}}345 ${mkBench{346name="std.reverse";347path="${goJsonnetBench}/reverse.jsonnet";348skipCpp=skipSlow;349skipGo=skipSlow;350}}351 ${mkBench{352name="std.substr";353path="${goJsonnetBench}/substr.jsonnet";354skipScala=skipSlow;355}}356 ${mkBench{357name="Comparsion for array";358path="${goJsonnetBench}/comparison.jsonnet";359skipScala="array comparsion is not implemented";360skipCpp=skipSlow;361}}362 ${mkBench{363name="Comparsion for primitives";364path="${goJsonnetBench}/comparison2.jsonnet";365skipRustAlternative=skipSlow;366skipCpp="can't run: uses up to 192GB of RAM";367skipGo=skipSlow;368skipScala=skipSlow;369}}370 '';371 }nix/cpp-jsonnet.nixdiffbeforeafterboth--- /dev/null
+++ b/nix/cpp-jsonnet.nix
@@ -0,0 +1,32 @@
+{
+ stdenv,
+ fetchFromGitHub,
+ makeWrapper,
+}:
+let
+ pname = "cpp-jsonnet";
+ version = "0.21.0";
+ src = fetchFromGitHub {
+ rev = "v${version}";
+ owner = "google";
+ repo = "jsonnet";
+ hash = "sha256-QHp0DOu/pqcgN7di219cHzfFb7fWtdGGE6J1ZXgbOGQ=";
+ };
+in
+stdenv.mkDerivation {
+ inherit pname version src;
+
+ makeFlags = [
+ "jsonnet"
+ ];
+
+ nativeBuildInputs = [ makeWrapper ];
+
+ installPhase = ''
+ mkdir -p $out/bin
+ cp jsonnet $out/bin/jsonnet
+ wrapProgram $out/bin/jsonnet --add-flags "--max-stack 200000"
+ '';
+
+ passthru = { inherit src; };
+}
nix/go-jsonnet.nixdiffbeforeafterboth--- a/nix/go-jsonnet.nix
+++ b/nix/go-jsonnet.nix
@@ -3,26 +3,31 @@
fetchFromGitHub,
makeWrapper,
}:
-buildGoModule rec {
+let
pname = "go-jsonnet";
- version = "0.20.0";
-
+ version = "0.21.0";
src = fetchFromGitHub {
owner = "google";
repo = pname;
rev = "v${version}";
- hash = "sha256-P69tguBrFF/CSCOfHjCfBT5710oJdhZDh3kMCbc32eE=";
+ hash = "sha256-J92xNDpCidbiSsN6NveS6BX6Tx+qDQqkgm6pjk1wBTQ=";
};
- vendorHash = "sha256-j1fTOUpLx34TgzW94A/BctLrg9XoTtb3cBizhVJoEEI=";
+in
+buildGoModule {
+ inherit pname version src;
- buildInputs = [makeWrapper];
+ vendorHash = "sha256-Uh2rAXdye9QmmZuEqx1qeokE9Z9domyHsSFlU7YZsZw=";
+
+ buildInputs = [ makeWrapper ];
postInstall = ''
mv $out/bin/jsonnet $out/bin/go-jsonnet
wrapProgram $out/bin/go-jsonnet --add-flags "--max-stack 200000"
'';
+ passthru = { inherit src; };
+
doCheck = false;
- subPackages = ["cmd/jsonnet"];
+ subPackages = [ "cmd/jsonnet" ];
}
nix/jrsonnet-release.nixdiffbeforeafterboth--- a/nix/jrsonnet-release.nix
+++ b/nix/jrsonnet-release.nix
@@ -16,7 +16,7 @@
rev = "ad68a2495da324ce7a893992a6b32851849c64eb";
hash = "sha256-N2z0JcJG6iQ+eAE1GGF+c1+T7Pti8oCgx+QWdhT+33M=";
};
- cargoHash = "sha256-A/sdqI51kD7Tfo9R95ep2CecaSEzSz3suhZXdND6/nQ=";
+ cargoHash = "sha256-ZHmdlqakucapzXJz6L7ZJpmvqTutelN8qkWAD4uDJr8=";
cargoTestFlags = ["--package=jrsonnet --features=mimalloc,legacy-this-file"];
cargoBuildFlags = ["--package=jrsonnet --features=mimalloc,legacy-this-file"];
nix/jrsonnet.nixdiffbeforeafterboth--- a/nix/jrsonnet.nix
+++ b/nix/jrsonnet.nix
@@ -2,7 +2,6 @@
lib,
craneLib,
makeWrapper,
- withNightlyFeatures ? false,
withExperimentalFeatures ? false,
forBenchmarks ? false,
}:
@@ -15,9 +14,9 @@
|| (craneLib.filterCargoSources path type);
};
pname = "jrsonnet";
- version = "current${optionalString withNightlyFeatures "-nightly"}${optionalString withExperimentalFeatures "-experimental"}";
+ version = "current${optionalString withExperimentalFeatures "-experimental"}";
- cargoExtraArgs = "--locked --features=mimalloc${optionalString withNightlyFeatures ",nightly"}${optionalString withExperimentalFeatures ",experimental"}";
+ cargoExtraArgs = "--locked --features=mimalloc${optionalString withExperimentalFeatures ",experimental"}";
nativeBuildInputs = [makeWrapper];
nix/jsonnet.nixdiffbeforeafterboth--- a/nix/jsonnet.nix
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- stdenv,
- fetchFromGitHub,
- makeWrapper,
-}:
-stdenv.mkDerivation rec {
- pname = "jsonnet";
- version = "0.20.0";
-
- src = fetchFromGitHub {
- rev = "v${version}";
- owner = "google";
- repo = pname;
- hash = "sha256-FtVJE9alEl56Uik+nCpJMV5DMVVmRCnE1xMAiWdK39Y=";
- };
-
- makeFlags = [
- "jsonnet"
- ];
-
- nativeBuildInputs = [makeWrapper];
-
- installPhase = ''
- mkdir -p $out/bin
- cp jsonnet $out/bin/jsonnet
- wrapProgram $out/bin/jsonnet --add-flags "--max-stack 200000"
- '';
-}
nix/rsjsonnet.nixdiffbeforeafterboth--- a/nix/rsjsonnet.nix
+++ b/nix/rsjsonnet.nix
@@ -5,16 +5,16 @@
}:
rustPlatform.buildRustPackage rec {
pname = "rsjsonnet";
- version = "0.1.1";
+ version = "0.4.0";
src = fetchFromGitHub {
owner = "eduardosm";
repo = pname;
rev = "v${version}";
- hash = "sha256-C6hZYGllKrKKMwMwss6PK2UD5Zb7bk2v8DrGpWnwP/A=";
+ hash = "sha256-Oas/fll5YerHAMI91fTEQqe6praYh4Ro8idsdvzldpA=";
};
- cargoHash = "sha256-TsUN9oUu6S1l9oTaR6nET1ZdRvMrR29bkP3VEDre8aE=";
+ cargoHash = "sha256-jH2BOvD0Iss34hODhLFHKx5pGMVtkZir7E1bYwjSa8E=";
nativeBuildInputs = [makeWrapper];
nix/sjsonnet.nixdiffbeforeafterboth--- a/nix/sjsonnet.nix
+++ b/nix/sjsonnet.nix
@@ -5,17 +5,17 @@
{
stdenv,
fetchurl,
- jdk21_headless,
+ jdk25_headless,
makeWrapper,
- java ? jdk21_headless,
+ java ? jdk25_headless,
}:
stdenv.mkDerivation rec {
pname = "sjsonnet";
- version = "0.4.10";
+ version = "0.6.0";
src = fetchurl {
url = "https://github.com/databricks/${pname}/releases/download/${version}/${pname}-${version}.jar";
- hash = "sha256-zKlmh+jXm23x78CKwna8fGHNqziWuPipSbWTPUCADrY=";
+ hash = "sha256-HQovfF/hX664apg9Pl9SdrK03b8rmZ9IjHpf7uNY8FM=";
};
unpackPhase = "true";