diff --git a/Cargo.lock b/Cargo.lock index 2ae16ade3..6e73b4be8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -409,7 +409,7 @@ dependencies = [ "send_wrapper", "serde", "serde_json", - "serde_yaml_ng", + "serde_norway", "serial_test", "sha1", "sha2 0.11.0", @@ -5099,25 +5099,25 @@ dependencies = [ ] [[package]] -name = "serde_spanned" -version = "1.1.1" +name = "serde_norway" +version = "0.9.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" +checksum = "e408f29489b5fd500fab51ff1484fc859bb655f32c671f307dcd733b72e8168c" dependencies = [ - "serde_core", + "indexmap", + "itoa", + "ryu", + "serde", + "unsafe-libyaml-norway", ] [[package]] -name = "serde_yaml_ng" -version = "0.10.0" +name = "serde_spanned" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4db627b98b36d4203a7b458cf3573730f2bb591b28871d916dfa9efabfd41f" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" dependencies = [ - "indexmap", - "itoa", - "ryu", - "serde", - "unsafe-libyaml", + "serde_core", ] [[package]] @@ -6184,10 +6184,10 @@ dependencies = [ ] [[package]] -name = "unsafe-libyaml" -version = "0.2.11" +name = "unsafe-libyaml-norway" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" +checksum = "b39abd59bf32521c7f2301b52d05a6a2c975b6003521cbd0c6dc1582f0a22104" [[package]] name = "untrusted" diff --git a/Cargo.toml b/Cargo.toml index 554f99397..8f1a9a349 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -42,7 +42,8 @@ anyhow = "1" # Serialization serde = { version = "1", features = ["derive"] } serde_json = "1" -serde_yaml_ng = "0.10" +# Maintained serde/libyaml fork; avoid the archived unsafe-libyaml dependency. +serde_norway = "0.9.42" # JSON processing (jq) - verified embeddable jaq-core = "3.1.1" diff --git a/crates/bashkit-bench/results/bench-mykhailosmin-macos-aarch64-1791857690.json b/crates/bashkit-bench/results/bench-mykhailosmin-macos-aarch64-1791857690.json new file mode 100644 index 000000000..ff577c519 --- /dev/null +++ b/crates/bashkit-bench/results/bench-mykhailosmin-macos-aarch64-1791857690.json @@ -0,0 +1,4842 @@ +{ + "moniker": "mykhailosmin-macos-aarch64", + "timestamp": "1791857690", + "system": { + "hostname": "Mykhailos-Mini.lan", + "os": "macos", + "arch": "aarch64", + "cpus": 12, + "moniker": "mykhailosmin-macos-aarch64" + }, + "iterations": 10, + "warmup": 2, + "prewarm_cases": 3, + "runners": [ + "bashkit", + "bash" + ], + "runner_versions": { + "bash": "/opt/homebrew/bin/bash (GNU Bash 5.3.20(1)-release)" + }, + "results": [ + { + "runner": "bashkit", + "case_name": "startup_empty", + "category": "startup", + "iterations": 10, + "times_ns": [ + 38250, + 32125, + 30791, + 30000, + 29541, + 29542, + 29292, + 28916, + 29167, + 32208 + ], + "mean_ns": 30983.2, + "stddev_ns": 2668.387183300055, + "min_ns": 28916, + "max_ns": 38250, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "startup_empty", + "category": "startup", + "iterations": 10, + "times_ns": [ + 19017084, + 6905708, + 12323541, + 17558208, + 19780375, + 20188833, + 8790625, + 10554375, + 6802583, + 7558125 + ], + "mean_ns": 12947945.7, + "stddev_ns": 5328490.976384009, + "min_ns": 6802583, + "max_ns": 20188833, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "startup_true", + "category": "startup", + "iterations": 10, + "times_ns": [ + 35417, + 32250, + 30959, + 29959, + 29542, + 33834, + 30084, + 29458, + 29375, + 30000 + ], + "mean_ns": 31087.8, + "stddev_ns": 1977.2563718445822, + "min_ns": 29375, + "max_ns": 35417, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "startup_true", + "category": "startup", + "iterations": 10, + "times_ns": [ + 7073625, + 7371000, + 6146917, + 7560791, + 8029000, + 9489250, + 6131292, + 6986333, + 6839750, + 6709500 + ], + "mean_ns": 7233745.8, + "stddev_ns": 935897.7001879852, + "min_ns": 6131292, + "max_ns": 9489250, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "startup_echo", + "category": "startup", + "iterations": 10, + "times_ns": [ + 37959, + 35292, + 33416, + 33333, + 32625, + 32417, + 32416, + 30750, + 29959, + 30292 + ], + "mean_ns": 32845.9, + "stddev_ns": 2288.1528991743535, + "min_ns": 29959, + "max_ns": 37959, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "startup_echo", + "category": "startup", + "iterations": 10, + "times_ns": [ + 10820208, + 7446917, + 7773041, + 9826875, + 9552917, + 6920625, + 7160166, + 7215209, + 8233917, + 7114417 + ], + "mean_ns": 8206429.2, + "stddev_ns": 1302271.8820915085, + "min_ns": 6920625, + "max_ns": 10820208, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "startup_exit", + "category": "startup", + "iterations": 10, + "times_ns": [ + 35500, + 32958, + 32125, + 31083, + 30834, + 30375, + 30500, + 30709, + 30042, + 30250 + ], + "mean_ns": 31437.6, + "stddev_ns": 1602.325385182423, + "min_ns": 30042, + "max_ns": 35500, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "startup_exit", + "category": "startup", + "iterations": 10, + "times_ns": [ + 5508625, + 5757500, + 5187791, + 5707208, + 5511292, + 5545667, + 5679167, + 5575833, + 5505167, + 5621333 + ], + "mean_ns": 5559958.3, + "stddev_ns": 150217.5472074085, + "min_ns": 5187791, + "max_ns": 5757500, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "var_assign_simple", + "category": "variables", + "iterations": 10, + "times_ns": [ + 37083, + 41875, + 38250, + 33375, + 32625, + 32333, + 32458, + 39084, + 32417, + 32417 + ], + "mean_ns": 35191.7, + "stddev_ns": 3371.620709688443, + "min_ns": 32333, + "max_ns": 41875, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "var_assign_simple", + "category": "variables", + "iterations": 10, + "times_ns": [ + 6255375, + 5989208, + 5799042, + 5529042, + 5747292, + 5692875, + 5685375, + 6160625, + 5788333, + 5627667 + ], + "mean_ns": 5827483.4, + "stddev_ns": 222780.11638797572, + "min_ns": 5529042, + "max_ns": 6255375, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "var_assign_many", + "category": "variables", + "iterations": 10, + "times_ns": [ + 50708, + 47500, + 48875, + 45417, + 47792, + 43917, + 44291, + 43333, + 43875, + 43625 + ], + "mean_ns": 45933.3, + "stddev_ns": 2464.067005988271, + "min_ns": 43333, + "max_ns": 50708, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "var_assign_many", + "category": "variables", + "iterations": 10, + "times_ns": [ + 5675667, + 5851959, + 5422250, + 5293916, + 5583083, + 5595916, + 6048000, + 6132125, + 6076000, + 5102375 + ], + "mean_ns": 5678129.1, + "stddev_ns": 330427.036976834, + "min_ns": 5102375, + "max_ns": 6132125, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "var_default", + "category": "variables", + "iterations": 10, + "times_ns": [ + 36667, + 33833, + 32375, + 31791, + 31959, + 31083, + 31083, + 31583, + 31041, + 31250 + ], + "mean_ns": 32266.5, + "stddev_ns": 1671.956653146247, + "min_ns": 31041, + "max_ns": 36667, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "var_default", + "category": "variables", + "iterations": 10, + "times_ns": [ + 5541667, + 5988625, + 7051792, + 6564208, + 6621709, + 5438792, + 5400459, + 6141458, + 5848333, + 6091250 + ], + "mean_ns": 6068829.3, + "stddev_ns": 519585.0845084085, + "min_ns": 5400459, + "max_ns": 7051792, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "var_length", + "category": "variables", + "iterations": 10, + "times_ns": [ + 40541, + 37250, + 34417, + 33541, + 32833, + 33167, + 33084, + 32917, + 50041, + 35166 + ], + "mean_ns": 36295.7, + "stddev_ns": 5135.857534044339, + "min_ns": 32833, + "max_ns": 50041, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "var_length", + "category": "variables", + "iterations": 10, + "times_ns": [ + 5391084, + 6306917, + 5601750, + 6953375, + 5962584, + 6150209, + 6670708, + 6104041, + 6341041, + 7085500 + ], + "mean_ns": 6256720.9, + "stddev_ns": 515043.993602964, + "min_ns": 5391084, + "max_ns": 7085500, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "var_substring", + "category": "variables", + "iterations": 10, + "times_ns": [ + 38875, + 41208, + 34417, + 33459, + 32833, + 32917, + 32542, + 33167, + 32958, + 32584 + ], + "mean_ns": 34496.0, + "stddev_ns": 2866.5754830459286, + "min_ns": 32542, + "max_ns": 41208, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "var_substring", + "category": "variables", + "iterations": 10, + "times_ns": [ + 5670042, + 5584750, + 5176417, + 5315875, + 5215750, + 5384542, + 5154291, + 5301625, + 5257125, + 5462209 + ], + "mean_ns": 5352262.6, + "stddev_ns": 164272.27857018358, + "min_ns": 5154291, + "max_ns": 5670042, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "var_replace", + "category": "variables", + "iterations": 10, + "times_ns": [ + 45208, + 39583, + 37000, + 35708, + 34250, + 34250, + 34250, + 33833, + 33834, + 34375 + ], + "mean_ns": 36229.1, + "stddev_ns": 3455.446699053539, + "min_ns": 33833, + "max_ns": 45208, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "var_replace", + "category": "variables", + "iterations": 10, + "times_ns": [ + 5206417, + 5541667, + 5577709, + 5700625, + 5300042, + 5464792, + 5713333, + 6746709, + 5501042, + 4813458 + ], + "mean_ns": 5556579.4, + "stddev_ns": 470591.33217329875, + "min_ns": 4813458, + "max_ns": 6746709, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "var_nested", + "category": "variables", + "iterations": 10, + "times_ns": [ + 43083, + 36667, + 35042, + 34666, + 34292, + 34458, + 34208, + 34334, + 34375, + 33833 + ], + "mean_ns": 35495.8, + "stddev_ns": 2634.1466094353977, + "min_ns": 33833, + "max_ns": 43083, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "var_nested", + "category": "variables", + "iterations": 10, + "times_ns": [ + 6022875, + 5714042, + 5593166, + 5419500, + 7587459, + 6644166, + 5873334, + 6133042, + 7489458, + 7820250 + ], + "mean_ns": 6429729.2, + "stddev_ns": 850801.5691945802, + "min_ns": 5419500, + "max_ns": 7820250, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "var_export", + "category": "variables", + "iterations": 10, + "times_ns": [ + 39833, + 36708, + 34958, + 34583, + 33583, + 33625, + 33666, + 33375, + 33375, + 33166 + ], + "mean_ns": 34687.2, + "stddev_ns": 1994.8745223697656, + "min_ns": 33166, + "max_ns": 39833, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "var_export", + "category": "variables", + "iterations": 10, + "times_ns": [ + 8662208, + 7739250, + 7410084, + 6391667, + 6423583, + 7134333, + 5600583, + 11050833, + 6472375, + 6372375 + ], + "mean_ns": 7325729.1, + "stddev_ns": 1489190.6723333618, + "min_ns": 5600583, + "max_ns": 11050833, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "arith_basic", + "category": "arithmetic", + "iterations": 10, + "times_ns": [ + 36834, + 34083, + 32208, + 31583, + 31000, + 31042, + 30875, + 30959, + 30916, + 30584 + ], + "mean_ns": 32008.4, + "stddev_ns": 1880.6933402338618, + "min_ns": 30584, + "max_ns": 36834, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "arith_basic", + "category": "arithmetic", + "iterations": 10, + "times_ns": [ + 6699959, + 6086083, + 6007334, + 5969208, + 5872042, + 7497875, + 5672334, + 5548042, + 7789708, + 6125583 + ], + "mean_ns": 6326816.8, + "stddev_ns": 722545.6548640784, + "min_ns": 5548042, + "max_ns": 7789708, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "arith_complex", + "category": "arithmetic", + "iterations": 10, + "times_ns": [ + 38542, + 36084, + 33833, + 33167, + 32375, + 31750, + 32167, + 32500, + 31959, + 31042 + ], + "mean_ns": 33341.9, + "stddev_ns": 2181.5613880888154, + "min_ns": 31042, + "max_ns": 38542, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "arith_complex", + "category": "arithmetic", + "iterations": 10, + "times_ns": [ + 5853792, + 6405584, + 6982250, + 6815166, + 5414750, + 8176292, + 5736375, + 5265542, + 5371167, + 5817417 + ], + "mean_ns": 6183833.5, + "stddev_ns": 871418.2057476479, + "min_ns": 5265542, + "max_ns": 8176292, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "arith_variables", + "category": "arithmetic", + "iterations": 10, + "times_ns": [ + 41291, + 38250, + 36583, + 35125, + 35500, + 34375, + 34791, + 34417, + 34416, + 34208 + ], + "mean_ns": 35895.6, + "stddev_ns": 2159.449383523495, + "min_ns": 34208, + "max_ns": 41291, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "arith_variables", + "category": "arithmetic", + "iterations": 10, + "times_ns": [ + 5007375, + 7264709, + 5436167, + 6283083, + 6168125, + 5981666, + 6113791, + 5821667, + 5656750, + 6308667 + ], + "mean_ns": 6004200.0, + "stddev_ns": 571761.2756408046, + "min_ns": 5007375, + "max_ns": 7264709, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "arith_increment", + "category": "arithmetic", + "iterations": 10, + "times_ns": [ + 39292, + 38541, + 37375, + 34209, + 33792, + 33750, + 33166, + 33708, + 34167, + 33542 + ], + "mean_ns": 35154.2, + "stddev_ns": 2187.754821729345, + "min_ns": 33166, + "max_ns": 39292, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "arith_increment", + "category": "arithmetic", + "iterations": 10, + "times_ns": [ + 7104208, + 6378375, + 5604041, + 6879250, + 6341584, + 5617333, + 6467916, + 7256750, + 5997208, + 6488042 + ], + "mean_ns": 6413470.7, + "stddev_ns": 536879.8039611939, + "min_ns": 5604041, + "max_ns": 7256750, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "arith_modulo", + "category": "arithmetic", + "iterations": 10, + "times_ns": [ + 36750, + 33916, + 32125, + 31583, + 31416, + 31167, + 31709, + 31000, + 31333, + 31250 + ], + "mean_ns": 32224.9, + "stddev_ns": 1704.2383900147306, + "min_ns": 31000, + "max_ns": 36750, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "arith_modulo", + "category": "arithmetic", + "iterations": 10, + "times_ns": [ + 5457833, + 6759250, + 6197834, + 6953208, + 5808875, + 5930000, + 5629417, + 6691959, + 6119542, + 6050416 + ], + "mean_ns": 6159833.4, + "stddev_ns": 472978.02165305737, + "min_ns": 5457833, + "max_ns": 6953208, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "arith_loop_sum", + "category": "arithmetic", + "iterations": 10, + "times_ns": [ + 78166, + 60333, + 61166, + 55958, + 56875, + 56542, + 53584, + 54750, + 53416, + 53042 + ], + "mean_ns": 58383.2, + "stddev_ns": 7098.486511926328, + "min_ns": 53042, + "max_ns": 78166, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "arith_loop_sum", + "category": "arithmetic", + "iterations": 10, + "times_ns": [ + 5592209, + 5260500, + 6009083, + 5457458, + 5685791, + 5700709, + 5355625, + 6036583, + 5800042, + 5801750 + ], + "mean_ns": 5669975.0, + "stddev_ns": 245472.84681283997, + "min_ns": 5260500, + "max_ns": 6036583, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "ctrl_if_simple", + "category": "control", + "iterations": 10, + "times_ns": [ + 38958, + 35792, + 34542, + 33708, + 33375, + 33250, + 33500, + 33166, + 33000, + 33125 + ], + "mean_ns": 34241.6, + "stddev_ns": 1767.8420857078836, + "min_ns": 33000, + "max_ns": 38958, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "ctrl_if_simple", + "category": "control", + "iterations": 10, + "times_ns": [ + 5467958, + 5971042, + 5882542, + 5444458, + 5478250, + 6073875, + 7042500, + 5400458, + 5268084, + 6008375 + ], + "mean_ns": 5803754.2, + "stddev_ns": 498087.84571093484, + "min_ns": 5268084, + "max_ns": 7042500, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "ctrl_if_else", + "category": "control", + "iterations": 10, + "times_ns": [ + 39625, + 36625, + 34875, + 35708, + 34333, + 34083, + 34542, + 33958, + 34542, + 33500 + ], + "mean_ns": 35179.1, + "stddev_ns": 1710.802177342547, + "min_ns": 33500, + "max_ns": 39625, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "ctrl_if_else", + "category": "control", + "iterations": 10, + "times_ns": [ + 5212083, + 5056875, + 5120958, + 4805000, + 5408959, + 5387250, + 5128625, + 5010875, + 5146792, + 5018458 + ], + "mean_ns": 5129587.5, + "stddev_ns": 169912.29272024435, + "min_ns": 4805000, + "max_ns": 5408959, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "ctrl_for_list", + "category": "control", + "iterations": 10, + "times_ns": [ + 51334, + 48083, + 47000, + 46542, + 46375, + 46292, + 45875, + 45792, + 45792, + 46125 + ], + "mean_ns": 46921.0, + "stddev_ns": 1610.7596344582266, + "min_ns": 45792, + "max_ns": 51334, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "ctrl_for_list", + "category": "control", + "iterations": 10, + "times_ns": [ + 5264916, + 10302417, + 7516958, + 5140792, + 5645042, + 5065917, + 5875709, + 5261500, + 5218625, + 5286917 + ], + "mean_ns": 6057879.3, + "stddev_ns": 1572749.5460859654, + "min_ns": 5065917, + "max_ns": 10302417, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "ctrl_for_range", + "category": "control", + "iterations": 10, + "times_ns": [ + 57625, + 53750, + 51833, + 50833, + 50167, + 49958, + 50083, + 107375, + 74167, + 56834 + ], + "mean_ns": 60262.5, + "stddev_ns": 17163.165362193537, + "min_ns": 49958, + "max_ns": 107375, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "ctrl_for_range", + "category": "control", + "iterations": 10, + "times_ns": [ + 20571250, + 15558500, + 12778083, + 13768666, + 8159292, + 7125041, + 7808000, + 9896583, + 10700459, + 10349541 + ], + "mean_ns": 11671541.5, + "stddev_ns": 3920590.561572561, + "min_ns": 7125041, + "max_ns": 20571250, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "ctrl_while", + "category": "control", + "iterations": 10, + "times_ns": [ + 79292, + 78458, + 73667, + 73625, + 71417, + 71792, + 71250, + 70000, + 71250, + 70833 + ], + "mean_ns": 73158.4, + "stddev_ns": 3061.8569267684597, + "min_ns": 70000, + "max_ns": 79292, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "ctrl_while", + "category": "control", + "iterations": 10, + "times_ns": [ + 8733708, + 9618959, + 9781500, + 10074417, + 13617875, + 10176500, + 10927917, + 9069667, + 10565125, + 8142833 + ], + "mean_ns": 10070850.1, + "stddev_ns": 1427127.43625266, + "min_ns": 8142833, + "max_ns": 13617875, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "ctrl_case", + "category": "control", + "iterations": 10, + "times_ns": [ + 43666, + 39500, + 37541, + 36750, + 36000, + 35875, + 35584, + 36291, + 36000, + 35625 + ], + "mean_ns": 37283.2, + "stddev_ns": 2406.2980197805928, + "min_ns": 35584, + "max_ns": 43666, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "ctrl_case", + "category": "control", + "iterations": 10, + "times_ns": [ + 6651500, + 8437041, + 9846333, + 11537500, + 15228458, + 19786417, + 10508791, + 14506708, + 16762416, + 15071417 + ], + "mean_ns": 12833658.1, + "stddev_ns": 3884278.403837152, + "min_ns": 6651500, + "max_ns": 19786417, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "ctrl_function", + "category": "control", + "iterations": 10, + "times_ns": [ + 42459, + 41292, + 37750, + 36958, + 36833, + 36083, + 36125, + 35875, + 36416, + 35708 + ], + "mean_ns": 37549.9, + "stddev_ns": 2251.058793101593, + "min_ns": 35708, + "max_ns": 42459, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "ctrl_function", + "category": "control", + "iterations": 10, + "times_ns": [ + 6611708, + 11208375, + 12391666, + 7920792, + 8340458, + 7659208, + 11673167, + 13158542, + 8529625, + 11536583 + ], + "mean_ns": 9903012.4, + "stddev_ns": 2200503.37887417, + "min_ns": 6611708, + "max_ns": 13158542, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "ctrl_function_return", + "category": "control", + "iterations": 10, + "times_ns": [ + 123917, + 115167, + 109750, + 108625, + 120833, + 164375, + 159542, + 117167, + 127250, + 170583 + ], + "mean_ns": 131720.9, + "stddev_ns": 22476.63562657899, + "min_ns": 108625, + "max_ns": 170583, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "ctrl_function_return", + "category": "control", + "iterations": 10, + "times_ns": [ + 8445541, + 10213625, + 11817875, + 8527667, + 8481917, + 10014208, + 7387250, + 15028958, + 8787458, + 7854875 + ], + "mean_ns": 9655937.4, + "stddev_ns": 2173570.7955444744, + "min_ns": 7387250, + "max_ns": 15028958, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "ctrl_nested_loops", + "category": "control", + "iterations": 10, + "times_ns": [ + 69500, + 63834, + 61375, + 61500, + 60167, + 59625, + 60292, + 59625, + 61250, + 59708 + ], + "mean_ns": 61687.6, + "stddev_ns": 2874.9332235723323, + "min_ns": 59625, + "max_ns": 69500, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "ctrl_nested_loops", + "category": "control", + "iterations": 10, + "times_ns": [ + 9893000, + 8658208, + 13266958, + 12711333, + 7331292, + 14404958, + 12449333, + 9357334, + 9010083, + 9888792 + ], + "mean_ns": 10697129.1, + "stddev_ns": 2211481.8143243887, + "min_ns": 7331292, + "max_ns": 14404958, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "str_concat", + "category": "strings", + "iterations": 10, + "times_ns": [ + 40000, + 279291, + 39833, + 78333, + 78083, + 45834, + 102458, + 54542, + 42333, + 37458 + ], + "mean_ns": 79816.5, + "stddev_ns": 69631.04147038159, + "min_ns": 37458, + "max_ns": 279291, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "str_concat", + "category": "strings", + "iterations": 10, + "times_ns": [ + 8672000, + 6856042, + 7431250, + 8810041, + 7797875, + 7477542, + 7811458, + 11892208, + 7909542, + 9166250 + ], + "mean_ns": 8382420.8, + "stddev_ns": 1347010.764541234, + "min_ns": 6856042, + "max_ns": 11892208, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "str_printf", + "category": "strings", + "iterations": 10, + "times_ns": [ + 38458, + 35167, + 32750, + 32167, + 31583, + 31541, + 31250, + 31125, + 31709, + 30750 + ], + "mean_ns": 32650.0, + "stddev_ns": 2268.4999008155146, + "min_ns": 30750, + "max_ns": 38458, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "str_printf", + "category": "strings", + "iterations": 10, + "times_ns": [ + 9540292, + 11162500, + 7204834, + 6565791, + 6881416, + 8152083, + 7114625, + 7031584, + 7439084, + 7487667 + ], + "mean_ns": 7857987.6, + "stddev_ns": 1357743.149735413, + "min_ns": 6565791, + "max_ns": 11162500, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "str_printf_pad", + "category": "strings", + "iterations": 10, + "times_ns": [ + 37667, + 34625, + 33417, + 32208, + 31750, + 31084, + 32250, + 31709, + 31375, + 139792 + ], + "mean_ns": 43587.7, + "stddev_ns": 32122.987688102734, + "min_ns": 31084, + "max_ns": 139792, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "str_printf_pad", + "category": "strings", + "iterations": 10, + "times_ns": [ + 10769667, + 8376833, + 7138458, + 7001417, + 6357042, + 6272792, + 16955875, + 9428208, + 8221792, + 7054875 + ], + "mean_ns": 8757695.9, + "stddev_ns": 3044403.665522509, + "min_ns": 6272792, + "max_ns": 16955875, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "str_echo_escape", + "category": "strings", + "iterations": 10, + "times_ns": [ + 37042, + 33292, + 32084, + 31625, + 31375, + 32083, + 31500, + 31250, + 30875, + 31042 + ], + "mean_ns": 32216.8, + "stddev_ns": 1736.7236279846024, + "min_ns": 30875, + "max_ns": 37042, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "str_echo_escape", + "category": "strings", + "iterations": 10, + "times_ns": [ + 6969000, + 10815334, + 6412375, + 8561917, + 6390125, + 6235792, + 8776791, + 6779417, + 6105167, + 6661333 + ], + "mean_ns": 7370725.1, + "stddev_ns": 1450699.0495828865, + "min_ns": 6105167, + "max_ns": 10815334, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "str_prefix_strip", + "category": "strings", + "iterations": 10, + "times_ns": [ + 83250, + 78875, + 76834, + 75542, + 74166, + 86000, + 83500, + 178250, + 93500, + 79167 + ], + "mean_ns": 90908.4, + "stddev_ns": 29614.33011972413, + "min_ns": 74166, + "max_ns": 178250, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "str_prefix_strip", + "category": "strings", + "iterations": 10, + "times_ns": [ + 10671709, + 7315458, + 9582792, + 8927584, + 9531500, + 12267917, + 11252708, + 8669250, + 9454042, + 7387625 + ], + "mean_ns": 9506058.5, + "stddev_ns": 1495593.5681723328, + "min_ns": 7315458, + "max_ns": 12267917, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "str_suffix_strip", + "category": "strings", + "iterations": 10, + "times_ns": [ + 99917, + 155375, + 54042, + 40250, + 37084, + 35125, + 35083, + 34833, + 33833, + 33208 + ], + "mean_ns": 55875.0, + "stddev_ns": 38400.29705614268, + "min_ns": 33208, + "max_ns": 155375, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "str_suffix_strip", + "category": "strings", + "iterations": 10, + "times_ns": [ + 10056666, + 6801708, + 8705750, + 9841583, + 7532583, + 6595625, + 5857500, + 6245625, + 12216708, + 35335250 + ], + "mean_ns": 10918899.8, + "stddev_ns": 8361883.364049702, + "min_ns": 5857500, + "max_ns": 35335250, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "str_uppercase", + "category": "strings", + "iterations": 10, + "times_ns": [ + 38208, + 35208, + 34958, + 33084, + 32459, + 32042, + 32167, + 31667, + 32042, + 31500 + ], + "mean_ns": 33333.5, + "stddev_ns": 2039.022130826441, + "min_ns": 31500, + "max_ns": 38208, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "str_uppercase", + "category": "strings", + "iterations": 10, + "times_ns": [ + 8581209, + 5610917, + 5532291, + 5231292, + 5337666, + 5916500, + 7006542, + 5581042, + 5298167, + 5006667 + ], + "mean_ns": 5910229.3, + "stddev_ns": 1032312.5778848234, + "min_ns": 5006667, + "max_ns": 8581209, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "str_lowercase", + "category": "strings", + "iterations": 10, + "times_ns": [ + 39750, + 35958, + 33875, + 33459, + 32417, + 32625, + 32625, + 32417, + 32125, + 32084 + ], + "mean_ns": 33733.5, + "stddev_ns": 2290.7216439366875, + "min_ns": 32084, + "max_ns": 39750, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "str_lowercase", + "category": "strings", + "iterations": 10, + "times_ns": [ + 5607500, + 5330041, + 4929541, + 5046459, + 5294708, + 5450209, + 5392334, + 5211375, + 5074458, + 5668292 + ], + "mean_ns": 5300491.7, + "stddev_ns": 228573.42398190126, + "min_ns": 4929541, + "max_ns": 5668292, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "arr_create", + "category": "arrays", + "iterations": 10, + "times_ns": [ + 47750, + 107959, + 46208, + 39333, + 37458, + 35792, + 35833, + 35333, + 34625, + 34541 + ], + "mean_ns": 45483.2, + "stddev_ns": 21304.51272289512, + "min_ns": 34541, + "max_ns": 107959, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "arr_create", + "category": "arrays", + "iterations": 10, + "times_ns": [ + 6863084, + 6871166, + 7863708, + 9192500, + 8377333, + 8054000, + 7952417, + 12215458, + 8528959, + 6140583 + ], + "mean_ns": 8205920.8, + "stddev_ns": 1588657.227952638, + "min_ns": 6140583, + "max_ns": 12215458, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "arr_all", + "category": "arrays", + "iterations": 10, + "times_ns": [ + 43333, + 38167, + 195542, + 37541, + 38209, + 137416, + 45375, + 38417, + 104541, + 58291 + ], + "mean_ns": 73683.2, + "stddev_ns": 51858.2994453154, + "min_ns": 37541, + "max_ns": 195542, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "arr_all", + "category": "arrays", + "iterations": 10, + "times_ns": [ + 9053791, + 7160333, + 5911833, + 5982416, + 11786250, + 6729667, + 8895792, + 6343000, + 7651000, + 7999500 + ], + "mean_ns": 7751358.2, + "stddev_ns": 1710196.008155077, + "min_ns": 5911833, + "max_ns": 11786250, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "arr_length", + "category": "arrays", + "iterations": 10, + "times_ns": [ + 46709, + 43041, + 199583, + 136292, + 51458, + 48791, + 42250, + 41041, + 40042, + 39834 + ], + "mean_ns": 68904.1, + "stddev_ns": 51626.9449928039, + "min_ns": 39834, + "max_ns": 199583, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "arr_length", + "category": "arrays", + "iterations": 10, + "times_ns": [ + 22829542, + 18646792, + 41856292, + 42055292, + 25402250, + 27311000, + 12140042, + 12827667, + 34900125, + 16698500 + ], + "mean_ns": 25466750.2, + "stddev_ns": 10506603.92932147, + "min_ns": 12140042, + "max_ns": 42055292, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "arr_iterate", + "category": "arrays", + "iterations": 10, + "times_ns": [ + 47834, + 44084, + 42625, + 41125, + 40375, + 39750, + 40000, + 247708, + 196875, + 196750 + ], + "mean_ns": 93712.6, + "stddev_ns": 79723.84673885223, + "min_ns": 39750, + "max_ns": 247708, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "arr_iterate", + "category": "arrays", + "iterations": 10, + "times_ns": [ + 7494125, + 6966875, + 5879500, + 7124708, + 6225625, + 5478542, + 6420000, + 6094209, + 6693875, + 6664542 + ], + "mean_ns": 6504200.1, + "stddev_ns": 577559.2364054876, + "min_ns": 5478542, + "max_ns": 7494125, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "arr_slice", + "category": "arrays", + "iterations": 10, + "times_ns": [ + 43125, + 40125, + 38375, + 37084, + 37042, + 36875, + 36209, + 36542, + 36250, + 35792 + ], + "mean_ns": 37741.9, + "stddev_ns": 2157.5303682683125, + "min_ns": 35792, + "max_ns": 43125, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "arr_slice", + "category": "arrays", + "iterations": 10, + "times_ns": [ + 5550417, + 7209750, + 7700292, + 7516584, + 6858209, + 7109083, + 5286333, + 5574334, + 5041875, + 5556541 + ], + "mean_ns": 6340341.8, + "stddev_ns": 973143.0399359385, + "min_ns": 5041875, + "max_ns": 7700292, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "arr_assign_index", + "category": "arrays", + "iterations": 10, + "times_ns": [ + 101209, + 55500, + 41750, + 38292, + 36834, + 36583, + 36208, + 35291, + 35625, + 35333 + ], + "mean_ns": 45262.5, + "stddev_ns": 19532.04363731558, + "min_ns": 35291, + "max_ns": 101209, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "arr_assign_index", + "category": "arrays", + "iterations": 10, + "times_ns": [ + 5752083, + 5520042, + 5296125, + 5226292, + 4867000, + 5228209, + 4791000, + 4925750, + 5795042, + 5622375 + ], + "mean_ns": 5302391.8, + "stddev_ns": 346261.0909472215, + "min_ns": 4791000, + "max_ns": 5795042, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "pipe_simple", + "category": "pipes", + "iterations": 10, + "times_ns": [ + 72417, + 50625, + 45292, + 42541, + 41209, + 53625, + 42959, + 43375, + 51458, + 74875 + ], + "mean_ns": 51837.6, + "stddev_ns": 11626.37829420667, + "min_ns": 41209, + "max_ns": 74875, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "pipe_simple", + "category": "pipes", + "iterations": 10, + "times_ns": [ + 8953375, + 8926250, + 9077459, + 9961917, + 8163750, + 9706042, + 9370583, + 8449458, + 9098375, + 8769583 + ], + "mean_ns": 9047679.2, + "stddev_ns": 511582.97078769153, + "min_ns": 8163750, + "max_ns": 9961917, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "pipe_multi", + "category": "pipes", + "iterations": 10, + "times_ns": [ + 72125, + 68833, + 66792, + 66916, + 65375, + 69334, + 65458, + 67416, + 65083, + 65667 + ], + "mean_ns": 67299.9, + "stddev_ns": 2118.18820929586, + "min_ns": 65083, + "max_ns": 72125, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "pipe_multi", + "category": "pipes", + "iterations": 10, + "times_ns": [ + 9304709, + 9512500, + 9513834, + 8857208, + 8757708, + 10696958, + 9142542, + 8581833, + 8881667, + 8569042 + ], + "mean_ns": 9181800.1, + "stddev_ns": 603546.785364225, + "min_ns": 8569042, + "max_ns": 10696958, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "pipe_command_subst", + "category": "pipes", + "iterations": 10, + "times_ns": [ + 44125, + 40916, + 38791, + 38625, + 37875, + 38167, + 37833, + 37500, + 37625, + 37375 + ], + "mean_ns": 38883.2, + "stddev_ns": 2002.1792527144019, + "min_ns": 37375, + "max_ns": 44125, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "pipe_command_subst", + "category": "pipes", + "iterations": 10, + "times_ns": [ + 6312083, + 5919917, + 5868083, + 5743375, + 5704708, + 5800541, + 5376583, + 5404917, + 6338750, + 5723083 + ], + "mean_ns": 5819204.0, + "stddev_ns": 303543.0798493024, + "min_ns": 5376583, + "max_ns": 6338750, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "pipe_heredoc", + "category": "pipes", + "iterations": 10, + "times_ns": [ + 40375, + 38333, + 36500, + 35708, + 35250, + 35125, + 35208, + 34792, + 34458, + 34042 + ], + "mean_ns": 35979.1, + "stddev_ns": 1858.5099111922973, + "min_ns": 34042, + "max_ns": 40375, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "pipe_heredoc", + "category": "pipes", + "iterations": 10, + "times_ns": [ + 10051667, + 8744041, + 9190625, + 8316625, + 7922125, + 7749959, + 7557584, + 7339917, + 7633083, + 7865667 + ], + "mean_ns": 8237129.3, + "stddev_ns": 810627.5755033318, + "min_ns": 7339917, + "max_ns": 10051667, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "pipe_herestring", + "category": "pipes", + "iterations": 10, + "times_ns": [ + 40083, + 37125, + 34917, + 34959, + 34542, + 34125, + 34542, + 93334, + 45625, + 38666 + ], + "mean_ns": 42791.8, + "stddev_ns": 17186.071399828408, + "min_ns": 34125, + "max_ns": 93334, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "pipe_herestring", + "category": "pipes", + "iterations": 10, + "times_ns": [ + 7972542, + 7590792, + 7201875, + 7129667, + 7732792, + 7340250, + 7618542, + 7626458, + 7364958, + 7515875 + ], + "mean_ns": 7509375.1, + "stddev_ns": 241853.18216283614, + "min_ns": 7129667, + "max_ns": 7972542, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "pipe_discard", + "category": "pipes", + "iterations": 10, + "times_ns": [ + 43750, + 37917, + 37209, + 36250, + 35958, + 38875, + 35833, + 35917, + 36125, + 35666 + ], + "mean_ns": 37350.0, + "stddev_ns": 2355.120336628258, + "min_ns": 35666, + "max_ns": 43750, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "pipe_discard", + "category": "pipes", + "iterations": 10, + "times_ns": [ + 7998792, + 6332875, + 6481542, + 5914458, + 7081500, + 6406667, + 5890292, + 6407875, + 7071000, + 6171459 + ], + "mean_ns": 6575646.0, + "stddev_ns": 610028.6494678754, + "min_ns": 5890292, + "max_ns": 7998792, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "tool_grep_simple", + "category": "tools", + "iterations": 10, + "times_ns": [ + 61875, + 49042, + 50375, + 44041, + 42792, + 42417, + 42084, + 44500, + 42084, + 41833 + ], + "mean_ns": 46104.3, + "stddev_ns": 5979.5657375766, + "min_ns": 41833, + "max_ns": 61875, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "tool_grep_simple", + "category": "tools", + "iterations": 10, + "times_ns": [ + 7287458, + 7350750, + 9066666, + 7954334, + 7880375, + 7744750, + 8660958, + 11300667, + 10310667, + 15493667 + ], + "mean_ns": 9305029.2, + "stddev_ns": 2407136.2485826514, + "min_ns": 7287458, + "max_ns": 15493667, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "tool_grep_case", + "category": "tools", + "iterations": 10, + "times_ns": [ + 85042, + 82125, + 77709, + 75042, + 73208, + 74416, + 73250, + 73750, + 72834, + 71958 + ], + "mean_ns": 75933.4, + "stddev_ns": 4151.603526349789, + "min_ns": 71958, + "max_ns": 85042, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "tool_grep_case", + "category": "tools", + "iterations": 10, + "times_ns": [ + 18401958, + 15173958, + 18454250, + 16788500, + 12565208, + 11470458, + 10048875, + 10547709, + 9978000, + 8880459 + ], + "mean_ns": 13230937.5, + "stddev_ns": 3476061.167772807, + "min_ns": 8880459, + "max_ns": 18454250, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "tool_grep_count", + "category": "tools", + "iterations": 10, + "times_ns": [ + 51292, + 45709, + 45458, + 43708, + 43458, + 42459, + 42375, + 42292, + 42208, + 42333 + ], + "mean_ns": 44129.2, + "stddev_ns": 2689.8798040061192, + "min_ns": 42208, + "max_ns": 51292, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "tool_grep_count", + "category": "tools", + "iterations": 10, + "times_ns": [ + 8732042, + 9533625, + 8658041, + 8704292, + 8084250, + 8272250, + 8788458, + 8790000, + 8682250, + 9298125 + ], + "mean_ns": 8754333.3, + "stddev_ns": 400540.4792694616, + "min_ns": 8084250, + "max_ns": 9533625, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "tool_grep_invert", + "category": "tools", + "iterations": 10, + "times_ns": [ + 48125, + 44083, + 42458, + 41417, + 48667, + 41041, + 40834, + 40709, + 40750, + 56958 + ], + "mean_ns": 44504.2, + "stddev_ns": 5033.81626204215, + "min_ns": 40709, + "max_ns": 56958, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "tool_grep_invert", + "category": "tools", + "iterations": 10, + "times_ns": [ + 8586625, + 8055333, + 7973042, + 8549458, + 7498542, + 8089209, + 8572291, + 8776000, + 8165125, + 9274375 + ], + "mean_ns": 8354000.0, + "stddev_ns": 472976.8203007416, + "min_ns": 7498542, + "max_ns": 9274375, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "tool_grep_regex", + "category": "tools", + "iterations": 10, + "times_ns": [ + 86000, + 61375, + 55167, + 54833, + 52416, + 51084, + 51792, + 51791, + 51292, + 50041 + ], + "mean_ns": 56579.1, + "stddev_ns": 10284.468080071036, + "min_ns": 50041, + "max_ns": 86000, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "tool_grep_regex", + "category": "tools", + "iterations": 10, + "times_ns": [ + 10157000, + 10996083, + 8305542, + 9170083, + 8539375, + 8818375, + 7976708, + 8889958, + 8590584, + 8383333 + ], + "mean_ns": 8982704.1, + "stddev_ns": 876555.9561258425, + "min_ns": 7976708, + "max_ns": 10996083, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "tool_sed_replace", + "category": "tools", + "iterations": 10, + "times_ns": [ + 51542, + 45292, + 42834, + 42125, + 40708, + 39209, + 39084, + 40209, + 41584, + 123416 + ], + "mean_ns": 50600.3, + "stddev_ns": 24521.122327699442, + "min_ns": 39084, + "max_ns": 123416, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "tool_sed_replace", + "category": "tools", + "iterations": 10, + "times_ns": [ + 8236917, + 8450833, + 8868750, + 8371833, + 8591583, + 8194708, + 7938500, + 9975583, + 8517875, + 12122875 + ], + "mean_ns": 8926945.7, + "stddev_ns": 1188316.791347076, + "min_ns": 7938500, + "max_ns": 12122875, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "tool_sed_global", + "category": "tools", + "iterations": 10, + "times_ns": [ + 44500, + 41125, + 41625, + 140375, + 62875, + 46541, + 117292, + 129416, + 57292, + 44792 + ], + "mean_ns": 72583.3, + "stddev_ns": 37868.03881916781, + "min_ns": 41125, + "max_ns": 140375, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "tool_sed_global", + "category": "tools", + "iterations": 10, + "times_ns": [ + 9081042, + 9001208, + 8038166, + 8896458, + 8364791, + 8106792, + 8188125, + 8048792, + 9232667, + 9442792 + ], + "mean_ns": 8640083.3, + "stddev_ns": 515990.49535297643, + "min_ns": 8038166, + "max_ns": 9442792, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "tool_sed_delete", + "category": "tools", + "iterations": 10, + "times_ns": [ + 44458, + 41000, + 39958, + 39791, + 39292, + 39541, + 40083, + 39750, + 38167, + 83833 + ], + "mean_ns": 44587.3, + "stddev_ns": 13175.58009387063, + "min_ns": 38167, + "max_ns": 83833, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "tool_sed_delete", + "category": "tools", + "iterations": 10, + "times_ns": [ + 9430667, + 9255750, + 9039375, + 8229917, + 8362292, + 9470417, + 8484959, + 8613833, + 8654458, + 11483708 + ], + "mean_ns": 9102537.6, + "stddev_ns": 898380.8370906183, + "min_ns": 8229917, + "max_ns": 11483708, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "tool_sed_lines", + "category": "tools", + "iterations": 10, + "times_ns": [ + 43542, + 40209, + 39083, + 38834, + 38417, + 38708, + 38417, + 38334, + 38208, + 38125 + ], + "mean_ns": 39187.7, + "stddev_ns": 1561.2515524411817, + "min_ns": 38125, + "max_ns": 43542, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "tool_sed_lines", + "category": "tools", + "iterations": 10, + "times_ns": [ + 8610542, + 7913000, + 9071542, + 8298792, + 8639334, + 8400000, + 8229541, + 8524209, + 8452875, + 8591875 + ], + "mean_ns": 8473171.0, + "stddev_ns": 288191.84401193593, + "min_ns": 7913000, + "max_ns": 9071542, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "tool_sed_backrefs", + "category": "tools", + "iterations": 10, + "times_ns": [ + 56625, + 52459, + 50084, + 48750, + 48459, + 47583, + 47833, + 50750, + 47375, + 47625 + ], + "mean_ns": 49754.3, + "stddev_ns": 2773.2541553200635, + "min_ns": 47375, + "max_ns": 56625, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "tool_sed_backrefs", + "category": "tools", + "iterations": 10, + "times_ns": [ + 8497250, + 8051250, + 8762833, + 8554833, + 7883584, + 9771625, + 9446708, + 9120125, + 9040542, + 21688500 + ], + "mean_ns": 10081725.0, + "stddev_ns": 3908471.0564984614, + "min_ns": 7883584, + "max_ns": 21688500, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "tool_awk_print", + "category": "tools", + "iterations": 10, + "times_ns": [ + 155416, + 55000, + 47125, + 43250, + 41250, + 40958, + 41291, + 40583, + 40417, + 40541 + ], + "mean_ns": 54583.1, + "stddev_ns": 33890.21470705076, + "min_ns": 40417, + "max_ns": 155416, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "tool_awk_print", + "category": "tools", + "iterations": 10, + "times_ns": [ + 11923125, + 9170125, + 9173083, + 16532917, + 9453333, + 10134750, + 9116875, + 8556583, + 8345750, + 8623958 + ], + "mean_ns": 10103049.9, + "stddev_ns": 2354869.532209691, + "min_ns": 8345750, + "max_ns": 16532917, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "tool_awk_sum", + "category": "tools", + "iterations": 10, + "times_ns": [ + 67000, + 46709, + 45208, + 43792, + 44666, + 43167, + 42208, + 43833, + 42833, + 42750 + ], + "mean_ns": 46216.6, + "stddev_ns": 7042.790926898228, + "min_ns": 42208, + "max_ns": 67000, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "tool_awk_sum", + "category": "tools", + "iterations": 10, + "times_ns": [ + 8088500, + 8340459, + 8179333, + 7804250, + 7644208, + 8531417, + 8087250, + 8104833, + 8338792, + 8532542 + ], + "mean_ns": 8165158.4, + "stddev_ns": 273390.83630114596, + "min_ns": 7644208, + "max_ns": 8532542, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "tool_awk_pattern", + "category": "tools", + "iterations": 10, + "times_ns": [ + 79375, + 121625, + 66416, + 57375, + 53375, + 51750, + 52875, + 50625, + 49250, + 77625 + ], + "mean_ns": 66029.1, + "stddev_ns": 21294.12821155165, + "min_ns": 49250, + "max_ns": 121625, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "tool_awk_pattern", + "category": "tools", + "iterations": 10, + "times_ns": [ + 8627208, + 8517333, + 8340792, + 7610458, + 7686750, + 7763083, + 7951000, + 8677250, + 8065334, + 8198958 + ], + "mean_ns": 8143816.6, + "stddev_ns": 371651.70900110225, + "min_ns": 7610458, + "max_ns": 8677250, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "tool_awk_fieldsep", + "category": "tools", + "iterations": 10, + "times_ns": [ + 59917, + 47000, + 44042, + 42625, + 42166, + 42000, + 41000, + 41291, + 41333, + 41250 + ], + "mean_ns": 44262.4, + "stddev_ns": 5494.837271475835, + "min_ns": 41000, + "max_ns": 59917, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "tool_awk_fieldsep", + "category": "tools", + "iterations": 10, + "times_ns": [ + 8317708, + 8207208, + 8575458, + 7821625, + 8370667, + 8167917, + 8670583, + 8255375, + 8022125, + 8262042 + ], + "mean_ns": 8267070.8, + "stddev_ns": 233070.49930688352, + "min_ns": 7821625, + "max_ns": 8670583, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "tool_awk_nf", + "category": "tools", + "iterations": 10, + "times_ns": [ + 47250, + 43833, + 41917, + 41708, + 41291, + 41083, + 41416, + 40792, + 40625, + 41625 + ], + "mean_ns": 42154.0, + "stddev_ns": 1896.1150281562561, + "min_ns": 40625, + "max_ns": 47250, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "tool_awk_nf", + "category": "tools", + "iterations": 10, + "times_ns": [ + 9226458, + 9043208, + 7947750, + 9354625, + 8166834, + 8857292, + 7945750, + 8396250, + 7908458, + 8778709 + ], + "mean_ns": 8562533.4, + "stddev_ns": 529461.1199382255, + "min_ns": 7908458, + "max_ns": 9354625, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "tool_awk_compute", + "category": "tools", + "iterations": 10, + "times_ns": [ + 110291, + 47417, + 43834, + 42833, + 42000, + 41667, + 41541, + 41459, + 87375, + 71125 + ], + "mean_ns": 56954.2, + "stddev_ns": 23170.134957742477, + "min_ns": 41459, + "max_ns": 110291, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "tool_awk_compute", + "category": "tools", + "iterations": 10, + "times_ns": [ + 8810625, + 7993500, + 8093000, + 8438000, + 7832708, + 8221750, + 8127750, + 8010417, + 8066083, + 8606167 + ], + "mean_ns": 8220000.0, + "stddev_ns": 289662.18040262006, + "min_ns": 7832708, + "max_ns": 8810625, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "tool_jq_identity", + "category": "tools", + "iterations": 10, + "times_ns": [ + 389917, + 367375, + 542125, + 486959, + 364625, + 345042, + 340000, + 337084, + 336209, + 456708 + ], + "mean_ns": 396604.4, + "stddev_ns": 69229.63542905595, + "min_ns": 336209, + "max_ns": 542125, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "tool_jq_identity", + "category": "tools", + "iterations": 10, + "times_ns": [ + 9267208, + 9208708, + 8759625, + 8684750, + 8598458, + 8598583, + 8364125, + 9026125, + 9051166, + 8061208 + ], + "mean_ns": 8761995.6, + "stddev_ns": 362905.0012306802, + "min_ns": 8061208, + "max_ns": 9267208, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "tool_jq_field", + "category": "tools", + "iterations": 10, + "times_ns": [ + 417792, + 380958, + 355791, + 351334, + 526000, + 495791, + 413416, + 391542, + 367500, + 352417 + ], + "mean_ns": 405254.1, + "stddev_ns": 57749.23981049447, + "min_ns": 351334, + "max_ns": 526000, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "tool_jq_field", + "category": "tools", + "iterations": 10, + "times_ns": [ + 8803458, + 8412167, + 8427083, + 8443917, + 8528417, + 8483917, + 8195417, + 8246000, + 8497375, + 8072667 + ], + "mean_ns": 8411041.8, + "stddev_ns": 192380.18300739813, + "min_ns": 8072667, + "max_ns": 8803458, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "tool_jq_array", + "category": "tools", + "iterations": 10, + "times_ns": [ + 540458, + 422333, + 375292, + 355708, + 345667, + 339625, + 336292, + 334458, + 335000, + 333667 + ], + "mean_ns": 371850.0, + "stddev_ns": 62009.67635135665, + "min_ns": 333667, + "max_ns": 540458, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "tool_jq_array", + "category": "tools", + "iterations": 10, + "times_ns": [ + 8784709, + 8750625, + 8523709, + 8583541, + 8346583, + 8882083, + 8200583, + 8556625, + 8062875, + 8177333 + ], + "mean_ns": 8486866.6, + "stddev_ns": 265943.94945521886, + "min_ns": 8062875, + "max_ns": 8882083, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "tool_jq_filter", + "category": "tools", + "iterations": 10, + "times_ns": [ + 390167, + 366292, + 352834, + 345334, + 341000, + 339625, + 333250, + 330583, + 327000, + 325000 + ], + "mean_ns": 345108.5, + "stddev_ns": 19156.136240118987, + "min_ns": 325000, + "max_ns": 390167, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "tool_jq_filter", + "category": "tools", + "iterations": 10, + "times_ns": [ + 8596500, + 8333917, + 8507000, + 8878125, + 8596125, + 8437541, + 8629250, + 9428792, + 9031708, + 8450584 + ], + "mean_ns": 8688954.2, + "stddev_ns": 316313.61872793274, + "min_ns": 8333917, + "max_ns": 9428792, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "tool_jq_map", + "category": "tools", + "iterations": 10, + "times_ns": [ + 384166, + 353292, + 342625, + 424500, + 434666, + 457667, + 591834, + 466916, + 416333, + 380917 + ], + "mean_ns": 425291.6, + "stddev_ns": 68091.13009372073, + "min_ns": 342625, + "max_ns": 591834, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "tool_jq_map", + "category": "tools", + "iterations": 10, + "times_ns": [ + 10764125, + 8571125, + 8719542, + 11573084, + 8445666, + 8791042, + 9095875, + 8837791, + 9139042, + 8725167 + ], + "mean_ns": 9266245.9, + "stddev_ns": 988328.8526437393, + "min_ns": 8445666, + "max_ns": 11573084, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "complex_fibonacci", + "category": "complex", + "iterations": 10, + "times_ns": [ + 3104458, + 3110958, + 3023042, + 3012083, + 3224000, + 3094625, + 2990583, + 3112583, + 3160375, + 3023291 + ], + "mean_ns": 3085599.8, + "stddev_ns": 69844.78526676133, + "min_ns": 2990583, + "max_ns": 3224000, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "complex_fibonacci", + "category": "complex", + "iterations": 10, + "times_ns": [ + 117104875, + 116253625, + 109998833, + 109125542, + 109138292, + 118369958, + 133439375, + 123240125, + 133130291, + 128909000 + ], + "mean_ns": 119870991.6, + "stddev_ns": 8966892.391677042, + "min_ns": 109125542, + "max_ns": 133439375, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "complex_fibonacci_iter", + "category": "complex", + "iterations": 10, + "times_ns": [ + 109667, + 167416, + 102875, + 80042, + 76334, + 73125, + 73583, + 70625, + 72333, + 71458 + ], + "mean_ns": 89745.8, + "stddev_ns": 29011.500315564517, + "min_ns": 70625, + "max_ns": 167416, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "complex_fibonacci_iter", + "category": "complex", + "iterations": 10, + "times_ns": [ + 5792750, + 5443042, + 6151042, + 7328292, + 5697458, + 5790041, + 5475959, + 6493125, + 5493417, + 6010666 + ], + "mean_ns": 5967579.2, + "stddev_ns": 551358.5761336809, + "min_ns": 5443042, + "max_ns": 7328292, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "complex_nested_subst", + "category": "complex", + "iterations": 10, + "times_ns": [ + 49417, + 46500, + 45167, + 45625, + 45083, + 44750, + 44584, + 44667, + 44458, + 45833 + ], + "mean_ns": 45608.4, + "stddev_ns": 1407.7600789907349, + "min_ns": 44458, + "max_ns": 49417, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "complex_nested_subst", + "category": "complex", + "iterations": 10, + "times_ns": [ + 7763833, + 7980667, + 8379250, + 7861750, + 7872541, + 8248542, + 8593042, + 10503125, + 10470084, + 13934583 + ], + "mean_ns": 9160741.7, + "stddev_ns": 1864452.2561162058, + "min_ns": 7763833, + "max_ns": 13934583, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "complex_loop_compute", + "category": "complex", + "iterations": 10, + "times_ns": [ + 208625, + 306541, + 99416, + 78125, + 71291, + 69250, + 69750, + 68125, + 68042, + 67750 + ], + "mean_ns": 110691.5, + "stddev_ns": 77172.90576005286, + "min_ns": 67750, + "max_ns": 306541, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "complex_loop_compute", + "category": "complex", + "iterations": 10, + "times_ns": [ + 6056833, + 8722875, + 6987791, + 6872541, + 6681833, + 8390500, + 6915125, + 5925875, + 6229625, + 6355958 + ], + "mean_ns": 6913895.6, + "stddev_ns": 894653.7846793251, + "min_ns": 5925875, + "max_ns": 8722875, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "complex_string_build", + "category": "complex", + "iterations": 10, + "times_ns": [ + 109000, + 63916, + 49458, + 44583, + 43333, + 42834, + 41917, + 42041, + 41958, + 41541 + ], + "mean_ns": 52058.1, + "stddev_ns": 20056.531138010876, + "min_ns": 41541, + "max_ns": 109000, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "complex_string_build", + "category": "complex", + "iterations": 10, + "times_ns": [ + 5591542, + 5689791, + 5539000, + 5824500, + 7771125, + 6851750, + 5757000, + 5393125, + 5559833, + 5300417 + ], + "mean_ns": 5927808.3, + "stddev_ns": 736691.5128793123, + "min_ns": 5300417, + "max_ns": 7771125, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "complex_json_transform", + "category": "complex", + "iterations": 10, + "times_ns": [ + 404792, + 365458, + 343667, + 334875, + 329834, + 326375, + 326166, + 326250, + 332041, + 330583 + ], + "mean_ns": 342004.1, + "stddev_ns": 23805.70767883198, + "min_ns": 326166, + "max_ns": 404792, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "complex_json_transform", + "category": "complex", + "iterations": 10, + "times_ns": [ + 8670166, + 8603541, + 8831417, + 8990750, + 9112000, + 9027084, + 9178625, + 8878167, + 8572000, + 8609875 + ], + "mean_ns": 8847362.5, + "stddev_ns": 213752.93255497105, + "min_ns": 8572000, + "max_ns": 9178625, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "complex_pipeline_text", + "category": "complex", + "iterations": 10, + "times_ns": [ + 66625, + 157541, + 157583, + 94666, + 85625, + 59916, + 61292, + 62459, + 60292, + 59458 + ], + "mean_ns": 86545.7, + "stddev_ns": 37283.12154326673, + "min_ns": 59458, + "max_ns": 157583, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "complex_pipeline_text", + "category": "complex", + "iterations": 10, + "times_ns": [ + 8888125, + 9042459, + 8118416, + 8284833, + 8162917, + 7942209, + 7572125, + 8913375, + 9585500, + 10011166 + ], + "mean_ns": 8652112.5, + "stddev_ns": 729653.5771901965, + "min_ns": 7572125, + "max_ns": 10011166, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "large_loop_1000", + "category": "large", + "iterations": 10, + "times_ns": [ + 2225083, + 2207500, + 2224959, + 2243959, + 2205666, + 2230167, + 2592833, + 2596875, + 2237958, + 2211583 + ], + "mean_ns": 2297658.3, + "stddev_ns": 149068.4323638308, + "min_ns": 2205666, + "max_ns": 2596875, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "large_loop_1000", + "category": "large", + "iterations": 10, + "times_ns": [ + 6825583, + 6911542, + 7624417, + 8207541, + 7076209, + 7349375, + 7693375, + 7752792, + 7341834, + 7365916 + ], + "mean_ns": 7414858.4, + "stddev_ns": 398911.44813409407, + "min_ns": 6825583, + "max_ns": 8207541, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "large_string_append_100", + "category": "large", + "iterations": 10, + "times_ns": [ + 227042, + 223167, + 219750, + 217375, + 218584, + 216292, + 221291, + 215958, + 220500, + 218375 + ], + "mean_ns": 219833.4, + "stddev_ns": 3208.4982842445156, + "min_ns": 215958, + "max_ns": 227042, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "large_string_append_100", + "category": "large", + "iterations": 10, + "times_ns": [ + 6678375, + 6366792, + 6313250, + 6318209, + 7026792, + 6144459, + 6335459, + 5660833, + 5855750, + 6019292 + ], + "mean_ns": 6271921.1, + "stddev_ns": 371297.4748226683, + "min_ns": 5660833, + "max_ns": 7026792, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "large_array_fill_200", + "category": "large", + "iterations": 10, + "times_ns": [ + 1305750, + 1110417, + 916666, + 910500, + 1019875, + 925000, + 901875, + 889375, + 1199542, + 1727375 + ], + "mean_ns": 1090637.5, + "stddev_ns": 252042.86146338284, + "min_ns": 889375, + "max_ns": 1727375, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "large_array_fill_200", + "category": "large", + "iterations": 10, + "times_ns": [ + 7176959, + 8431917, + 8506125, + 9244083, + 10651542, + 12885791, + 10207167, + 7141292, + 8717334, + 7624875 + ], + "mean_ns": 9058708.5, + "stddev_ns": 1691895.328651879, + "min_ns": 7141292, + "max_ns": 12885791, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "large_nested_loops", + "category": "large", + "iterations": 10, + "times_ns": [ + 1104375, + 1129958, + 1165459, + 1159083, + 1176042, + 1299583, + 1216625, + 1184583, + 1204417, + 1175542 + ], + "mean_ns": 1181566.7, + "stddev_ns": 50141.77528777776, + "min_ns": 1104375, + "max_ns": 1299583, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "large_nested_loops", + "category": "large", + "iterations": 10, + "times_ns": [ + 6479917, + 7878875, + 7347166, + 6839333, + 6723208, + 5966958, + 5797208, + 6260458, + 6397500, + 6312875 + ], + "mean_ns": 6600349.8, + "stddev_ns": 597043.5872731237, + "min_ns": 5797208, + "max_ns": 7878875, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "large_fibonacci_12", + "category": "large", + "iterations": 10, + "times_ns": [ + 8322541, + 8413750, + 8768084, + 8350917, + 8071667, + 8273792, + 8171291, + 8397750, + 9187167, + 8104458 + ], + "mean_ns": 8406141.7, + "stddev_ns": 320425.8999088713, + "min_ns": 8071667, + "max_ns": 9187167, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "large_fibonacci_12", + "category": "large", + "iterations": 10, + "times_ns": [ + 288276959, + 290247250, + 279913375, + 622422375, + 340751334, + 339737083, + 310877167, + 289892500, + 319455834, + 273749750 + ], + "mean_ns": 335532362.7, + "stddev_ns": 98231616.42005098, + "min_ns": 273749750, + "max_ns": 622422375, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "large_function_calls_500", + "category": "large", + "iterations": 10, + "times_ns": [ + 4485542, + 4417083, + 4457292, + 4451583, + 4536583, + 4417125, + 4589375, + 4680750, + 4583708, + 4577750 + ], + "mean_ns": 4519679.1, + "stddev_ns": 83244.75865836839, + "min_ns": 4417083, + "max_ns": 4680750, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "large_function_calls_500", + "category": "large", + "iterations": 10, + "times_ns": [ + 353453042, + 417306375, + 402876334, + 395983375, + 396438250, + 634942834, + 426656291, + 382145791, + 393454417, + 383064208 + ], + "mean_ns": 418632091.7, + "stddev_ns": 74557900.80506293, + "min_ns": 353453042, + "max_ns": 634942834, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "large_multiline_script", + "category": "large", + "iterations": 10, + "times_ns": [ + 245083, + 236791, + 229583, + 233875, + 296416, + 278875, + 245375, + 234500, + 235833, + 231709 + ], + "mean_ns": 246804.0, + "stddev_ns": 21350.634182618556, + "min_ns": 229583, + "max_ns": 296416, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "large_multiline_script", + "category": "large", + "iterations": 10, + "times_ns": [ + 5994000, + 5969375, + 5674084, + 5897708, + 5349417, + 5567958, + 5559291, + 5866417, + 5622459, + 5697709 + ], + "mean_ns": 5719841.8, + "stddev_ns": 197148.93818065568, + "min_ns": 5349417, + "max_ns": 5994000, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "large_pipeline_chain", + "category": "large", + "iterations": 10, + "times_ns": [ + 529167, + 504417, + 497584, + 500417, + 495417, + 499042, + 572166, + 550625, + 515875, + 501333 + ], + "mean_ns": 516604.3, + "stddev_ns": 24830.91477594009, + "min_ns": 495417, + "max_ns": 572166, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "large_pipeline_chain", + "category": "large", + "iterations": 10, + "times_ns": [ + 8296375, + 8390500, + 8647833, + 8334792, + 8351708, + 8214542, + 8407417, + 9137292, + 8954708, + 8780375 + ], + "mean_ns": 8551554.2, + "stddev_ns": 296577.52990939823, + "min_ns": 8214542, + "max_ns": 9137292, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "large_assoc_array", + "category": "large", + "iterations": 10, + "times_ns": [ + 46292, + 42458, + 41166, + 40875, + 40292, + 39708, + 39333, + 39541, + 39542, + 39917 + ], + "mean_ns": 40912.4, + "stddev_ns": 2011.8206281873142, + "min_ns": 39333, + "max_ns": 46292, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "large_assoc_array", + "category": "large", + "iterations": 10, + "times_ns": [ + 5090000, + 5202334, + 5034167, + 5457625, + 5930458, + 5887208, + 5853250, + 5841625, + 5591875, + 5652334 + ], + "mean_ns": 5554087.6, + "stddev_ns": 324747.65259604267, + "min_ns": 5034167, + "max_ns": 5930458, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "subshell_simple", + "category": "subshell", + "iterations": 10, + "times_ns": [ + 38375, + 35958, + 34166, + 33875, + 33583, + 33084, + 33208, + 32750, + 32625, + 32709 + ], + "mean_ns": 34033.3, + "stddev_ns": 1725.296962844368, + "min_ns": 32625, + "max_ns": 38375, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "subshell_simple", + "category": "subshell", + "iterations": 10, + "times_ns": [ + 6060167, + 6101917, + 6512208, + 6152792, + 6102416, + 6619709, + 6618209, + 6599375, + 6551334, + 6420792 + ], + "mean_ns": 6373891.9, + "stddev_ns": 227761.75519891395, + "min_ns": 6060167, + "max_ns": 6619709, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "subshell_isolation", + "category": "subshell", + "iterations": 10, + "times_ns": [ + 69000, + 62125, + 47834, + 42875, + 40917, + 39542, + 39500, + 38792, + 39083, + 38375 + ], + "mean_ns": 45804.3, + "stddev_ns": 10341.640353928386, + "min_ns": 38375, + "max_ns": 69000, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "subshell_isolation", + "category": "subshell", + "iterations": 10, + "times_ns": [ + 6435958, + 6796541, + 6864209, + 6740167, + 6807708, + 7057583, + 6802041, + 9185500, + 18364500, + 11491959 + ], + "mean_ns": 8654616.6, + "stddev_ns": 3567259.12059349, + "min_ns": 6435958, + "max_ns": 18364500, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "subshell_nested", + "category": "subshell", + "iterations": 10, + "times_ns": [ + 56291, + 53209, + 51167, + 50792, + 50250, + 50000, + 50375, + 49417, + 50125, + 50375 + ], + "mean_ns": 51200.1, + "stddev_ns": 1953.468169692048, + "min_ns": 49417, + "max_ns": 56291, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "subshell_nested", + "category": "subshell", + "iterations": 10, + "times_ns": [ + 14516834, + 7889166, + 7694875, + 7804833, + 8237125, + 8640042, + 9068125, + 8611708, + 8940084, + 8468125 + ], + "mean_ns": 8987091.7, + "stddev_ns": 1896126.562323731, + "min_ns": 7694875, + "max_ns": 14516834, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "subshell_pipeline", + "category": "subshell", + "iterations": 10, + "times_ns": [ + 51125, + 46708, + 43916, + 44250, + 43666, + 43125, + 42667, + 42916, + 42708, + 42834 + ], + "mean_ns": 44391.5, + "stddev_ns": 2519.79500158247, + "min_ns": 42667, + "max_ns": 51125, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "subshell_pipeline", + "category": "subshell", + "iterations": 10, + "times_ns": [ + 8070375, + 8003541, + 7891375, + 8269625, + 8413542, + 8518041, + 7850209, + 8201042, + 8288541, + 8694375 + ], + "mean_ns": 8220066.6, + "stddev_ns": 259387.8116636169, + "min_ns": 7850209, + "max_ns": 8694375, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "subshell_capture_loop", + "category": "subshell", + "iterations": 10, + "times_ns": [ + 77541, + 70542, + 68708, + 72250, + 67959, + 70334, + 68417, + 70250, + 67417, + 70042 + ], + "mean_ns": 70346.0, + "stddev_ns": 2760.6942605076715, + "min_ns": 67417, + "max_ns": 77541, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "subshell_capture_loop", + "category": "subshell", + "iterations": 10, + "times_ns": [ + 10200250, + 9712584, + 9582958, + 9901584, + 9714792, + 9379542, + 9839209, + 9317417, + 10773833, + 10140875 + ], + "mean_ns": 9856304.4, + "stddev_ns": 409460.842070936, + "min_ns": 9317417, + "max_ns": 10773833, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "subshell_process_subst", + "category": "subshell", + "iterations": 10, + "times_ns": [ + 55208, + 50584, + 52042, + 48750, + 48750, + 48000, + 49000, + 47583, + 48209, + 47875 + ], + "mean_ns": 49600.1, + "stddev_ns": 2274.3148176978493, + "min_ns": 47583, + "max_ns": 55208, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "subshell_process_subst", + "category": "subshell", + "iterations": 10, + "times_ns": [ + 7520708, + 7540083, + 7711667, + 7504125, + 8099250, + 7592875, + 7758125, + 8643209, + 7774000, + 7535875 + ], + "mean_ns": 7767991.7, + "stddev_ns": 338571.1988687313, + "min_ns": 7504125, + "max_ns": 8643209, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "io_redirect_write", + "category": "io", + "iterations": 10, + "times_ns": [ + 57750, + 53708, + 52292, + 51875, + 50584, + 50292, + 50125, + 50125, + 49708, + 50083 + ], + "mean_ns": 51654.2, + "stddev_ns": 2361.4952805373123, + "min_ns": 49708, + "max_ns": 57750, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "io_redirect_write", + "category": "io", + "iterations": 10, + "times_ns": [ + 9428708, + 10004333, + 10254208, + 9528542, + 10405875, + 10034125, + 11114542, + 9679417, + 11103959, + 10213166 + ], + "mean_ns": 10176687.5, + "stddev_ns": 554630.0144022589, + "min_ns": 9428708, + "max_ns": 11114542, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "io_append", + "category": "io", + "iterations": 10, + "times_ns": [ + 75708, + 69209, + 67292, + 66875, + 65458, + 64792, + 64667, + 64583, + 64458, + 64291 + ], + "mean_ns": 66733.3, + "stddev_ns": 3353.1596457669593, + "min_ns": 64291, + "max_ns": 75708, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "io_append", + "category": "io", + "iterations": 10, + "times_ns": [ + 9669333, + 9468792, + 8958417, + 9206375, + 12028000, + 14235875, + 11739833, + 10949209, + 9577042, + 10063750 + ], + "mean_ns": 10589662.6, + "stddev_ns": 1574662.9389726042, + "min_ns": 8958417, + "max_ns": 14235875, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "io_dev_null", + "category": "io", + "iterations": 10, + "times_ns": [ + 38292, + 35625, + 33542, + 33334, + 33625, + 33166, + 32667, + 33000, + 32875, + 32917 + ], + "mean_ns": 33904.3, + "stddev_ns": 1663.586730531354, + "min_ns": 32667, + "max_ns": 38292, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "io_dev_null", + "category": "io", + "iterations": 10, + "times_ns": [ + 5967500, + 5542416, + 5111084, + 5489583, + 5503042, + 5175500, + 5499083, + 5351792, + 5485333, + 5644041 + ], + "mean_ns": 5476937.4, + "stddev_ns": 226856.692054786, + "min_ns": 5111084, + "max_ns": 5967500, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "io_stderr_redirect", + "category": "io", + "iterations": 10, + "times_ns": [ + 39000, + 36041, + 34792, + 34709, + 34250, + 33958, + 33791, + 33667, + 33625, + 33709 + ], + "mean_ns": 34754.2, + "stddev_ns": 1582.7693957112008, + "min_ns": 33625, + "max_ns": 39000, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "io_stderr_redirect", + "category": "io", + "iterations": 10, + "times_ns": [ + 5347125, + 5490125, + 4967916, + 5185583, + 5149333, + 5099584, + 4892250, + 5218666, + 4834750, + 5251000 + ], + "mean_ns": 5143633.2, + "stddev_ns": 192830.1105309023, + "min_ns": 4834750, + "max_ns": 5490125, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "io_read_lines", + "category": "io", + "iterations": 10, + "times_ns": [ + 67750, + 63500, + 62500, + 62750, + 60666, + 61417, + 60416, + 59542, + 60042, + 60875 + ], + "mean_ns": 61945.8, + "stddev_ns": 2277.3949503764165, + "min_ns": 59542, + "max_ns": 67750, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "io_read_lines", + "category": "io", + "iterations": 10, + "times_ns": [ + 4786042, + 5169458, + 4948041, + 5505791, + 5116917, + 4713542, + 4912666, + 4688875, + 4924584, + 5010750 + ], + "mean_ns": 4977666.6, + "stddev_ns": 231081.67489534948, + "min_ns": 4688875, + "max_ns": 5505791, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bashkit", + "case_name": "io_multiline_heredoc", + "category": "io", + "iterations": 10, + "times_ns": [ + 47459, + 43125, + 44375, + 42708, + 40958, + 40167, + 40958, + 41458, + 128375, + 61833 + ], + "mean_ns": 53141.6, + "stddev_ns": 25798.58403943906, + "min_ns": 40167, + "max_ns": 128375, + "errors": 0, + "error_messages": [], + "output_match": true + }, + { + "runner": "bash", + "case_name": "io_multiline_heredoc", + "category": "io", + "iterations": 10, + "times_ns": [ + 7205750, + 7490917, + 7715167, + 8659375, + 8299750, + 7891542, + 8595875, + 7874750, + 9018084, + 8539584 + ], + "mean_ns": 8129079.4, + "stddev_ns": 551298.7011920488, + "min_ns": 7205750, + "max_ns": 9018084, + "errors": 0, + "error_messages": [], + "output_match": true + } + ], + "summary": { + "total_cases": 96, + "runner_stats": { + "bashkit": { + "total_time_ms": 27.9108833, + "avg_time_ms": 0.29073836770833333, + "error_count": 0, + "error_rate": 0.0, + "output_match_rate": 1.0 + }, + "bash": { + "total_time_ms": 1622.9294230000005, + "avg_time_ms": 16.905514822916672, + "error_count": 0, + "error_rate": 0.0, + "output_match_rate": 1.0 + } + } + } +} \ No newline at end of file diff --git a/crates/bashkit-bench/results/bench-mykhailosmin-macos-aarch64-1791857690.md b/crates/bashkit-bench/results/bench-mykhailosmin-macos-aarch64-1791857690.md new file mode 100644 index 000000000..17e9e3161 --- /dev/null +++ b/crates/bashkit-bench/results/bench-mykhailosmin-macos-aarch64-1791857690.md @@ -0,0 +1,308 @@ +# Bashkit Benchmark Report + +## System Information + +- **Moniker**: `mykhailosmin-macos-aarch64` +- **Hostname**: Mykhailos-Mini.lan +- **OS**: macos +- **Architecture**: aarch64 +- **CPUs**: 12 +- **Timestamp**: 1791857690 +- **Iterations**: 10 +- **Warmup**: 2 +- **Prewarm cases**: 3 + +- **bash executable**: `/opt/homebrew/bin/bash (GNU Bash 5.3.20(1)-release)` + +## Summary + +Benchmarked 96 cases across 2 runners. + +| Runner | Total Time (ms) | Avg/Case (ms) | Errors | Error Rate | Output Match | +|--------|-----------------|---------------|--------|------------|-------------| +| bashkit | 27.91 | 0.291 | 0 | 0.0% | 100.0% | +| bash | 1622.93 | 16.906 | 0 | 0.0% | 100.0% | + +## Performance Comparison + +**Bashkit is 58.1x faster** than bash on average. + +## Results by Category + +### Arithmetic + +| Benchmark | Runner | Mean (ms) | StdDev | Errors | Match | +|-----------|--------|-----------|--------|--------|-------| +| arith_basic | bashkit | 0.032 | ±0.002 | - | ✓ | +| arith_basic | bash | 6.327 | ±0.723 | - | ✓ | +| arith_complex | bashkit | 0.033 | ±0.002 | - | ✓ | +| arith_complex | bash | 6.184 | ±0.871 | - | ✓ | +| arith_variables | bashkit | 0.036 | ±0.002 | - | ✓ | +| arith_variables | bash | 6.004 | ±0.572 | - | ✓ | +| arith_increment | bashkit | 0.035 | ±0.002 | - | ✓ | +| arith_increment | bash | 6.413 | ±0.537 | - | ✓ | +| arith_modulo | bashkit | 0.032 | ±0.002 | - | ✓ | +| arith_modulo | bash | 6.160 | ±0.473 | - | ✓ | +| arith_loop_sum | bashkit | 0.058 | ±0.007 | - | ✓ | +| arith_loop_sum | bash | 5.670 | ±0.245 | - | ✓ | + +### Arrays + +| Benchmark | Runner | Mean (ms) | StdDev | Errors | Match | +|-----------|--------|-----------|--------|--------|-------| +| arr_create | bashkit | 0.045 | ±0.021 | - | ✓ | +| arr_create | bash | 8.206 | ±1.589 | - | ✓ | +| arr_all | bashkit | 0.074 | ±0.052 | - | ✓ | +| arr_all | bash | 7.751 | ±1.710 | - | ✓ | +| arr_length | bashkit | 0.069 | ±0.052 | - | ✓ | +| arr_length | bash | 25.467 | ±10.507 | - | ✓ | +| arr_iterate | bashkit | 0.094 | ±0.080 | - | ✓ | +| arr_iterate | bash | 6.504 | ±0.578 | - | ✓ | +| arr_slice | bashkit | 0.038 | ±0.002 | - | ✓ | +| arr_slice | bash | 6.340 | ±0.973 | - | ✓ | +| arr_assign_index | bashkit | 0.045 | ±0.020 | - | ✓ | +| arr_assign_index | bash | 5.302 | ±0.346 | - | ✓ | + +### Complex + +| Benchmark | Runner | Mean (ms) | StdDev | Errors | Match | +|-----------|--------|-----------|--------|--------|-------| +| complex_fibonacci | bashkit | 3.086 | ±0.070 | - | ✓ | +| complex_fibonacci | bash | 119.871 | ±8.967 | - | ✓ | +| complex_fibonacci_iter | bashkit | 0.090 | ±0.029 | - | ✓ | +| complex_fibonacci_iter | bash | 5.968 | ±0.551 | - | ✓ | +| complex_nested_subst | bashkit | 0.046 | ±0.001 | - | ✓ | +| complex_nested_subst | bash | 9.161 | ±1.864 | - | ✓ | +| complex_loop_compute | bashkit | 0.111 | ±0.077 | - | ✓ | +| complex_loop_compute | bash | 6.914 | ±0.895 | - | ✓ | +| complex_string_build | bashkit | 0.052 | ±0.020 | - | ✓ | +| complex_string_build | bash | 5.928 | ±0.737 | - | ✓ | +| complex_json_transform | bashkit | 0.342 | ±0.024 | - | ✓ | +| complex_json_transform | bash | 8.847 | ±0.214 | - | ✓ | +| complex_pipeline_text | bashkit | 0.087 | ±0.037 | - | ✓ | +| complex_pipeline_text | bash | 8.652 | ±0.730 | - | ✓ | + +### Control + +| Benchmark | Runner | Mean (ms) | StdDev | Errors | Match | +|-----------|--------|-----------|--------|--------|-------| +| ctrl_if_simple | bashkit | 0.034 | ±0.002 | - | ✓ | +| ctrl_if_simple | bash | 5.804 | ±0.498 | - | ✓ | +| ctrl_if_else | bashkit | 0.035 | ±0.002 | - | ✓ | +| ctrl_if_else | bash | 5.130 | ±0.170 | - | ✓ | +| ctrl_for_list | bashkit | 0.047 | ±0.002 | - | ✓ | +| ctrl_for_list | bash | 6.058 | ±1.573 | - | ✓ | +| ctrl_for_range | bashkit | 0.060 | ±0.017 | - | ✓ | +| ctrl_for_range | bash | 11.672 | ±3.921 | - | ✓ | +| ctrl_while | bashkit | 0.073 | ±0.003 | - | ✓ | +| ctrl_while | bash | 10.071 | ±1.427 | - | ✓ | +| ctrl_case | bashkit | 0.037 | ±0.002 | - | ✓ | +| ctrl_case | bash | 12.834 | ±3.884 | - | ✓ | +| ctrl_function | bashkit | 0.038 | ±0.002 | - | ✓ | +| ctrl_function | bash | 9.903 | ±2.201 | - | ✓ | +| ctrl_function_return | bashkit | 0.132 | ±0.022 | - | ✓ | +| ctrl_function_return | bash | 9.656 | ±2.174 | - | ✓ | +| ctrl_nested_loops | bashkit | 0.062 | ±0.003 | - | ✓ | +| ctrl_nested_loops | bash | 10.697 | ±2.211 | - | ✓ | + +### Io + +| Benchmark | Runner | Mean (ms) | StdDev | Errors | Match | +|-----------|--------|-----------|--------|--------|-------| +| io_redirect_write | bashkit | 0.052 | ±0.002 | - | ✓ | +| io_redirect_write | bash | 10.177 | ±0.555 | - | ✓ | +| io_append | bashkit | 0.067 | ±0.003 | - | ✓ | +| io_append | bash | 10.590 | ±1.575 | - | ✓ | +| io_dev_null | bashkit | 0.034 | ±0.002 | - | ✓ | +| io_dev_null | bash | 5.477 | ±0.227 | - | ✓ | +| io_stderr_redirect | bashkit | 0.035 | ±0.002 | - | ✓ | +| io_stderr_redirect | bash | 5.144 | ±0.193 | - | ✓ | +| io_read_lines | bashkit | 0.062 | ±0.002 | - | ✓ | +| io_read_lines | bash | 4.978 | ±0.231 | - | ✓ | +| io_multiline_heredoc | bashkit | 0.053 | ±0.026 | - | ✓ | +| io_multiline_heredoc | bash | 8.129 | ±0.551 | - | ✓ | + +### Large + +| Benchmark | Runner | Mean (ms) | StdDev | Errors | Match | +|-----------|--------|-----------|--------|--------|-------| +| large_loop_1000 | bashkit | 2.298 | ±0.149 | - | ✓ | +| large_loop_1000 | bash | 7.415 | ±0.399 | - | ✓ | +| large_string_append_100 | bashkit | 0.220 | ±0.003 | - | ✓ | +| large_string_append_100 | bash | 6.272 | ±0.371 | - | ✓ | +| large_array_fill_200 | bashkit | 1.091 | ±0.252 | - | ✓ | +| large_array_fill_200 | bash | 9.059 | ±1.692 | - | ✓ | +| large_nested_loops | bashkit | 1.182 | ±0.050 | - | ✓ | +| large_nested_loops | bash | 6.600 | ±0.597 | - | ✓ | +| large_fibonacci_12 | bashkit | 8.406 | ±0.320 | - | ✓ | +| large_fibonacci_12 | bash | 335.532 | ±98.232 | - | ✓ | +| large_function_calls_500 | bashkit | 4.520 | ±0.083 | - | ✓ | +| large_function_calls_500 | bash | 418.632 | ±74.558 | - | ✓ | +| large_multiline_script | bashkit | 0.247 | ±0.021 | - | ✓ | +| large_multiline_script | bash | 5.720 | ±0.197 | - | ✓ | +| large_pipeline_chain | bashkit | 0.517 | ±0.025 | - | ✓ | +| large_pipeline_chain | bash | 8.552 | ±0.297 | - | ✓ | +| large_assoc_array | bashkit | 0.041 | ±0.002 | - | ✓ | +| large_assoc_array | bash | 5.554 | ±0.325 | - | ✓ | + +### Pipes + +| Benchmark | Runner | Mean (ms) | StdDev | Errors | Match | +|-----------|--------|-----------|--------|--------|-------| +| pipe_simple | bashkit | 0.052 | ±0.012 | - | ✓ | +| pipe_simple | bash | 9.048 | ±0.512 | - | ✓ | +| pipe_multi | bashkit | 0.067 | ±0.002 | - | ✓ | +| pipe_multi | bash | 9.182 | ±0.604 | - | ✓ | +| pipe_command_subst | bashkit | 0.039 | ±0.002 | - | ✓ | +| pipe_command_subst | bash | 5.819 | ±0.304 | - | ✓ | +| pipe_heredoc | bashkit | 0.036 | ±0.002 | - | ✓ | +| pipe_heredoc | bash | 8.237 | ±0.811 | - | ✓ | +| pipe_herestring | bashkit | 0.043 | ±0.017 | - | ✓ | +| pipe_herestring | bash | 7.509 | ±0.242 | - | ✓ | +| pipe_discard | bashkit | 0.037 | ±0.002 | - | ✓ | +| pipe_discard | bash | 6.576 | ±0.610 | - | ✓ | + +### Startup + +| Benchmark | Runner | Mean (ms) | StdDev | Errors | Match | +|-----------|--------|-----------|--------|--------|-------| +| startup_empty | bashkit | 0.031 | ±0.003 | - | ✓ | +| startup_empty | bash | 12.948 | ±5.328 | - | ✓ | +| startup_true | bashkit | 0.031 | ±0.002 | - | ✓ | +| startup_true | bash | 7.234 | ±0.936 | - | ✓ | +| startup_echo | bashkit | 0.033 | ±0.002 | - | ✓ | +| startup_echo | bash | 8.206 | ±1.302 | - | ✓ | +| startup_exit | bashkit | 0.031 | ±0.002 | - | ✓ | +| startup_exit | bash | 5.560 | ±0.150 | - | ✓ | + +### Strings + +| Benchmark | Runner | Mean (ms) | StdDev | Errors | Match | +|-----------|--------|-----------|--------|--------|-------| +| str_concat | bashkit | 0.080 | ±0.070 | - | ✓ | +| str_concat | bash | 8.382 | ±1.347 | - | ✓ | +| str_printf | bashkit | 0.033 | ±0.002 | - | ✓ | +| str_printf | bash | 7.858 | ±1.358 | - | ✓ | +| str_printf_pad | bashkit | 0.044 | ±0.032 | - | ✓ | +| str_printf_pad | bash | 8.758 | ±3.044 | - | ✓ | +| str_echo_escape | bashkit | 0.032 | ±0.002 | - | ✓ | +| str_echo_escape | bash | 7.371 | ±1.451 | - | ✓ | +| str_prefix_strip | bashkit | 0.091 | ±0.030 | - | ✓ | +| str_prefix_strip | bash | 9.506 | ±1.496 | - | ✓ | +| str_suffix_strip | bashkit | 0.056 | ±0.038 | - | ✓ | +| str_suffix_strip | bash | 10.919 | ±8.362 | - | ✓ | +| str_uppercase | bashkit | 0.033 | ±0.002 | - | ✓ | +| str_uppercase | bash | 5.910 | ±1.032 | - | ✓ | +| str_lowercase | bashkit | 0.034 | ±0.002 | - | ✓ | +| str_lowercase | bash | 5.300 | ±0.229 | - | ✓ | + +### Subshell + +| Benchmark | Runner | Mean (ms) | StdDev | Errors | Match | +|-----------|--------|-----------|--------|--------|-------| +| subshell_simple | bashkit | 0.034 | ±0.002 | - | ✓ | +| subshell_simple | bash | 6.374 | ±0.228 | - | ✓ | +| subshell_isolation | bashkit | 0.046 | ±0.010 | - | ✓ | +| subshell_isolation | bash | 8.655 | ±3.567 | - | ✓ | +| subshell_nested | bashkit | 0.051 | ±0.002 | - | ✓ | +| subshell_nested | bash | 8.987 | ±1.896 | - | ✓ | +| subshell_pipeline | bashkit | 0.044 | ±0.003 | - | ✓ | +| subshell_pipeline | bash | 8.220 | ±0.259 | - | ✓ | +| subshell_capture_loop | bashkit | 0.070 | ±0.003 | - | ✓ | +| subshell_capture_loop | bash | 9.856 | ±0.409 | - | ✓ | +| subshell_process_subst | bashkit | 0.050 | ±0.002 | - | ✓ | +| subshell_process_subst | bash | 7.768 | ±0.339 | - | ✓ | + +### Tools + +| Benchmark | Runner | Mean (ms) | StdDev | Errors | Match | +|-----------|--------|-----------|--------|--------|-------| +| tool_grep_simple | bashkit | 0.046 | ±0.006 | - | ✓ | +| tool_grep_simple | bash | 9.305 | ±2.407 | - | ✓ | +| tool_grep_case | bashkit | 0.076 | ±0.004 | - | ✓ | +| tool_grep_case | bash | 13.231 | ±3.476 | - | ✓ | +| tool_grep_count | bashkit | 0.044 | ±0.003 | - | ✓ | +| tool_grep_count | bash | 8.754 | ±0.401 | - | ✓ | +| tool_grep_invert | bashkit | 0.045 | ±0.005 | - | ✓ | +| tool_grep_invert | bash | 8.354 | ±0.473 | - | ✓ | +| tool_grep_regex | bashkit | 0.057 | ±0.010 | - | ✓ | +| tool_grep_regex | bash | 8.983 | ±0.877 | - | ✓ | +| tool_sed_replace | bashkit | 0.051 | ±0.025 | - | ✓ | +| tool_sed_replace | bash | 8.927 | ±1.188 | - | ✓ | +| tool_sed_global | bashkit | 0.073 | ±0.038 | - | ✓ | +| tool_sed_global | bash | 8.640 | ±0.516 | - | ✓ | +| tool_sed_delete | bashkit | 0.045 | ±0.013 | - | ✓ | +| tool_sed_delete | bash | 9.103 | ±0.898 | - | ✓ | +| tool_sed_lines | bashkit | 0.039 | ±0.002 | - | ✓ | +| tool_sed_lines | bash | 8.473 | ±0.288 | - | ✓ | +| tool_sed_backrefs | bashkit | 0.050 | ±0.003 | - | ✓ | +| tool_sed_backrefs | bash | 10.082 | ±3.908 | - | ✓ | +| tool_awk_print | bashkit | 0.055 | ±0.034 | - | ✓ | +| tool_awk_print | bash | 10.103 | ±2.355 | - | ✓ | +| tool_awk_sum | bashkit | 0.046 | ±0.007 | - | ✓ | +| tool_awk_sum | bash | 8.165 | ±0.273 | - | ✓ | +| tool_awk_pattern | bashkit | 0.066 | ±0.021 | - | ✓ | +| tool_awk_pattern | bash | 8.144 | ±0.372 | - | ✓ | +| tool_awk_fieldsep | bashkit | 0.044 | ±0.005 | - | ✓ | +| tool_awk_fieldsep | bash | 8.267 | ±0.233 | - | ✓ | +| tool_awk_nf | bashkit | 0.042 | ±0.002 | - | ✓ | +| tool_awk_nf | bash | 8.563 | ±0.529 | - | ✓ | +| tool_awk_compute | bashkit | 0.057 | ±0.023 | - | ✓ | +| tool_awk_compute | bash | 8.220 | ±0.290 | - | ✓ | +| tool_jq_identity | bashkit | 0.397 | ±0.069 | - | ✓ | +| tool_jq_identity | bash | 8.762 | ±0.363 | - | ✓ | +| tool_jq_field | bashkit | 0.405 | ±0.058 | - | ✓ | +| tool_jq_field | bash | 8.411 | ±0.192 | - | ✓ | +| tool_jq_array | bashkit | 0.372 | ±0.062 | - | ✓ | +| tool_jq_array | bash | 8.487 | ±0.266 | - | ✓ | +| tool_jq_filter | bashkit | 0.345 | ±0.019 | - | ✓ | +| tool_jq_filter | bash | 8.689 | ±0.316 | - | ✓ | +| tool_jq_map | bashkit | 0.425 | ±0.068 | - | ✓ | +| tool_jq_map | bash | 9.266 | ±0.988 | - | ✓ | + +### Variables + +| Benchmark | Runner | Mean (ms) | StdDev | Errors | Match | +|-----------|--------|-----------|--------|--------|-------| +| var_assign_simple | bashkit | 0.035 | ±0.003 | - | ✓ | +| var_assign_simple | bash | 5.827 | ±0.223 | - | ✓ | +| var_assign_many | bashkit | 0.046 | ±0.002 | - | ✓ | +| var_assign_many | bash | 5.678 | ±0.330 | - | ✓ | +| var_default | bashkit | 0.032 | ±0.002 | - | ✓ | +| var_default | bash | 6.069 | ±0.520 | - | ✓ | +| var_length | bashkit | 0.036 | ±0.005 | - | ✓ | +| var_length | bash | 6.257 | ±0.515 | - | ✓ | +| var_substring | bashkit | 0.034 | ±0.003 | - | ✓ | +| var_substring | bash | 5.352 | ±0.164 | - | ✓ | +| var_replace | bashkit | 0.036 | ±0.003 | - | ✓ | +| var_replace | bash | 5.557 | ±0.471 | - | ✓ | +| var_nested | bashkit | 0.035 | ±0.003 | - | ✓ | +| var_nested | bash | 6.430 | ±0.851 | - | ✓ | +| var_export | bashkit | 0.035 | ±0.002 | - | ✓ | +| var_export | bash | 7.326 | ±1.489 | - | ✓ | + +## Runner Descriptions + +| Runner | Type | Description | +|--------|------|-------------| +| bashkit | in-process | Rust library call, no fork/exec | +| bashkit-cli | subprocess | bashkit binary, new process per run | +| bashkit-js | persistent child | Node.js + @everruns/bashkit, warm interpreter | +| bashkit-py | persistent child | Python + bashkit package, warm interpreter | +| bash | subprocess | PATH-selected Bash >=4, new process per run | +| gbash | subprocess | gbash binary (Go), new process per run | +| gbash-server | persistent child | gbash JSON-RPC server, warm interpreter | +| just-bash | subprocess | just-bash CLI, new process per run | +| just-bash-inproc | persistent child | Node.js + just-bash library, warm interpreter | + +## Assumptions & Notes + +- Times measured in nanoseconds, displayed in milliseconds +- Prewarm phase runs first few cases to warm up JIT/compilation +- Per-benchmark warmup iterations excluded from timing +- Output match compares against bash output when available +- Errors include execution failures and exit code mismatches +- In-process: interpreter runs inside the benchmark process +- Subprocess: new process spawned per benchmark run +- Persistent child: long-lived child process, amortizes startup cost + diff --git a/crates/bashkit/Cargo.toml b/crates/bashkit/Cargo.toml index ba28efdf6..2a0037f09 100644 --- a/crates/bashkit/Cargo.toml +++ b/crates/bashkit/Cargo.toml @@ -30,7 +30,7 @@ anyhow = { workspace = true } # Serialization serde = { workspace = true } serde_json = { workspace = true } -serde_yaml_ng = { workspace = true, optional = true } +serde_norway = { workspace = true, optional = true } # Regex regex = { workspace = true } @@ -226,7 +226,7 @@ jq = [ "dep:num-bigint", "dep:ryu", "dep:self_cell", - "dep:serde_yaml_ng", + "dep:serde_norway", ] # HTTP client (curl/wget) over rustls. Does NOT imply a crypto backend: pick # `ring` (on by default) or `aws-lc-rs`. Enabling neither is a compile error. diff --git a/crates/bashkit/fuzz/Cargo.lock b/crates/bashkit/fuzz/Cargo.lock index 25aa40eb6..14e8c05fa 100644 --- a/crates/bashkit/fuzz/Cargo.lock +++ b/crates/bashkit/fuzz/Cargo.lock @@ -121,12 +121,13 @@ dependencies = [ "num-traits", "os_display", "regex", + "regex-automata", "rustls", "ryu", "self_cell", "serde", "serde_json", - "serde_yaml_ng", + "serde_norway", "sha1", "sha2 0.11.0", "thiserror", @@ -1673,16 +1674,16 @@ dependencies = [ ] [[package]] -name = "serde_yaml_ng" -version = "0.10.0" +name = "serde_norway" +version = "0.9.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4db627b98b36d4203a7b458cf3573730f2bb591b28871d916dfa9efabfd41f" +checksum = "e408f29489b5fd500fab51ff1484fc859bb655f32c671f307dcd733b72e8168c" dependencies = [ "indexmap", "itoa", "ryu", "serde", - "unsafe-libyaml", + "unsafe-libyaml-norway", ] [[package]] @@ -1926,10 +1927,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81e544489bf3d8ef66c953931f56617f423cd4b5494be343d9b9d3dda037b9a3" [[package]] -name = "unsafe-libyaml" -version = "0.2.11" +name = "unsafe-libyaml-norway" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" +checksum = "b39abd59bf32521c7f2301b52d05a6a2c975b6003521cbd0c6dc1582f0a22104" [[package]] name = "untrusted" diff --git a/crates/bashkit/fuzz/fuzz_targets/yq_fuzz.rs b/crates/bashkit/fuzz/fuzz_targets/yq_fuzz.rs index cfbe1fda9..8e22a7a48 100644 --- a/crates/bashkit/fuzz/fuzz_targets/yq_fuzz.rs +++ b/crates/bashkit/fuzz/fuzz_targets/yq_fuzz.rs @@ -68,7 +68,7 @@ fuzz_target!(|data: &[u8]| { &mut bash, &script, "yq_fuzz", - &["serde_yaml_ng::", "Mapping {", "TaggedValue {"], + &["serde_norway::", "Mapping {", "TaggedValue {"], ) .await; }); diff --git a/crates/bashkit/src/builtins/yq.rs b/crates/bashkit/src/builtins/yq.rs index b25602365..eb633fd20 100644 --- a/crates/bashkit/src/builtins/yq.rs +++ b/crates/bashkit/src/builtins/yq.rs @@ -461,16 +461,16 @@ fn parse_json_documents(input: &str) -> DataResult> { Ok(values) } -// THREAT[TM-DOS-101]: serde_yaml_ng rejects nesting beyond 128 while this +// THREAT[TM-DOS-101]: serde_norway rejects nesting beyond 128 while this // conversion enforces Bashkit's lower shared structured-data depth of 100. fn parse_yaml_documents(input: &str) -> DataResult> { reject_yaml_aliases(input)?; let mut values = Vec::new(); - for document in serde_yaml_ng::Deserializer::from_str(input) { + for document in serde_norway::Deserializer::from_str(input) { if values.len() >= MAX_DOCUMENTS { anyhow::bail!("yq: document limit exceeded ({MAX_DOCUMENTS})"); } - let yaml = serde_yaml_ng::Value::deserialize(document) + let yaml = serde_norway::Value::deserialize(document) .map_err(|error| anyhow::anyhow!("yq: invalid YAML: {error}"))?; let json = yaml_to_json(yaml, 0)?; values.push(json); @@ -478,7 +478,7 @@ fn parse_yaml_documents(input: &str) -> DataResult> { Ok(values) } -// THREAT[TM-DOS-101]: serde_yaml_ng resolves aliases while deserializing, before +// THREAT[TM-DOS-101]: serde_norway resolves aliases while deserializing, before // Bashkit can meter the expanded tree. Reject alias tokens with a bounded lexical // pass, while ignoring quoted and block scalar content, before invoking libyaml. fn reject_yaml_aliases(input: &str) -> DataResult<()> { @@ -563,38 +563,38 @@ fn is_block_scalar_header(line: &[u8], index: usize) -> bool { suffix.is_empty() || suffix[0].is_ascii_whitespace() || suffix[0] == b'#' } -fn yaml_to_json(value: serde_yaml_ng::Value, depth: usize) -> DataResult { +fn yaml_to_json(value: serde_norway::Value, depth: usize) -> DataResult { if depth > MAX_DEPTH { anyhow::bail!("yq: nesting too deep ({depth} levels, max {MAX_DEPTH})"); } Ok(match value { - serde_yaml_ng::Value::Null => serde_json::Value::Null, - serde_yaml_ng::Value::Bool(value) => serde_json::Value::Bool(value), - serde_yaml_ng::Value::Number(value) => { + serde_norway::Value::Null => serde_json::Value::Null, + serde_norway::Value::Bool(value) => serde_json::Value::Bool(value), + serde_norway::Value::Number(value) => { if value.as_f64().is_some_and(|number| !number.is_finite()) { anyhow::bail!("yq: non-finite YAML number cannot be represented as JSON"); } serde_json::to_value(value) .map_err(|_| anyhow::anyhow!("yq: YAML number cannot be represented as JSON"))? } - serde_yaml_ng::Value::String(value) => serde_json::Value::String(value), - serde_yaml_ng::Value::Sequence(values) => serde_json::Value::Array( + serde_norway::Value::String(value) => serde_json::Value::String(value), + serde_norway::Value::Sequence(values) => serde_json::Value::Array( values .into_iter() .map(|value| yaml_to_json(value, depth + 1)) .collect::>>()?, ), - serde_yaml_ng::Value::Mapping(values) => { + serde_norway::Value::Mapping(values) => { let mut object = serde_json::Map::new(); for (key, value) in values { - let serde_yaml_ng::Value::String(key) = key else { + let serde_norway::Value::String(key) = key else { anyhow::bail!("yq: YAML mapping keys must be strings"); }; object.insert(key, yaml_to_json(value, depth + 1)?); } serde_json::Value::Object(object) } - serde_yaml_ng::Value::Tagged(_) => { + serde_norway::Value::Tagged(_) => { anyhow::bail!("yq: custom YAML tags are not supported"); } }) @@ -665,7 +665,7 @@ fn render_results(values: &[serde_json::Value], args: &Args) -> DataResult