Compare commits

...

10 Commits

34 changed files with 454 additions and 574 deletions

1
.gitignore vendored
View File

@@ -13,3 +13,4 @@ build-ninja
.*.un~
callgrind*
.stfolder
*.wasm

66
flake.lock generated
View File

@@ -2,11 +2,11 @@
"nodes": {
"flake-utils": {
"locked": {
"lastModified": 1649676176,
"narHash": "sha256-OWKJratjt2RW151VUlJPRALb7OU2S5s+f0vLj4o1bHM=",
"lastModified": 1667395993,
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "a4b154ebbdc88c8498a5c7b01589addc9e9cb678",
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
"type": "github"
},
"original": {
@@ -17,11 +17,11 @@
},
"flake-utils_2": {
"locked": {
"lastModified": 1649676176,
"narHash": "sha256-OWKJratjt2RW151VUlJPRALb7OU2S5s+f0vLj4o1bHM=",
"lastModified": 1659877975,
"narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "a4b154ebbdc88c8498a5c7b01589addc9e9cb678",
"rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0",
"type": "github"
},
"original": {
@@ -36,11 +36,11 @@
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1652149774,
"narHash": "sha256-rms5yNnnlmaqzEnI/9Log+5k/yVz4fB1BUVx5HXf8i8=",
"lastModified": 1673836088,
"narHash": "sha256-cAlfrHbX9sLcRdydMP8vhyxZChlVHqkEkumgc2LK4FY=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "1dcdd08fcd39e4e053f58f9959be801399c5211e",
"rev": "8f201a1adfddf715b708befd18164c8cbe65a268",
"type": "github"
},
"original": {
@@ -51,11 +51,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1652133925,
"narHash": "sha256-kfATGChLe9/fQVZkXN9G71JAVMlhePv1qDbaRKklkQs=",
"lastModified": 1665296151,
"narHash": "sha256-uOB0oxqxN9K7XGF1hcnY+PQnlQJ+3bP2vCn/+Ru/bbc=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "51d859cdab1ef58755bd342d45352fc607f5e59b",
"rev": "14ccaaedd95a488dd7ae142757884d8e125b3363",
"type": "github"
},
"original": {
@@ -65,13 +65,28 @@
"type": "github"
}
},
"nixpkgs_2": {
"nixpkgs_stable_new": {
"locked": {
"lastModified": 1652020977,
"narHash": "sha256-V6VYIwTeI5BCfYK9f5EsMbjsjsis1rUDHMsaDbTvt+A=",
"lastModified": 1673800717,
"narHash": "sha256-SFHraUqLSu5cC6IxTprex/nTsI81ZQAtDvlBvGDWfnA=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "715dc137b08213aabbbe0965b78ab938e5d8d3b7",
"rev": "2f9fd351ec37f5d479556cd48be4ca340da59b8f",
"type": "github"
},
"original": {
"id": "nixpkgs",
"ref": "nixos-22.11",
"type": "indirect"
}
},
"nixpkgs_stable_old": {
"locked": {
"lastModified": 1659446231,
"narHash": "sha256-hekabNdTdgR/iLsgce5TGWmfIDZ86qjPhxDg/8TlzhE=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "eabc38219184cc3e04a974fe31857d8e0eac098d",
"type": "github"
},
"original": {
@@ -80,11 +95,28 @@
"type": "indirect"
}
},
"nixpkgs_unstable": {
"locked": {
"lastModified": 1673914939,
"narHash": "sha256-CfsyGi3y/ok7se6wd/OD+F8muVRZ1zYdE/0wsV2C/u8=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "341aa70d1e5098d6c01791e1175baa84793b3aae",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"flake-utils": "flake-utils",
"moz_overlay": "moz_overlay",
"nixpkgs": "nixpkgs_2"
"nixpkgs_stable_new": "nixpkgs_stable_new",
"nixpkgs_stable_old": "nixpkgs_stable_old",
"nixpkgs_unstable": "nixpkgs_unstable"
}
}
},

173
flake.nix
View File

@@ -1,119 +1,110 @@
{
description = "Env for Kraken and the extacted Koka bencmarks";
inputs = {
#flake.lock pins a particular version of 21.11 that has non-broken Swift
nixpkgs.url = "nixpkgs/nixos-21.11";
#nixpkgs.url = "github:NixOS/nixpkgs";
# Pure-er, so we don't have to mess with the --impure flag
# For some reason the newer one has broken koka/emscripten (probs same change)
nixpkgs_stable_new.url = "nixpkgs/nixos-22.11";
nixpkgs_stable_old.url = "nixpkgs/nixos-21.11";
nixpkgs_unstable.url = "github:NixOS/nixpkgs";
moz_overlay.url = "github:oxalica/rust-overlay";
#moz_overlay.url = "github:mozilla/nixpkgs-mozilla";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, moz_overlay, flake-utils }:
outputs = { self, nixpkgs_stable_new, nixpkgs_stable_old, nixpkgs_unstable, moz_overlay, flake-utils }:
(flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs {
pkgs_new = import nixpkgs_unstable {
inherit system;
overlays = [ moz_overlay.overlay ];
};
newlisp = pkgs.stdenv.mkDerivation rec {
pname = "newLisp";
version = "10.7.5";
src = pkgs.fetchurl {
url = "http://www.newlisp.org/downloads/newlisp-10.7.5.tgz";
sha256 = "sha256-3C0P9lHCsnW8SvOvi6WYUab7bh6t3CCudftgsekBJuw=";
};
nativeBuildInputs = [
pkgs.autoPatchelfHook
];
buildInputs = [
pkgs.stdenv.cc.cc.lib
pkgs.libffi
pkgs.readline
];
installPhase = ''
mkdir -p $out/bin
cp newlisp $out/bin
'';
meta = with pkgs.lib; {
homepage = "http://www.newlisp.org/index.cgi";
description = "A Lisp-like, general-purpose scripting language";
platforms = platforms.linux;
};
pkgs_old = import nixpkgs_stable_old {
inherit system;
overlays = [ moz_overlay.overlay ];
};
wavm = pkgs.stdenv.mkDerivation rec {
pname = "wavm";
version = "0.0.0";
#newlisp = pkgs.stdenv.mkDerivation rec {
#pname = "newLisp";
#version = "10.7.5";
src = pkgs.fetchurl {
url = "https://github.com/WAVM/WAVM/releases/download/nightly%2F2022-05-14/wavm-0.0.0-prerelease-linux.tar.gz";
sha256 = "sha256-+PpnwPJDty6XCjjuHVFwiHc1q+k0zPF11EbRpqSKfyY=";
};
#src = pkgs.fetchurl {
#url = "http://www.newlisp.org/downloads/newlisp-10.7.5.tgz";
#sha256 = "sha256-3C0P9lHCsnW8SvOvi6WYUab7bh6t3CCudftgsekBJuw=";
#};
nativeBuildInputs = [
pkgs.autoPatchelfHook
];
#nativeBuildInputs = [
#pkgs.autoPatchelfHook
#];
buildInputs = [
pkgs.stdenv.cc.cc.lib
];
#buildInputs = [
#pkgs.stdenv.cc.cc.lib
#pkgs.libffi
#pkgs.readline
#];
sourceRoot = ".";
#installPhase = ''
#mkdir -p $out/bin
#cp newlisp $out/bin
#'';
installPhase = ''
mkdir -p $out/bin
cp -r bin/wavm $out/bin/
cp -r include/ $out
cp -r lib64/ $out
cp -r share/ $out
#install -m755 -D studio-link-standalone-v${version} $out/bin/studio-link
'';
#meta = with pkgs.lib; {
#homepage = "http://www.newlisp.org/index.cgi";
#description = "A Lisp-like, general-purpose scripting language";
#platforms = platforms.linux;
#};
#};
#wavm = pkgs.stdenv.mkDerivation rec {
#pname = "wavm";
#version = "0.0.0";
meta = with pkgs.lib; {
homepage = "https://wavm.github.io/";
description = "WAVM WebAssembly Engine";
platforms = platforms.linux;
};
};
#src = pkgs.fetchurl {
#url = "https://github.com/WAVM/WAVM/releases/download/nightly%2F2022-05-14/wavm-0.0.0-prerelease-linux.tar.gz";
#sha256 = "sha256-+PpnwPJDty6XCjjuHVFwiHc1q+k0zPF11EbRpqSKfyY=";
#};
#nativeBuildInputs = [
#pkgs.autoPatchelfHook
#];
#buildInputs = [
#pkgs.stdenv.cc.cc.lib
#];
#sourceRoot = ".";
#installPhase = ''
#mkdir -p $out/bin
#cp -r bin/wavm $out/bin/
#cp -r include/ $out
#cp -r lib64/ $out
#cp -r share/ $out
##install -m755 -D studio-link-standalone-v${version} $out/bin/studio-link
#'';
#meta = with pkgs.lib; {
#homepage = "https://wavm.github.io/";
#description = "WAVM WebAssembly Engine";
#platforms = platforms.linux;
#};
#};
in {
devShell = pkgs.mkShell {
buildInputs = with pkgs; [
devShell = pkgs_new.mkShell {
buildInputs = with pkgs_new; [
which # used for shell stuff when inside pure env
chicken
hyperfine
graph-cli # is this just for python?!
chicken gambit-unstable chez
#gambit
gambit-unstable
chez
wabt
wasmtime
wasm3
wasmer
leiningen
clang
kakoune
wavm
wabt wasmtime #wavm
#wasm3
hyperfine graph-cli
(rust-bin.stable.latest.default.override {
targets = [ "wasm32-wasi" ];
})
cmake
stack (haskellPackages.ghcWithPackages (p: [p.parallel]))
clang cmake
(rust-bin.stable.latest.default.override { targets = [ "wasm32-wasi" ]; })
#stack (haskellPackages.ghcWithPackages (p: [p.parallel]))
koka
ocaml
jdk
swift
pkgs_old.emscripten
picolisp
newlisp
#picolisp
#newlisp
];
};
}

View File

@@ -1,121 +0,0 @@
# Benchmarks
## cfold_table.md
| Command | Mean [s] | Min [s] | Max [s] | Relative |
|:---|---:|---:|---:|---:|
| `build/kraken/out/bench/kraken-cfold-wavm 20` | 1.262 ± 0.009 | 1.255 | 1.285 | 9.52 ± 0.21 |
| `build/java/out/bench/cfold 20` | 0.357 ± 0.006 | 0.346 | 0.364 | 2.69 ± 0.07 |
| `build/ocaml/ml-cfold 20` | 0.539 ± 0.002 | 0.536 | 0.540 | 4.06 ± 0.09 |
| `build/swift/sw-cfold 20` | 0.864 ± 0.004 | 0.855 | 0.871 | 6.52 ± 0.14 |
| `build/cpp/cpp-cfold 20` | 0.306 ± 0.002 | 0.303 | 0.311 | 2.31 ± 0.05 |
| `build/haskell/hs-cfold 20` | 0.504 ± 0.001 | 0.502 | 0.505 | 3.80 ± 0.08 |
| `build/koka/out/bench/kk-cfold 20` | 0.133 ± 0.003 | 0.129 | 0.139 | 1.00 |
## deriv_table.md
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|:---|---:|---:|---:|---:|
| `build/kraken/out/bench/kraken-deriv 8` | 592.7 ± 15.7 | 579.7 | 622.1 | 41.04 ± 2.42 |
| `build/kraken/out/bench/kraken-deriv-wavm 8` | 407.3 ± 1.0 | 405.6 | 408.8 | 28.21 ± 1.49 |
| `build/java/out/bench/deriv 8` | 120.7 ± 17.4 | 86.7 | 130.2 | 8.36 ± 1.28 |
| `build/ocaml/ml-deriv 8` | 14.4 ± 0.8 | 13.1 | 16.5 | 1.00 |
| `build/swift/sw-deriv 8` | 37.3 ± 0.7 | 35.6 | 39.6 | 2.58 ± 0.15 |
| `build/cpp/cpp-deriv 8` | 20.3 ± 0.7 | 19.4 | 22.2 | 1.41 ± 0.09 |
| `build/haskell/hs-deriv 8` | 35.4 ± 0.8 | 34.1 | 37.1 | 2.45 ± 0.14 |
| `build/koka/out/bench/kk-deriv 8` | 16.6 ± 0.8 | 15.7 | 18.7 | 1.15 ± 0.08 |
## fib_table.md
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|:---|---:|---:|---:|---:|
| `build/kraken/out/bench/kraken-fib-let-wavm 30` | 31.8 ± 1.1 | 30.4 | 38.0 | 12.68 ± 3.23 |
| `build/kraken/out/bench/kraken-fib-wavm 30` | 30.9 ± 0.9 | 29.3 | 34.4 | 12.32 ± 3.13 |
| `build/kraken/out/bench/kraken-fib 30` | 38.9 ± 1.1 | 37.0 | 40.9 | 15.51 ± 3.93 |
| `build/kraken/out/bench/kraken-fib-let 30` | 42.8 ± 0.8 | 40.6 | 44.9 | 17.07 ± 4.32 |
| `build/cpp/cpp-fib 30` | 2.5 ± 0.6 | 2.1 | 5.2 | 1.00 |
| `build/picolisp/out/bench/picolisp-fib-let 30` | 107.8 ± 0.9 | 105.7 | 109.3 | 42.94 ± 10.83 |
| `build/picolisp/out/bench/picolisp-fib 30` | 88.7 ± 1.2 | 86.7 | 91.3 | 35.33 ± 8.92 |
| `build/koka/out/bench/kk-fib 30` | 5.9 ± 0.5 | 5.4 | 8.1 | 2.34 ± 0.62 |
| `build/python/out/bench/python-fib-let 30` | 295.5 ± 11.2 | 278.8 | 306.8 | 117.74 ± 30.03 |
| `build/python/out/bench/python-fib 30` | 284.4 ± 9.8 | 266.3 | 295.7 | 113.32 ± 28.84 |
| `build/scheme/out/bench/scheme-fib 30` | 52.1 ± 1.1 | 50.6 | 55.3 | 20.76 ± 5.25 |
| `build/scheme/out/bench/scheme-fib-let 30` | 53.0 ± 0.9 | 51.4 | 55.2 | 21.11 ± 5.34 |
## nqueens_table.md
| Command | Mean [s] | Min [s] | Max [s] | Relative |
|:---|---:|---:|---:|---:|
| `build/kraken/out/bench/kraken-nqueens 10` | 1.196 ± 0.013 | 1.185 | 1.230 | 272.10 ± 37.86 |
| `build/kraken/out/bench/kraken-nqueens-wavm 10` | 0.863 ± 0.010 | 0.850 | 0.880 | 196.39 ± 27.33 |
| `build/java/out/bench/nqueens 10` | 0.058 ± 0.005 | 0.053 | 0.071 | 13.28 ± 2.20 |
| `build/ocaml/ml-nqueens 10` | 0.005 ± 0.001 | 0.004 | 0.007 | 1.05 ± 0.20 |
| `build/swift/sw-nqueens 10` | 0.016 ± 0.001 | 0.015 | 0.018 | 3.61 ± 0.53 |
| `build/cpp/cpp-nqueens 10` | 0.006 ± 0.000 | 0.005 | 0.008 | 1.34 ± 0.22 |
| `build/haskell/hs-nqueens 10` | 0.036 ± 0.001 | 0.035 | 0.037 | 8.18 ± 1.15 |
| `build/koka/out/bench/kk-nqueens 10` | 0.004 ± 0.001 | 0.004 | 0.007 | 1.00 |
| `build/koka/out/bench/kk-nqueens-int 10` | 0.006 ± 0.001 | 0.006 | 0.008 | 1.47 ± 0.24 |
## rbtree_table.md
| Command | Mean [s] | Min [s] | Max [s] | Relative |
|:---|---:|---:|---:|---:|
| `build/kraken/out/bench/kraken-rbtree-opt 420000` | 5.319 ± 0.335 | 5.120 | 6.119 | 110.82 ± 7.71 |
| `build/kraken/out/bench/kraken-rbtree-wavm 420000` | 7.603 ± 0.085 | 7.545 | 7.826 | 158.41 ± 5.00 |
| `build/kraken/out/bench/kraken-rbtree-opt-wavm 420000` | 2.388 ± 0.024 | 2.370 | 2.427 | 49.75 ± 1.55 |
| `build/kraken/out/bench/kraken-rbtree 420000` | 14.104 ± 0.672 | 13.574 | 15.735 | 293.85 ± 16.47 |
| `build/java/out/bench/rbtree 420000` | 0.205 ± 0.005 | 0.201 | 0.215 | 4.26 ± 0.17 |
| `build/ocaml/ml-rbtree 420000` | 0.084 ± 0.000 | 0.083 | 0.086 | 1.75 ± 0.05 |
| `build/swift/sw-rbtree 420000` | 0.481 ± 0.002 | 0.478 | 0.487 | 10.03 ± 0.30 |
| `build/cpp/cpp-rbtree 420000` | 0.062 ± 0.003 | 0.058 | 0.070 | 1.28 ± 0.07 |
| `build/haskell/hs-rbtree 420000` | 0.165 ± 0.001 | 0.164 | 0.166 | 3.44 ± 0.10 |
| `build/koka/out/bench/kk-rbtree 420000` | 0.048 ± 0.001 | 0.045 | 0.052 | 1.00 |
## slow_fib_table.md
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|:---|---:|---:|---:|---:|
| `slow/newlisp-fib-let 30` | 352.8 ± 3.6 | 345.0 | 356.9 | 11.44 ± 0.38 |
| `slow/kraken-fib-let-slow-wavm 30` | 8754.9 ± 79.1 | 8635.3 | 8940.4 | 283.97 ± 9.38 |
| `slow/kraken-fib-slow-wavm 30` | 3154.1 ± 31.8 | 3112.0 | 3204.9 | 102.31 ± 3.41 |
| `slow/kraken-fib-let-wavm 30` | 31.8 ± 0.8 | 30.1 | 34.5 | 1.03 ± 0.04 |
| `slow/newlisp-fib 30` | 308.3 ± 3.1 | 304.0 | 313.0 | 10.00 ± 0.33 |
| `slow/kraken-fib-wavm 30` | 30.8 ± 1.0 | 29.6 | 33.8 | 1.00 |
| `slow/kraken-fib 30` | 38.7 ± 0.9 | 37.2 | 41.1 | 1.25 ± 0.05 |
| `slow/kraken-fib-let 30` | 42.7 ± 1.0 | 40.8 | 45.5 | 1.38 ± 0.05 |
## slow_ish_rbtree_table.md
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|:---|---:|---:|---:|---:|
| `./slow/kraken-rbtree-opt 890` | 28.9 ± 1.1 | 26.9 | 32.8 | 1.00 |
| `./slow/kraken-rbtree-opt-wavm 890` | 35.9 ± 0.7 | 34.7 | 37.8 | 1.24 ± 0.05 |
| `./slow/newlisp-slow-fexpr-rbtree 890` | 6516.8 ± 15.4 | 6491.3 | 6537.4 | 225.82 ± 8.46 |
| `./slow/newlisp-macro-rbtree 890` | 1003.7 ± 2.4 | 1000.1 | 1008.9 | 34.78 ± 1.30 |
## slow_rbtree_table.md
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|:---|---:|---:|---:|---:|
| `./slow/kraken-rbtree-opt 100` | 24.1 ± 1.0 | 22.2 | 26.7 | 1.88 ± 0.12 |
| `./slow/kraken-rbtree-opt-wavm 100` | 34.7 ± 7.8 | 32.5 | 104.4 | 2.71 ± 0.63 |
| `./slow/newlisp-slow-fexpr-rbtree 100` | 334.7 ± 1.7 | 331.3 | 337.2 | 26.13 ± 1.27 |
| `./slow/newlisp-macro-rbtree 100` | 12.8 ± 0.6 | 12.1 | 15.0 | 1.00 |
| `./slow/kraken-rbtree-slow-wavm 100` | 2501167.5 ± 26231.6 | 2428798.0 | 2514951.4 | 195272.93 ± 9651.02 |

View File

@@ -1,8 +0,0 @@
command,mean,stddev,median,user,system,min,max
build/kraken/out/bench/kraken-cfold-wavm 20,1.2621564595800003,0.008640411915661495,1.2593907364799999,1.13313784,0.118044,1.25479187498,1.28487568498
build/java/out/bench/cfold 20,0.35657448718000007,0.00558577826352044,0.35739406448000005,0.40431914,0.1469187,0.34625631998000006,0.36395965198
build/ocaml/ml-cfold 20,0.5385355318800001,0.001566527327571848,0.53853815098,0.50224824,0.036017,0.53558768298,0.54036365198
build/swift/sw-cfold 20,0.8642314439800002,0.0044482895786414275,0.8649492004800001,0.80760954,0.05612069999999999,0.85469952498,0.8705609119800001
build/cpp/cpp-cfold 20,0.30622296198,0.0024784149826698612,0.30592687648000005,0.21424323999999997,0.0918147,0.30293893898,0.31113143098
build/haskell/hs-cfold 20,0.5037699929799999,0.001091585403056106,0.50399623548,0.4556685399999999,0.04782399999999999,0.50162550498,0.5051531599800001
build/koka/out/bench/kk-cfold 20,0.1326358102981818,0.002816643075142655,0.13199419048,0.09420199454545455,0.03824613636363636,0.12888567098,0.13929317298
1 command mean stddev median user system min max
2 build/kraken/out/bench/kraken-cfold-wavm 20 1.2621564595800003 0.008640411915661495 1.2593907364799999 1.13313784 0.118044 1.25479187498 1.28487568498
3 build/java/out/bench/cfold 20 0.35657448718000007 0.00558577826352044 0.35739406448000005 0.40431914 0.1469187 0.34625631998000006 0.36395965198
4 build/ocaml/ml-cfold 20 0.5385355318800001 0.001566527327571848 0.53853815098 0.50224824 0.036017 0.53558768298 0.54036365198
5 build/swift/sw-cfold 20 0.8642314439800002 0.0044482895786414275 0.8649492004800001 0.80760954 0.05612069999999999 0.85469952498 0.8705609119800001
6 build/cpp/cpp-cfold 20 0.30622296198 0.0024784149826698612 0.30592687648000005 0.21424323999999997 0.0918147 0.30293893898 0.31113143098
7 build/haskell/hs-cfold 20 0.5037699929799999 0.001091585403056106 0.50399623548 0.4556685399999999 0.04782399999999999 0.50162550498 0.5051531599800001
8 build/koka/out/bench/kk-cfold 20 0.1326358102981818 0.002816643075142655 0.13199419048 0.09420199454545455 0.03824613636363636 0.12888567098 0.13929317298

View File

@@ -1,8 +0,0 @@
command,mean,stddev,median,user,system,min,max,relative
build/koka/out/bench/kk-cfold 20,0.1326358102981818,0.002816643075142655,0.13199419048,0.09420199454545455,0.03824613636363636,0.12888567098,0.13929317298,1.0
build/cpp/cpp-cfold 20,0.30622296198,0.0024784149826698612,0.30592687648000005,0.21424323999999997,0.0918147,0.30293893898,0.31113143098,2.3087502635342045
build/java/out/bench/cfold 20,0.35657448718000007,0.00558577826352044,0.35739406448000005,0.40431914,0.1469187,0.34625631998000006,0.36395965198,2.6883726678215805
build/haskell/hs-cfold 20,0.5037699929799999,0.001091585403056106,0.50399623548,0.4556685399999999,0.04782399999999999,0.50162550498,0.5051531599800001,3.798144647719664
build/ocaml/ml-cfold 20,0.5385355318800001,0.001566527327571848,0.53853815098,0.50224824,0.036017,0.53558768298,0.54036365198,4.060257412152158
build/swift/sw-cfold 20,0.8642314439800002,0.0044482895786414275,0.8649492004800001,0.80760954,0.05612069999999999,0.85469952498,0.8705609119800001,6.515822853851462
build/kraken/out/bench/kraken-cfold-wavm 20,1.2621564595800003,0.008640411915661495,1.2593907364799999,1.13313784,0.118044,1.25479187498,1.28487568498,9.515955432718476
1 command mean stddev median user system min max relative
2 build/koka/out/bench/kk-cfold 20 0.1326358102981818 0.002816643075142655 0.13199419048 0.09420199454545455 0.03824613636363636 0.12888567098 0.13929317298 1.0
3 build/cpp/cpp-cfold 20 0.30622296198 0.0024784149826698612 0.30592687648000005 0.21424323999999997 0.0918147 0.30293893898 0.31113143098 2.3087502635342045
4 build/java/out/bench/cfold 20 0.35657448718000007 0.00558577826352044 0.35739406448000005 0.40431914 0.1469187 0.34625631998000006 0.36395965198 2.6883726678215805
5 build/haskell/hs-cfold 20 0.5037699929799999 0.001091585403056106 0.50399623548 0.4556685399999999 0.04782399999999999 0.50162550498 0.5051531599800001 3.798144647719664
6 build/ocaml/ml-cfold 20 0.5385355318800001 0.001566527327571848 0.53853815098 0.50224824 0.036017 0.53558768298 0.54036365198 4.060257412152158
7 build/swift/sw-cfold 20 0.8642314439800002 0.0044482895786414275 0.8649492004800001 0.80760954 0.05612069999999999 0.85469952498 0.8705609119800001 6.515822853851462
8 build/kraken/out/bench/kraken-cfold-wavm 20 1.2621564595800003 0.008640411915661495 1.2593907364799999 1.13313784 0.118044 1.25479187498 1.28487568498 9.515955432718476

View File

@@ -1,9 +0,0 @@
| Command | Mean [s] | Min [s] | Max [s] | Relative |
|:---|---:|---:|---:|---:|
| `build/kraken/out/bench/kraken-cfold-wavm 20` | 1.262 ± 0.009 | 1.255 | 1.285 | 9.52 ± 0.21 |
| `build/java/out/bench/cfold 20` | 0.357 ± 0.006 | 0.346 | 0.364 | 2.69 ± 0.07 |
| `build/ocaml/ml-cfold 20` | 0.539 ± 0.002 | 0.536 | 0.540 | 4.06 ± 0.09 |
| `build/swift/sw-cfold 20` | 0.864 ± 0.004 | 0.855 | 0.871 | 6.52 ± 0.14 |
| `build/cpp/cpp-cfold 20` | 0.306 ± 0.002 | 0.303 | 0.311 | 2.31 ± 0.05 |
| `build/haskell/hs-cfold 20` | 0.504 ± 0.001 | 0.502 | 0.505 | 3.80 ± 0.08 |
| `build/koka/out/bench/kk-cfold 20` | 0.133 ± 0.003 | 0.129 | 0.139 | 1.00 |

View File

@@ -1,9 +0,0 @@
command,mean,stddev,median,user,system,min,max
build/kraken/out/bench/kraken-deriv 8,0.5926659240600001,0.015671919009291355,0.58672073846,0.56475258,0.02802132,0.57974311646,0.62213955046
build/kraken/out/bench/kraken-deriv-wavm 8,0.40733756365999996,0.0009821282489247262,0.40737392896,0.36970888,0.025605619999999996,0.40555148046,0.40877450746
build/java/out/bench/deriv 8,0.12067052941454541,0.017361764256886632,0.12979169095999998,0.10848297090909093,0.032761456363636365,0.08669823646000001,0.13022292646
build/ocaml/ml-deriv 8,0.01444019793904192,0.0007600945529711628,0.014232565459999999,0.011388068622754495,0.0029253649101796393,0.01311326646,0.01648827546
build/swift/sw-deriv 8,0.03732575823333334,0.0007290788778458855,0.03737861746,0.03111240666666666,0.006054553333333333,0.03556797346,0.03963244146
build/cpp/cpp-deriv 8,0.020339155069374996,0.0007414278246101117,0.02017742246,0.0148340284375,0.005368085624999999,0.01940543846,0.02215189446
build/haskell/hs-deriv 8,0.035425201109350636,0.0007980342646148488,0.03550050246,0.029785626753246742,0.0054718719480519465,0.034088684460000004,0.03711976646
build/koka/out/bench/kk-deriv 8,0.016569307715172413,0.0007517508455226539,0.01611368746,0.013344717931034483,0.003070199310344828,0.01573686246,0.01865933346
1 command mean stddev median user system min max
2 build/kraken/out/bench/kraken-deriv 8 0.5926659240600001 0.015671919009291355 0.58672073846 0.56475258 0.02802132 0.57974311646 0.62213955046
3 build/kraken/out/bench/kraken-deriv-wavm 8 0.40733756365999996 0.0009821282489247262 0.40737392896 0.36970888 0.025605619999999996 0.40555148046 0.40877450746
4 build/java/out/bench/deriv 8 0.12067052941454541 0.017361764256886632 0.12979169095999998 0.10848297090909093 0.032761456363636365 0.08669823646000001 0.13022292646
5 build/ocaml/ml-deriv 8 0.01444019793904192 0.0007600945529711628 0.014232565459999999 0.011388068622754495 0.0029253649101796393 0.01311326646 0.01648827546
6 build/swift/sw-deriv 8 0.03732575823333334 0.0007290788778458855 0.03737861746 0.03111240666666666 0.006054553333333333 0.03556797346 0.03963244146
7 build/cpp/cpp-deriv 8 0.020339155069374996 0.0007414278246101117 0.02017742246 0.0148340284375 0.005368085624999999 0.01940543846 0.02215189446
8 build/haskell/hs-deriv 8 0.035425201109350636 0.0007980342646148488 0.03550050246 0.029785626753246742 0.0054718719480519465 0.034088684460000004 0.03711976646
9 build/koka/out/bench/kk-deriv 8 0.016569307715172413 0.0007517508455226539 0.01611368746 0.013344717931034483 0.003070199310344828 0.01573686246 0.01865933346

View File

@@ -1,9 +0,0 @@
command,mean,stddev,median,user,system,min,max,relative
build/ocaml/ml-deriv 8,0.01444019793904192,0.0007600945529711628,0.014232565459999999,0.011388068622754495,0.0029253649101796393,0.01311326646,0.01648827546,1.0
build/koka/out/bench/kk-deriv 8,0.016569307715172413,0.0007517508455226539,0.01611368746,0.013344717931034483,0.003070199310344828,0.01573686246,0.01865933346,1.1474432542488926
build/cpp/cpp-deriv 8,0.020339155069374996,0.0007414278246101117,0.02017742246,0.0148340284375,0.005368085624999999,0.01940543846,0.02215189446,1.4085094370059903
build/haskell/hs-deriv 8,0.035425201109350636,0.0007980342646148488,0.03550050246,0.029785626753246742,0.0054718719480519465,0.034088684460000004,0.03711976646,2.4532351466991753
build/swift/sw-deriv 8,0.03732575823333334,0.0007290788778458855,0.03737861746,0.03111240666666666,0.006054553333333333,0.03556797346,0.03963244146,2.5848508719133134
build/java/out/bench/deriv 8,0.12067052941454541,0.017361764256886632,0.12979169095999998,0.10848297090909093,0.032761456363636365,0.08669823646000001,0.13022292646,8.356570313228799
build/kraken/out/bench/kraken-deriv-wavm 8,0.40733756365999996,0.0009821282489247262,0.40737392896,0.36970888,0.025605619999999996,0.40555148046,0.40877450746,28.2085858780843
build/kraken/out/bench/kraken-deriv 8,0.5926659240600001,0.015671919009291355,0.58672073846,0.56475258,0.02802132,0.57974311646,0.62213955046,41.04278393979704
1 command mean stddev median user system min max relative
2 build/ocaml/ml-deriv 8 0.01444019793904192 0.0007600945529711628 0.014232565459999999 0.011388068622754495 0.0029253649101796393 0.01311326646 0.01648827546 1.0
3 build/koka/out/bench/kk-deriv 8 0.016569307715172413 0.0007517508455226539 0.01611368746 0.013344717931034483 0.003070199310344828 0.01573686246 0.01865933346 1.1474432542488926
4 build/cpp/cpp-deriv 8 0.020339155069374996 0.0007414278246101117 0.02017742246 0.0148340284375 0.005368085624999999 0.01940543846 0.02215189446 1.4085094370059903
5 build/haskell/hs-deriv 8 0.035425201109350636 0.0007980342646148488 0.03550050246 0.029785626753246742 0.0054718719480519465 0.034088684460000004 0.03711976646 2.4532351466991753
6 build/swift/sw-deriv 8 0.03732575823333334 0.0007290788778458855 0.03737861746 0.03111240666666666 0.006054553333333333 0.03556797346 0.03963244146 2.5848508719133134
7 build/java/out/bench/deriv 8 0.12067052941454541 0.017361764256886632 0.12979169095999998 0.10848297090909093 0.032761456363636365 0.08669823646000001 0.13022292646 8.356570313228799
8 build/kraken/out/bench/kraken-deriv-wavm 8 0.40733756365999996 0.0009821282489247262 0.40737392896 0.36970888 0.025605619999999996 0.40555148046 0.40877450746 28.2085858780843
9 build/kraken/out/bench/kraken-deriv 8 0.5926659240600001 0.015671919009291355 0.58672073846 0.56475258 0.02802132 0.57974311646 0.62213955046 41.04278393979704

View File

@@ -1,10 +0,0 @@
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|:---|---:|---:|---:|---:|
| `build/kraken/out/bench/kraken-deriv 8` | 592.7 ± 15.7 | 579.7 | 622.1 | 41.04 ± 2.42 |
| `build/kraken/out/bench/kraken-deriv-wavm 8` | 407.3 ± 1.0 | 405.6 | 408.8 | 28.21 ± 1.49 |
| `build/java/out/bench/deriv 8` | 120.7 ± 17.4 | 86.7 | 130.2 | 8.36 ± 1.28 |
| `build/ocaml/ml-deriv 8` | 14.4 ± 0.8 | 13.1 | 16.5 | 1.00 |
| `build/swift/sw-deriv 8` | 37.3 ± 0.7 | 35.6 | 39.6 | 2.58 ± 0.15 |
| `build/cpp/cpp-deriv 8` | 20.3 ± 0.7 | 19.4 | 22.2 | 1.41 ± 0.09 |
| `build/haskell/hs-deriv 8` | 35.4 ± 0.8 | 34.1 | 37.1 | 2.45 ± 0.14 |
| `build/koka/out/bench/kk-deriv 8` | 16.6 ± 0.8 | 15.7 | 18.7 | 1.15 ± 0.08 |

View File

@@ -1,13 +0,0 @@
command,mean,stddev,median,user,system,min,max
build/kraken/out/bench/kraken-fib-let-wavm 30,0.03181960762551724,0.0011452651359248392,0.031557890660000004,0.023700833793103452,0.007047057011494251,0.030398782660000005,0.03803639566
build/kraken/out/bench/kraken-fib-wavm 30,0.030918793326666673,0.000928676328145603,0.03077728466,0.02248509777777778,0.007249324444444445,0.029288149660000005,0.03444836666
build/kraken/out/bench/kraken-fib 30,0.03893658151915494,0.0010515681229527139,0.03883635966,0.03277791295774647,0.007673601126760562,0.03701147266,0.04091842666
build/kraken/out/bench/kraken-fib-let 30,0.042836191326666676,0.000824112628331353,0.042713493660000004,0.03617710181818181,0.008130216363636363,0.04063806366,0.044874553660000004
build/cpp/cpp-fib 30,0.002509718753235833,0.0006329242444390252,0.0022614686600000004,0.0018724126873857386,0.0006322106764168192,0.0020580746600000004,0.005170380660000001
build/picolisp/out/bench/picolisp-fib-let 30,0.10776150032666665,0.0009226815402447703,0.10776881466,0.10382312370370368,0.0037123022222222226,0.10565573666,0.10932584666
build/picolisp/out/bench/picolisp-fib 30,0.08865807719125,0.0012121985922940507,0.08852848766,0.08488813875000001,0.0035180487500000002,0.08672793966,0.09133525566
build/koka/out/bench/kk-fib 30,0.0058831122724260386,0.0004593408247992408,0.005689903660000001,0.005364798698224853,0.0004990137278106509,0.005406744660000001,0.008101926660000001
build/python/out/bench/python-fib-let 30,0.29550229916,0.01117655962350306,0.30074413116,0.29035832000000006,0.00468668,0.27876866566,0.30682154066
build/python/out/bench/python-fib 30,0.28439971895999994,0.00979890901848185,0.28642411016,0.27906482,0.00498138,0.26628892266,0.29565501166
build/scheme/out/bench/scheme-fib 30,0.05209390788222225,0.001142581920387094,0.051942426160000006,0.03786001259259259,0.014038524444444443,0.05063031766000001,0.055315788660000004
build/scheme/out/bench/scheme-fib-let 30,0.05298147327538462,0.0009319879115699704,0.053112924660000005,0.03899324692307692,0.01375221461538461,0.05143635666,0.055183640660000005
1 command mean stddev median user system min max
2 build/kraken/out/bench/kraken-fib-let-wavm 30 0.03181960762551724 0.0011452651359248392 0.031557890660000004 0.023700833793103452 0.007047057011494251 0.030398782660000005 0.03803639566
3 build/kraken/out/bench/kraken-fib-wavm 30 0.030918793326666673 0.000928676328145603 0.03077728466 0.02248509777777778 0.007249324444444445 0.029288149660000005 0.03444836666
4 build/kraken/out/bench/kraken-fib 30 0.03893658151915494 0.0010515681229527139 0.03883635966 0.03277791295774647 0.007673601126760562 0.03701147266 0.04091842666
5 build/kraken/out/bench/kraken-fib-let 30 0.042836191326666676 0.000824112628331353 0.042713493660000004 0.03617710181818181 0.008130216363636363 0.04063806366 0.044874553660000004
6 build/cpp/cpp-fib 30 0.002509718753235833 0.0006329242444390252 0.0022614686600000004 0.0018724126873857386 0.0006322106764168192 0.0020580746600000004 0.005170380660000001
7 build/picolisp/out/bench/picolisp-fib-let 30 0.10776150032666665 0.0009226815402447703 0.10776881466 0.10382312370370368 0.0037123022222222226 0.10565573666 0.10932584666
8 build/picolisp/out/bench/picolisp-fib 30 0.08865807719125 0.0012121985922940507 0.08852848766 0.08488813875000001 0.0035180487500000002 0.08672793966 0.09133525566
9 build/koka/out/bench/kk-fib 30 0.0058831122724260386 0.0004593408247992408 0.005689903660000001 0.005364798698224853 0.0004990137278106509 0.005406744660000001 0.008101926660000001
10 build/python/out/bench/python-fib-let 30 0.29550229916 0.01117655962350306 0.30074413116 0.29035832000000006 0.00468668 0.27876866566 0.30682154066
11 build/python/out/bench/python-fib 30 0.28439971895999994 0.00979890901848185 0.28642411016 0.27906482 0.00498138 0.26628892266 0.29565501166
12 build/scheme/out/bench/scheme-fib 30 0.05209390788222225 0.001142581920387094 0.051942426160000006 0.03786001259259259 0.014038524444444443 0.05063031766000001 0.055315788660000004
13 build/scheme/out/bench/scheme-fib-let 30 0.05298147327538462 0.0009319879115699704 0.053112924660000005 0.03899324692307692 0.01375221461538461 0.05143635666 0.055183640660000005

View File

@@ -1,13 +0,0 @@
command,mean,stddev,median,user,system,min,max,relative
build/cpp/cpp-fib 30,0.002509718753235833,0.0006329242444390252,0.0022614686600000004,0.0018724126873857386,0.0006322106764168192,0.0020580746600000004,0.005170380660000001,1.0
build/koka/out/bench/kk-fib 30,0.0058831122724260386,0.0004593408247992408,0.005689903660000001,0.005364798698224853,0.0004990137278106509,0.005406744660000001,0.008101926660000001,2.3441320924270177
build/kraken/out/bench/kraken-fib-wavm 30,0.030918793326666673,0.000928676328145603,0.03077728466,0.02248509777777778,0.007249324444444445,0.029288149660000005,0.03444836666,12.319624773414322
build/kraken/out/bench/kraken-fib-let-wavm 30,0.03181960762551724,0.0011452651359248392,0.031557890660000004,0.023700833793103452,0.007047057011494251,0.030398782660000005,0.03803639566,12.678555150648476
build/kraken/out/bench/kraken-fib 30,0.03893658151915494,0.0010515681229527139,0.03883635966,0.03277791295774647,0.007673601126760562,0.03701147266,0.04091842666,15.514320665992232
build/kraken/out/bench/kraken-fib-let 30,0.042836191326666676,0.000824112628331353,0.042713493660000004,0.03617710181818181,0.008130216363636363,0.04063806366,0.044874553660000004,17.06812417584125
build/scheme/out/bench/scheme-fib 30,0.05209390788222225,0.001142581920387094,0.051942426160000006,0.03786001259259259,0.014038524444444443,0.05063031766000001,0.055315788660000004,20.756870790823267
build/scheme/out/bench/scheme-fib-let 30,0.05298147327538462,0.0009319879115699704,0.053112924660000005,0.03899324692307692,0.01375221461538461,0.05143635666,0.055183640660000005,21.110522128056978
build/picolisp/out/bench/picolisp-fib 30,0.08865807719125,0.0012121985922940507,0.08852848766,0.08488813875000001,0.0035180487500000002,0.08672793966,0.09133525566,35.32590138912629
build/picolisp/out/bench/picolisp-fib-let 30,0.10776150032666665,0.0009226815402447703,0.10776881466,0.10382312370370368,0.0037123022222222226,0.10565573666,0.10932584666,42.93767984469475
build/python/out/bench/python-fib 30,0.28439971895999994,0.00979890901848185,0.28642411016,0.27906482,0.00498138,0.26628892266,0.29565501166,113.31935843142482
build/python/out/bench/python-fib-let 30,0.29550229916,0.01117655962350306,0.30074413116,0.29035832000000006,0.00468668,0.27876866566,0.30682154066,117.74319284939904
1 command mean stddev median user system min max relative
2 build/cpp/cpp-fib 30 0.002509718753235833 0.0006329242444390252 0.0022614686600000004 0.0018724126873857386 0.0006322106764168192 0.0020580746600000004 0.005170380660000001 1.0
3 build/koka/out/bench/kk-fib 30 0.0058831122724260386 0.0004593408247992408 0.005689903660000001 0.005364798698224853 0.0004990137278106509 0.005406744660000001 0.008101926660000001 2.3441320924270177
4 build/kraken/out/bench/kraken-fib-wavm 30 0.030918793326666673 0.000928676328145603 0.03077728466 0.02248509777777778 0.007249324444444445 0.029288149660000005 0.03444836666 12.319624773414322
5 build/kraken/out/bench/kraken-fib-let-wavm 30 0.03181960762551724 0.0011452651359248392 0.031557890660000004 0.023700833793103452 0.007047057011494251 0.030398782660000005 0.03803639566 12.678555150648476
6 build/kraken/out/bench/kraken-fib 30 0.03893658151915494 0.0010515681229527139 0.03883635966 0.03277791295774647 0.007673601126760562 0.03701147266 0.04091842666 15.514320665992232
7 build/kraken/out/bench/kraken-fib-let 30 0.042836191326666676 0.000824112628331353 0.042713493660000004 0.03617710181818181 0.008130216363636363 0.04063806366 0.044874553660000004 17.06812417584125
8 build/scheme/out/bench/scheme-fib 30 0.05209390788222225 0.001142581920387094 0.051942426160000006 0.03786001259259259 0.014038524444444443 0.05063031766000001 0.055315788660000004 20.756870790823267
9 build/scheme/out/bench/scheme-fib-let 30 0.05298147327538462 0.0009319879115699704 0.053112924660000005 0.03899324692307692 0.01375221461538461 0.05143635666 0.055183640660000005 21.110522128056978
10 build/picolisp/out/bench/picolisp-fib 30 0.08865807719125 0.0012121985922940507 0.08852848766 0.08488813875000001 0.0035180487500000002 0.08672793966 0.09133525566 35.32590138912629
11 build/picolisp/out/bench/picolisp-fib-let 30 0.10776150032666665 0.0009226815402447703 0.10776881466 0.10382312370370368 0.0037123022222222226 0.10565573666 0.10932584666 42.93767984469475
12 build/python/out/bench/python-fib 30 0.28439971895999994 0.00979890901848185 0.28642411016 0.27906482 0.00498138 0.26628892266 0.29565501166 113.31935843142482
13 build/python/out/bench/python-fib-let 30 0.29550229916 0.01117655962350306 0.30074413116 0.29035832000000006 0.00468668 0.27876866566 0.30682154066 117.74319284939904

View File

@@ -1,14 +0,0 @@
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|:---|---:|---:|---:|---:|
| `build/kraken/out/bench/kraken-fib-let-wavm 30` | 31.8 ± 1.1 | 30.4 | 38.0 | 12.68 ± 3.23 |
| `build/kraken/out/bench/kraken-fib-wavm 30` | 30.9 ± 0.9 | 29.3 | 34.4 | 12.32 ± 3.13 |
| `build/kraken/out/bench/kraken-fib 30` | 38.9 ± 1.1 | 37.0 | 40.9 | 15.51 ± 3.93 |
| `build/kraken/out/bench/kraken-fib-let 30` | 42.8 ± 0.8 | 40.6 | 44.9 | 17.07 ± 4.32 |
| `build/cpp/cpp-fib 30` | 2.5 ± 0.6 | 2.1 | 5.2 | 1.00 |
| `build/picolisp/out/bench/picolisp-fib-let 30` | 107.8 ± 0.9 | 105.7 | 109.3 | 42.94 ± 10.83 |
| `build/picolisp/out/bench/picolisp-fib 30` | 88.7 ± 1.2 | 86.7 | 91.3 | 35.33 ± 8.92 |
| `build/koka/out/bench/kk-fib 30` | 5.9 ± 0.5 | 5.4 | 8.1 | 2.34 ± 0.62 |
| `build/python/out/bench/python-fib-let 30` | 295.5 ± 11.2 | 278.8 | 306.8 | 117.74 ± 30.03 |
| `build/python/out/bench/python-fib 30` | 284.4 ± 9.8 | 266.3 | 295.7 | 113.32 ± 28.84 |
| `build/scheme/out/bench/scheme-fib 30` | 52.1 ± 1.1 | 50.6 | 55.3 | 20.76 ± 5.25 |
| `build/scheme/out/bench/scheme-fib-let 30` | 53.0 ± 0.9 | 51.4 | 55.2 | 21.11 ± 5.34 |

View File

@@ -27,7 +27,7 @@
(f4 (idx l4 (+ i4 2)))
(f4 (idx l4 (+ i4 3)))
)) (+ i4 4))
true (recurse f4 l4 (concat n4 (array (f4 (idx l4 i4)))) (+ i4 1)))))
true (recurse f4 l4 (concat n4 (array (f4 (idx l4 i4)))) (+ 1 i4)))))
(helper f5 l5 (array) 0)))

18
koka_bench/kraken/test.sh Executable file
View File

@@ -0,0 +1,18 @@
#!/usr/bin/env bash
set -e
NUMBER=42000
#rm rbtree.wasm || true
#scheme --script ../../partial_eval.scm rbtree.kp && mv csc_out.wasm rbtree.wasm
#hyperfine --warmup 2 "wasmtime ./rbtree.wasm $NUMBER" "wasmtime ./old_rbtree.wasm $NUMBER"
rm rbtree-opt.wasm || true
scheme --script ../../partial_eval.scm rbtree-opt.kp && mv csc_out.wasm rbtree-opt.wasm
hyperfine --warmup 2 "wasmtime ./rbtree-opt.wasm $NUMBER" "wasmtime ./old_rbtree-opt.wasm $NUMBER"
#rm rbtree.wasm || true
#rm rbtree-opt.wasm || true
#scheme --script ../../partial_eval.scm rbtree.kp && mv csc_out.wasm rbtree.wasm
#scheme --script ../../partial_eval.scm rbtree-opt.kp && mv csc_out.wasm rbtree-opt.wasm
#hyperfine --warmup 2 "wasmtime ./rbtree.wasm $NUMBER" "wasmtime ./rbtree-opt.wasm $NUMBER" "wasmtime ./old_rbtree.wasm $NUMBER" "wasmtime ./old_rbtree-opt.wasm $NUMBER"

66
koka_bench/new_test.sh Executable file
View File

@@ -0,0 +1,66 @@
#!/usr/bin/env bash
set -e
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
pushd "$SCRIPT_DIR"
# Yeet ourselves inside a pure flake shell (-i for ignore-environment)
if [[ -z "${INSIDE_FLAKE}" ]]; then
echo "Not inside flake, entering"
# thanks to https://stackoverflow.com/questions/59895/how-do-i-get-the-directory-where-a-bash-script-is-located-from-within-the-script
echo "about to run nix develop"
nix develop -i -c env INSIDE_FLAKE=true bash -c "$SCRIPT_DIR/new_test.sh"
exit
else
echo "Inside flake, running!"
fi
rm -rf build || true
mkdir build
pushd build
# workaround thanks to https://github.com/NixOS/nixpkgs/issues/139943
cp -r "$(dirname $(dirname $(which emcc)))/share/emscripten/cache" ./emcache
chmod u+rwX -R emcache
export EM_CACHE="$(pwd)/emcache"
#no_compile
#no_lazy_env
#no_y_comb
#no_prim_inline
#no_closure_inline
echo "RB-Tree"
ITERS=420000
scheme --script ../../partial_eval.scm ../kraken/rbtree-opt.kp && mv csc_out.wasm kraken-rbtree-opt.wasm
koka --target=wasm -v -O2 ../koka/rbtree.kk && mv ./.koka/v*/emcc-wasm32-drelease/koka_rbtree.wasm ./
#koka --target=c -v -O2 ../koka/rbtree.kk && mv ./.koka/v*/cc-drelease/koka_rbtree ./
hyperfine --warmup 2 "wasmtime ./koka_rbtree.wasm $ITERS" "wasmtime ./kraken-rbtree-opt.wasm $ITERS" --export-markdown rbtree_table.md --export-csv rbtree_table.csv
echo "Fib"
ITERS=40
scheme --script ../../partial_eval.scm ../kraken/fib.kp && mv csc_out.wasm kraken-fib.wasm
koka --target=wasm -v -O2 ../koka/fib.kk && mv ./.koka/v*/emcc-wasm32-drelease/koka_fib.wasm ./
hyperfine --warmup 2 "wasmtime ./koka_fib.wasm $ITERS" "wasmtime ./kraken-fib.wasm $ITERS" --export-markdown fib_table.md --export-csv fib_table.csv
echo "CFold"
ITERS=9
scheme --script ../../partial_eval.scm ../kraken/cfold.kp && mv csc_out.wasm kraken-cfold.wasm
koka --target=wasm -v -O2 ../koka/cfold.kk && mv ./.koka/v*/emcc-wasm32-drelease/koka_cfold.wasm ./
hyperfine --warmup 2 "wasmtime ./koka_cfold.wasm $ITERS" "wasmtime ./kraken-cfold.wasm $ITERS" --export-markdown cfold_table.md --export-csv cfold_table.csv
echo "N-Queens"
ITERS=10
scheme --script ../../partial_eval.scm ../kraken/nqueens.kp && mv csc_out.wasm kraken-nqueens.wasm
koka --target=wasm -v -O2 ../koka/nqueens.kk && mv ./.koka/v*/emcc-wasm32-drelease/koka_nqueens.wasm ./
hyperfine --warmup 2 "wasmtime ./koka_nqueens.wasm $ITERS" "wasmtime ./kraken-nqueens.wasm $ITERS" --export-markdown nqueens_table.md --export-csv nqueens_table.csv
echo "Deriv"
ITERS=9
scheme --script ../../partial_eval.scm ../kraken/deriv.kp && mv csc_out.wasm kraken-deriv.wasm
koka --target=wasm -v -O2 ../koka/deriv.kk && mv ./.koka/v*/emcc-wasm32-drelease/koka_deriv.wasm ./
hyperfine --warmup 2 "wasmtime ./koka_deriv.wasm $ITERS" "wasmtime ./kraken-deriv.wasm $ITERS" --export-markdown deriv_table.md --export-csv deriv_table.csv
popd
popd

View File

@@ -1,10 +0,0 @@
command,mean,stddev,median,user,system,min,max
build/kraken/out/bench/kraken-nqueens 10,1.19636121408,0.013016063885035612,1.19335900808,1.17315286,0.023507419999999998,1.18544050258,1.2302624585800002
build/kraken/out/bench/kraken-nqueens-wavm 10,0.8634745450799999,0.009705372714724447,0.86542838008,0.83359416,0.021065220000000003,0.84952514358,0.8802923365800001
build/java/out/bench/nqueens 10,0.05836687064976744,0.005330936257647592,0.05591865258,0.039822490232558135,0.024053552558139537,0.05310179458,0.07067794158000001
build/ocaml/ml-nqueens 10,0.004601735168555858,0.000577630460392379,0.00431815858,0.003810435858310624,0.0008569992370572217,0.00412929358,0.006851159580000001
build/swift/sw-nqueens 10,0.015856361522307693,0.0007476976679558368,0.015368299080000002,0.014388534358974359,0.0014337138461538472,0.015108747580000002,0.017575813580000002
build/cpp/cpp-nqueens 10,0.005897589116741212,0.0004970463127740206,0.00566404158,0.004994850734824281,0.0009119492651757191,0.0054777585799999995,0.00770937058
build/haskell/hs-nqueens 10,0.035982979982597384,0.000676971490027155,0.03615113058,0.03319600155844155,0.002702796883116884,0.03459675658,0.03722873058
build/koka/out/bench/kk-nqueens 10,0.0043967425472897234,0.0006098432797481458,0.00415873458,0.0038578263551401868,0.0006252028971962618,0.003935189580000001,0.00726332758
build/koka/out/bench/kk-nqueens-int 10,0.006476511649930072,0.0005270082893349759,0.0062184525800000005,0.005904727832167832,0.0006367033566433565,0.005995675580000001,0.008241744580000002
1 command mean stddev median user system min max
2 build/kraken/out/bench/kraken-nqueens 10 1.19636121408 0.013016063885035612 1.19335900808 1.17315286 0.023507419999999998 1.18544050258 1.2302624585800002
3 build/kraken/out/bench/kraken-nqueens-wavm 10 0.8634745450799999 0.009705372714724447 0.86542838008 0.83359416 0.021065220000000003 0.84952514358 0.8802923365800001
4 build/java/out/bench/nqueens 10 0.05836687064976744 0.005330936257647592 0.05591865258 0.039822490232558135 0.024053552558139537 0.05310179458 0.07067794158000001
5 build/ocaml/ml-nqueens 10 0.004601735168555858 0.000577630460392379 0.00431815858 0.003810435858310624 0.0008569992370572217 0.00412929358 0.006851159580000001
6 build/swift/sw-nqueens 10 0.015856361522307693 0.0007476976679558368 0.015368299080000002 0.014388534358974359 0.0014337138461538472 0.015108747580000002 0.017575813580000002
7 build/cpp/cpp-nqueens 10 0.005897589116741212 0.0004970463127740206 0.00566404158 0.004994850734824281 0.0009119492651757191 0.0054777585799999995 0.00770937058
8 build/haskell/hs-nqueens 10 0.035982979982597384 0.000676971490027155 0.03615113058 0.03319600155844155 0.002702796883116884 0.03459675658 0.03722873058
9 build/koka/out/bench/kk-nqueens 10 0.0043967425472897234 0.0006098432797481458 0.00415873458 0.0038578263551401868 0.0006252028971962618 0.003935189580000001 0.00726332758
10 build/koka/out/bench/kk-nqueens-int 10 0.006476511649930072 0.0005270082893349759 0.0062184525800000005 0.005904727832167832 0.0006367033566433565 0.005995675580000001 0.008241744580000002

View File

@@ -1,10 +0,0 @@
command,mean,stddev,median,user,system,min,max,relative
build/koka/out/bench/kk-nqueens 10,0.0043967425472897234,0.0006098432797481458,0.00415873458,0.0038578263551401868,0.0006252028971962618,0.003935189580000001,0.00726332758,1.0
build/ocaml/ml-nqueens 10,0.004601735168555858,0.000577630460392379,0.00431815858,0.003810435858310624,0.0008569992370572217,0.00412929358,0.006851159580000001,1.0466237490736177
build/cpp/cpp-nqueens 10,0.005897589116741212,0.0004970463127740206,0.00566404158,0.004994850734824281,0.0009119492651757191,0.0054777585799999995,0.00770937058,1.3413542078729748
build/koka/out/bench/kk-nqueens-int 10,0.006476511649930072,0.0005270082893349759,0.0062184525800000005,0.005904727832167832,0.0006367033566433565,0.005995675580000001,0.008241744580000002,1.473024990722365
build/swift/sw-nqueens 10,0.015856361522307693,0.0007476976679558368,0.015368299080000002,0.014388534358974359,0.0014337138461538472,0.015108747580000002,0.017575813580000002,3.6063884459375504
build/haskell/hs-nqueens 10,0.035982979982597384,0.000676971490027155,0.03615113058,0.03319600155844155,0.002702796883116884,0.03459675658,0.03722873058,8.18400886464874
build/java/out/bench/nqueens 10,0.05836687064976744,0.005330936257647592,0.05591865258,0.039822490232558135,0.024053552558139537,0.05310179458,0.07067794158000001,13.275025776923517
build/kraken/out/bench/kraken-nqueens-wavm 10,0.8634745450799999,0.009705372714724447,0.86542838008,0.83359416,0.021065220000000003,0.84952514358,0.8802923365800001,196.38960794105856
build/kraken/out/bench/kraken-nqueens 10,1.19636121408,0.013016063885035612,1.19335900808,1.17315286,0.023507419999999998,1.18544050258,1.2302624585800002,272.10172103833344
1 command mean stddev median user system min max relative
2 build/koka/out/bench/kk-nqueens 10 0.0043967425472897234 0.0006098432797481458 0.00415873458 0.0038578263551401868 0.0006252028971962618 0.003935189580000001 0.00726332758 1.0
3 build/ocaml/ml-nqueens 10 0.004601735168555858 0.000577630460392379 0.00431815858 0.003810435858310624 0.0008569992370572217 0.00412929358 0.006851159580000001 1.0466237490736177
4 build/cpp/cpp-nqueens 10 0.005897589116741212 0.0004970463127740206 0.00566404158 0.004994850734824281 0.0009119492651757191 0.0054777585799999995 0.00770937058 1.3413542078729748
5 build/koka/out/bench/kk-nqueens-int 10 0.006476511649930072 0.0005270082893349759 0.0062184525800000005 0.005904727832167832 0.0006367033566433565 0.005995675580000001 0.008241744580000002 1.473024990722365
6 build/swift/sw-nqueens 10 0.015856361522307693 0.0007476976679558368 0.015368299080000002 0.014388534358974359 0.0014337138461538472 0.015108747580000002 0.017575813580000002 3.6063884459375504
7 build/haskell/hs-nqueens 10 0.035982979982597384 0.000676971490027155 0.03615113058 0.03319600155844155 0.002702796883116884 0.03459675658 0.03722873058 8.18400886464874
8 build/java/out/bench/nqueens 10 0.05836687064976744 0.005330936257647592 0.05591865258 0.039822490232558135 0.024053552558139537 0.05310179458 0.07067794158000001 13.275025776923517
9 build/kraken/out/bench/kraken-nqueens-wavm 10 0.8634745450799999 0.009705372714724447 0.86542838008 0.83359416 0.021065220000000003 0.84952514358 0.8802923365800001 196.38960794105856
10 build/kraken/out/bench/kraken-nqueens 10 1.19636121408 0.013016063885035612 1.19335900808 1.17315286 0.023507419999999998 1.18544050258 1.2302624585800002 272.10172103833344

View File

@@ -1,11 +0,0 @@
| Command | Mean [s] | Min [s] | Max [s] | Relative |
|:---|---:|---:|---:|---:|
| `build/kraken/out/bench/kraken-nqueens 10` | 1.196 ± 0.013 | 1.185 | 1.230 | 272.10 ± 37.86 |
| `build/kraken/out/bench/kraken-nqueens-wavm 10` | 0.863 ± 0.010 | 0.850 | 0.880 | 196.39 ± 27.33 |
| `build/java/out/bench/nqueens 10` | 0.058 ± 0.005 | 0.053 | 0.071 | 13.28 ± 2.20 |
| `build/ocaml/ml-nqueens 10` | 0.005 ± 0.001 | 0.004 | 0.007 | 1.05 ± 0.20 |
| `build/swift/sw-nqueens 10` | 0.016 ± 0.001 | 0.015 | 0.018 | 3.61 ± 0.53 |
| `build/cpp/cpp-nqueens 10` | 0.006 ± 0.000 | 0.005 | 0.008 | 1.34 ± 0.22 |
| `build/haskell/hs-nqueens 10` | 0.036 ± 0.001 | 0.035 | 0.037 | 8.18 ± 1.15 |
| `build/koka/out/bench/kk-nqueens 10` | 0.004 ± 0.001 | 0.004 | 0.007 | 1.00 |
| `build/koka/out/bench/kk-nqueens-int 10` | 0.006 ± 0.001 | 0.006 | 0.008 | 1.47 ± 0.24 |

View File

@@ -1,6 +0,0 @@
command,mean,stddev,median,user,system,min,max
./slow/kraken-rbtree-opt 100,0.024073812766902663,0.00101568872666385,0.023981108820000003,0.013964058938053093,0.010416836283185843,0.022171882820000002,0.026677836820000002
./slow/kraken-rbtree-opt-wavm 100,0.034688892393170745,0.007841371606363657,0.033655831319999996,0.02159911268292682,0.01100518292682927,0.03249684882,0.10438634682000002
./slow/newlisp-slow-fexpr-rbtree 100,0.33467720061999995,0.0017169909863666642,0.33419976582,0.33144182000000005,0.0029782,0.33133876282,0.33724592082
./slow/newlisp-macro-rbtree 100,0.012808572662105267,0.0006186239065595693,0.01251284132,0.009985556842105265,0.0026657263157894733,0.012097865820000001,0.014971716820000001
./slow/kraken-rbtree-slow-wavm 100,2501.1674679941198,26.23156008638233,2511.02493639732,2500.37616872,0.5680571000000001,2428.79803291582,2514.95137303882
1 command mean stddev median user system min max
2 ./slow/kraken-rbtree-opt 100 0.024073812766902663 0.00101568872666385 0.023981108820000003 0.013964058938053093 0.010416836283185843 0.022171882820000002 0.026677836820000002
3 ./slow/kraken-rbtree-opt-wavm 100 0.034688892393170745 0.007841371606363657 0.033655831319999996 0.02159911268292682 0.01100518292682927 0.03249684882 0.10438634682000002
4 ./slow/newlisp-slow-fexpr-rbtree 100 0.33467720061999995 0.0017169909863666642 0.33419976582 0.33144182000000005 0.0029782 0.33133876282 0.33724592082
5 ./slow/newlisp-macro-rbtree 100 0.012808572662105267 0.0006186239065595693 0.01251284132 0.009985556842105265 0.0026657263157894733 0.012097865820000001 0.014971716820000001
6 ./slow/kraken-rbtree-slow-wavm 100 2501.1674679941198 26.23156008638233 2511.02493639732 2500.37616872 0.5680571000000001 2428.79803291582 2514.95137303882

View File

@@ -1,6 +0,0 @@
command,mean,stddev,median,user,system,min,max,relative
./slow/newlisp-macro-rbtree 100,0.012808572662105267,0.0006186239065595693,0.01251284132,0.009985556842105265,0.0026657263157894733,0.012097865820000001,0.014971716820000001,1.0
./slow/kraken-rbtree-opt 100,0.024073812766902663,0.00101568872666385,0.023981108820000003,0.013964058938053093,0.010416836283185843,0.022171882820000002,0.026677836820000002,1.879507842284887
./slow/kraken-rbtree-opt-wavm 100,0.034688892393170745,0.007841371606363657,0.033655831319999996,0.02159911268292682,0.01100518292682927,0.03249684882,0.10438634682000002,2.7082558930082334
./slow/newlisp-slow-fexpr-rbtree 100,0.33467720061999995,0.0017169909863666642,0.33419976582,0.33144182000000005,0.0029782,0.33133876282,0.33724592082,26.129156577309924
./slow/kraken-rbtree-slow-wavm 100,2501.1674679941198,26.23156008638233,2511.02493639732,2500.37616872,0.5680571000000001,2428.79803291582,2514.95137303882,195272.92649819877
1 command mean stddev median user system min max relative
2 ./slow/newlisp-macro-rbtree 100 0.012808572662105267 0.0006186239065595693 0.01251284132 0.009985556842105265 0.0026657263157894733 0.012097865820000001 0.014971716820000001 1.0
3 ./slow/kraken-rbtree-opt 100 0.024073812766902663 0.00101568872666385 0.023981108820000003 0.013964058938053093 0.010416836283185843 0.022171882820000002 0.026677836820000002 1.879507842284887
4 ./slow/kraken-rbtree-opt-wavm 100 0.034688892393170745 0.007841371606363657 0.033655831319999996 0.02159911268292682 0.01100518292682927 0.03249684882 0.10438634682000002 2.7082558930082334
5 ./slow/newlisp-slow-fexpr-rbtree 100 0.33467720061999995 0.0017169909863666642 0.33419976582 0.33144182000000005 0.0029782 0.33133876282 0.33724592082 26.129156577309924
6 ./slow/kraken-rbtree-slow-wavm 100 2501.1674679941198 26.23156008638233 2511.02493639732 2500.37616872 0.5680571000000001 2428.79803291582 2514.95137303882 195272.92649819877

View File

@@ -1,7 +0,0 @@
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|:---|---:|---:|---:|---:|
| `./slow/kraken-rbtree-opt 100` | 24.1 ± 1.0 | 22.2 | 26.7 | 1.88 ± 0.12 |
| `./slow/kraken-rbtree-opt-wavm 100` | 34.7 ± 7.8 | 32.5 | 104.4 | 2.71 ± 0.63 |
| `./slow/newlisp-slow-fexpr-rbtree 100` | 334.7 ± 1.7 | 331.3 | 337.2 | 26.13 ± 1.27 |
| `./slow/newlisp-macro-rbtree 100` | 12.8 ± 0.6 | 12.1 | 15.0 | 1.00 |
| `./slow/kraken-rbtree-slow-wavm 100` | 2501167.5 ± 26231.6 | 2428798.0 | 2514951.4 | 195272.93 ± 9651.02 |

View File

@@ -1,11 +0,0 @@
command,mean,stddev,median,user,system,min,max
build/kraken/out/bench/kraken-rbtree-opt 420000,5.31925239708,0.3349988125683587,5.14052044018,5.1289582199999995,0.19030451999999998,5.119997754180001,6.1186545401800005
build/kraken/out/bench/kraken-rbtree-wavm 420000,7.603207084680001,0.08532599178431961,7.56256009118,7.364062819999999,0.19609051999999996,7.54500121418,7.82634368618
build/kraken/out/bench/kraken-rbtree-opt-wavm 420000,2.38786697048,0.024027067473493164,2.37399108918,2.18655812,0.17421282,2.37013181018,2.42730367318
build/kraken/out/bench/kraken-rbtree 420000,14.103996714480001,0.6716953370649333,13.862458608179999,13.879761419999998,0.22387711999999996,13.57410318018,15.734669132179999
build/java/out/bench/rbtree 420000,0.20452481833384614,0.005494893712175741,0.20184439718000002,0.1633610507692308,0.08549068153846152,0.20064960218,0.21500799618000002
build/ocaml/ml-rbtree 420000,0.08404845703294117,0.0004965078984563921,0.08389702468000002,0.07837808470588233,0.005522072941176472,0.08343194518000001,0.08558860818
build/swift/sw-rbtree 420000,0.48127939458,0.002468656281248806,0.48110524718000003,0.47217482000000005,0.00883322,0.47831013518000004,0.48734295218000007
build/cpp/cpp-rbtree 420000,0.06167631024249998,0.002866280729154884,0.06073653918,0.056175653333333325,0.005363282499999998,0.05818080818,0.07026982618000001
build/haskell/hs-rbtree 420000,0.1650659297682353,0.0007316071227665543,0.16494317018000001,0.1528258788235294,0.012111984705882354,0.16393611218,0.16621976618
build/koka/out/bench/kk-rbtree 420000,0.04799795884666668,0.0014174284429626085,0.04771546118,0.042882170877192975,0.005030605964912281,0.04521208018,0.052173015180000004
1 command mean stddev median user system min max
2 build/kraken/out/bench/kraken-rbtree-opt 420000 5.31925239708 0.3349988125683587 5.14052044018 5.1289582199999995 0.19030451999999998 5.119997754180001 6.1186545401800005
3 build/kraken/out/bench/kraken-rbtree-wavm 420000 7.603207084680001 0.08532599178431961 7.56256009118 7.364062819999999 0.19609051999999996 7.54500121418 7.82634368618
4 build/kraken/out/bench/kraken-rbtree-opt-wavm 420000 2.38786697048 0.024027067473493164 2.37399108918 2.18655812 0.17421282 2.37013181018 2.42730367318
5 build/kraken/out/bench/kraken-rbtree 420000 14.103996714480001 0.6716953370649333 13.862458608179999 13.879761419999998 0.22387711999999996 13.57410318018 15.734669132179999
6 build/java/out/bench/rbtree 420000 0.20452481833384614 0.005494893712175741 0.20184439718000002 0.1633610507692308 0.08549068153846152 0.20064960218 0.21500799618000002
7 build/ocaml/ml-rbtree 420000 0.08404845703294117 0.0004965078984563921 0.08389702468000002 0.07837808470588233 0.005522072941176472 0.08343194518000001 0.08558860818
8 build/swift/sw-rbtree 420000 0.48127939458 0.002468656281248806 0.48110524718000003 0.47217482000000005 0.00883322 0.47831013518000004 0.48734295218000007
9 build/cpp/cpp-rbtree 420000 0.06167631024249998 0.002866280729154884 0.06073653918 0.056175653333333325 0.005363282499999998 0.05818080818 0.07026982618000001
10 build/haskell/hs-rbtree 420000 0.1650659297682353 0.0007316071227665543 0.16494317018000001 0.1528258788235294 0.012111984705882354 0.16393611218 0.16621976618
11 build/koka/out/bench/kk-rbtree 420000 0.04799795884666668 0.0014174284429626085 0.04771546118 0.042882170877192975 0.005030605964912281 0.04521208018 0.052173015180000004

View File

@@ -1,11 +0,0 @@
command,mean,stddev,median,user,system,min,max,relative
build/koka/out/bench/kk-rbtree 420000,0.04799795884666668,0.0014174284429626085,0.04771546118,0.042882170877192975,0.005030605964912281,0.04521208018,0.052173015180000004,1.0
build/cpp/cpp-rbtree 420000,0.06167631024249998,0.002866280729154884,0.06073653918,0.056175653333333325,0.005363282499999998,0.05818080818,0.07026982618000001,1.2849777724825735
build/ocaml/ml-rbtree 420000,0.08404845703294117,0.0004965078984563921,0.08389702468000002,0.07837808470588233,0.005522072941176472,0.08343194518000001,0.08558860818,1.7510839846636121
build/haskell/hs-rbtree 420000,0.1650659297682353,0.0007316071227665543,0.16494317018000001,0.1528258788235294,0.012111984705882354,0.16393611218,0.16621976618,3.4390197778107945
build/java/out/bench/rbtree 420000,0.20452481833384614,0.005494893712175741,0.20184439718000002,0.1633610507692308,0.08549068153846152,0.20064960218,0.21500799618000002,4.2611149150574725
build/swift/sw-rbtree 420000,0.48127939458,0.002468656281248806,0.48110524718000003,0.47217482000000005,0.00883322,0.47831013518000004,0.48734295218000007,10.027080445597395
build/kraken/out/bench/kraken-rbtree-opt-wavm 420000,2.38786697048,0.024027067473493164,2.37399108918,2.18655812,0.17421282,2.37013181018,2.42730367318,49.74934409415684
build/kraken/out/bench/kraken-rbtree-opt 420000,5.31925239708,0.3349988125683587,5.14052044018,5.1289582199999995,0.19030451999999998,5.119997754180001,6.1186545401800005,110.82247089033051
build/kraken/out/bench/kraken-rbtree-wavm 420000,7.603207084680001,0.08532599178431961,7.56256009118,7.364062819999999,0.19609051999999996,7.54500121418,7.82634368618,158.40688369622245
build/kraken/out/bench/kraken-rbtree 420000,14.103996714480001,0.6716953370649333,13.862458608179999,13.879761419999998,0.22387711999999996,13.57410318018,15.734669132179999,293.8457603902771
1 command mean stddev median user system min max relative
2 build/koka/out/bench/kk-rbtree 420000 0.04799795884666668 0.0014174284429626085 0.04771546118 0.042882170877192975 0.005030605964912281 0.04521208018 0.052173015180000004 1.0
3 build/cpp/cpp-rbtree 420000 0.06167631024249998 0.002866280729154884 0.06073653918 0.056175653333333325 0.005363282499999998 0.05818080818 0.07026982618000001 1.2849777724825735
4 build/ocaml/ml-rbtree 420000 0.08404845703294117 0.0004965078984563921 0.08389702468000002 0.07837808470588233 0.005522072941176472 0.08343194518000001 0.08558860818 1.7510839846636121
5 build/haskell/hs-rbtree 420000 0.1650659297682353 0.0007316071227665543 0.16494317018000001 0.1528258788235294 0.012111984705882354 0.16393611218 0.16621976618 3.4390197778107945
6 build/java/out/bench/rbtree 420000 0.20452481833384614 0.005494893712175741 0.20184439718000002 0.1633610507692308 0.08549068153846152 0.20064960218 0.21500799618000002 4.2611149150574725
7 build/swift/sw-rbtree 420000 0.48127939458 0.002468656281248806 0.48110524718000003 0.47217482000000005 0.00883322 0.47831013518000004 0.48734295218000007 10.027080445597395
8 build/kraken/out/bench/kraken-rbtree-opt-wavm 420000 2.38786697048 0.024027067473493164 2.37399108918 2.18655812 0.17421282 2.37013181018 2.42730367318 49.74934409415684
9 build/kraken/out/bench/kraken-rbtree-opt 420000 5.31925239708 0.3349988125683587 5.14052044018 5.1289582199999995 0.19030451999999998 5.119997754180001 6.1186545401800005 110.82247089033051
10 build/kraken/out/bench/kraken-rbtree-wavm 420000 7.603207084680001 0.08532599178431961 7.56256009118 7.364062819999999 0.19609051999999996 7.54500121418 7.82634368618 158.40688369622245
11 build/kraken/out/bench/kraken-rbtree 420000 14.103996714480001 0.6716953370649333 13.862458608179999 13.879761419999998 0.22387711999999996 13.57410318018 15.734669132179999 293.8457603902771

View File

@@ -1,12 +0,0 @@
| Command | Mean [s] | Min [s] | Max [s] | Relative |
|:---|---:|---:|---:|---:|
| `build/kraken/out/bench/kraken-rbtree-opt 420000` | 5.319 ± 0.335 | 5.120 | 6.119 | 110.82 ± 7.71 |
| `build/kraken/out/bench/kraken-rbtree-wavm 420000` | 7.603 ± 0.085 | 7.545 | 7.826 | 158.41 ± 5.00 |
| `build/kraken/out/bench/kraken-rbtree-opt-wavm 420000` | 2.388 ± 0.024 | 2.370 | 2.427 | 49.75 ± 1.55 |
| `build/kraken/out/bench/kraken-rbtree 420000` | 14.104 ± 0.672 | 13.574 | 15.735 | 293.85 ± 16.47 |
| `build/java/out/bench/rbtree 420000` | 0.205 ± 0.005 | 0.201 | 0.215 | 4.26 ± 0.17 |
| `build/ocaml/ml-rbtree 420000` | 0.084 ± 0.000 | 0.083 | 0.086 | 1.75 ± 0.05 |
| `build/swift/sw-rbtree 420000` | 0.481 ± 0.002 | 0.478 | 0.487 | 10.03 ± 0.30 |
| `build/cpp/cpp-rbtree 420000` | 0.062 ± 0.003 | 0.058 | 0.070 | 1.28 ± 0.07 |
| `build/haskell/hs-rbtree 420000` | 0.165 ± 0.001 | 0.164 | 0.166 | 3.44 ± 0.10 |
| `build/koka/out/bench/kk-rbtree 420000` | 0.048 ± 0.001 | 0.045 | 0.052 | 1.00 |

View File

@@ -1,9 +0,0 @@
command,mean,stddev,median,user,system,min,max
slow/newlisp-fib-let 30,0.35278714856,0.003582673299334197,0.35351408886,0.34983320000000007,0.0027236399999999994,0.34496016636,0.35693083636
slow/kraken-fib-let-slow-wavm 30,8.754898901459999,0.07909160701917145,8.745499961859998,8.698452499999998,0.00766424,8.63531548136,8.94044194336
slow/kraken-fib-slow-wavm 30,3.1541494835600004,0.03184683066376855,3.15320478736,3.1101357,0.005756239999999998,3.11203098636,3.2048651933600003
slow/kraken-fib-let-wavm 30,0.031773318467142854,0.000840390301131736,0.031628002860000004,0.023603545238095235,0.007084359047619045,0.03006603536,0.03445624236
slow/newlisp-fib 30,0.30830525255999996,0.0030724920421244676,0.30762596086,0.30525209999999997,0.00282474,0.30399827236,0.31303751135999996
slow/kraken-fib-wavm 30,0.030830056166818196,0.000979772131088745,0.030573067860000004,0.022655052272727273,0.0069862627272727264,0.02959692136,0.033764539360000005
slow/kraken-fib 30,0.038683845426666676,0.0008881692760578456,0.038567545360000004,0.03223380666666667,0.00796338,0.03720691336,0.041057437360000004
slow/kraken-fib-let 30,0.042657774585806454,0.000996895260201283,0.042579403360000004,0.0362714258064516,0.007971127096774193,0.04082327436,0.04550403036
1 command mean stddev median user system min max
2 slow/newlisp-fib-let 30 0.35278714856 0.003582673299334197 0.35351408886 0.34983320000000007 0.0027236399999999994 0.34496016636 0.35693083636
3 slow/kraken-fib-let-slow-wavm 30 8.754898901459999 0.07909160701917145 8.745499961859998 8.698452499999998 0.00766424 8.63531548136 8.94044194336
4 slow/kraken-fib-slow-wavm 30 3.1541494835600004 0.03184683066376855 3.15320478736 3.1101357 0.005756239999999998 3.11203098636 3.2048651933600003
5 slow/kraken-fib-let-wavm 30 0.031773318467142854 0.000840390301131736 0.031628002860000004 0.023603545238095235 0.007084359047619045 0.03006603536 0.03445624236
6 slow/newlisp-fib 30 0.30830525255999996 0.0030724920421244676 0.30762596086 0.30525209999999997 0.00282474 0.30399827236 0.31303751135999996
7 slow/kraken-fib-wavm 30 0.030830056166818196 0.000979772131088745 0.030573067860000004 0.022655052272727273 0.0069862627272727264 0.02959692136 0.033764539360000005
8 slow/kraken-fib 30 0.038683845426666676 0.0008881692760578456 0.038567545360000004 0.03223380666666667 0.00796338 0.03720691336 0.041057437360000004
9 slow/kraken-fib-let 30 0.042657774585806454 0.000996895260201283 0.042579403360000004 0.0362714258064516 0.007971127096774193 0.04082327436 0.04550403036

View File

@@ -1,9 +0,0 @@
command,mean,stddev,median,user,system,min,max,relative
slow/kraken-fib-wavm 30,0.030830056166818196,0.000979772131088745,0.030573067860000004,0.022655052272727273,0.0069862627272727264,0.02959692136,0.033764539360000005,1.0
slow/kraken-fib-let-wavm 30,0.031773318467142854,0.000840390301131736,0.031628002860000004,0.023603545238095235,0.007084359047619045,0.03006603536,0.03445624236,1.030595542713927
slow/kraken-fib 30,0.038683845426666676,0.0008881692760578456,0.038567545360000004,0.03223380666666667,0.00796338,0.03720691336,0.041057437360000004,1.2547445654121565
slow/kraken-fib-let 30,0.042657774585806454,0.000996895260201283,0.042579403360000004,0.0362714258064516,0.007971127096774193,0.04082327436,0.04550403036,1.3836424544603394
slow/newlisp-fib 30,0.30830525255999996,0.0030724920421244676,0.30762596086,0.30525209999999997,0.00282474,0.30399827236,0.31303751135999996,10.000152153203764
slow/newlisp-fib-let 30,0.35278714856,0.003582673299334197,0.35351408886,0.34983320000000007,0.0027236399999999994,0.34496016636,0.35693083636,11.442961590828956
slow/kraken-fib-slow-wavm 30,3.1541494835600004,0.03184683066376855,3.15320478736,3.1101357,0.005756239999999998,3.11203098636,3.2048651933600003,102.30761392367334
slow/kraken-fib-let-slow-wavm 30,8.754898901459999,0.07909160701917145,8.745499961859998,8.698452499999998,0.00766424,8.63531548136,8.94044194336,283.9728495494189
1 command mean stddev median user system min max relative
2 slow/kraken-fib-wavm 30 0.030830056166818196 0.000979772131088745 0.030573067860000004 0.022655052272727273 0.0069862627272727264 0.02959692136 0.033764539360000005 1.0
3 slow/kraken-fib-let-wavm 30 0.031773318467142854 0.000840390301131736 0.031628002860000004 0.023603545238095235 0.007084359047619045 0.03006603536 0.03445624236 1.030595542713927
4 slow/kraken-fib 30 0.038683845426666676 0.0008881692760578456 0.038567545360000004 0.03223380666666667 0.00796338 0.03720691336 0.041057437360000004 1.2547445654121565
5 slow/kraken-fib-let 30 0.042657774585806454 0.000996895260201283 0.042579403360000004 0.0362714258064516 0.007971127096774193 0.04082327436 0.04550403036 1.3836424544603394
6 slow/newlisp-fib 30 0.30830525255999996 0.0030724920421244676 0.30762596086 0.30525209999999997 0.00282474 0.30399827236 0.31303751135999996 10.000152153203764
7 slow/newlisp-fib-let 30 0.35278714856 0.003582673299334197 0.35351408886 0.34983320000000007 0.0027236399999999994 0.34496016636 0.35693083636 11.442961590828956
8 slow/kraken-fib-slow-wavm 30 3.1541494835600004 0.03184683066376855 3.15320478736 3.1101357 0.005756239999999998 3.11203098636 3.2048651933600003 102.30761392367334
9 slow/kraken-fib-let-slow-wavm 30 8.754898901459999 0.07909160701917145 8.745499961859998 8.698452499999998 0.00766424 8.63531548136 8.94044194336 283.9728495494189

View File

@@ -1,10 +0,0 @@
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|:---|---:|---:|---:|---:|
| `slow/newlisp-fib-let 30` | 352.8 ± 3.6 | 345.0 | 356.9 | 11.44 ± 0.38 |
| `slow/kraken-fib-let-slow-wavm 30` | 8754.9 ± 79.1 | 8635.3 | 8940.4 | 283.97 ± 9.38 |
| `slow/kraken-fib-slow-wavm 30` | 3154.1 ± 31.8 | 3112.0 | 3204.9 | 102.31 ± 3.41 |
| `slow/kraken-fib-let-wavm 30` | 31.8 ± 0.8 | 30.1 | 34.5 | 1.03 ± 0.04 |
| `slow/newlisp-fib 30` | 308.3 ± 3.1 | 304.0 | 313.0 | 10.00 ± 0.33 |
| `slow/kraken-fib-wavm 30` | 30.8 ± 1.0 | 29.6 | 33.8 | 1.00 |
| `slow/kraken-fib 30` | 38.7 ± 0.9 | 37.2 | 41.1 | 1.25 ± 0.05 |
| `slow/kraken-fib-let 30` | 42.7 ± 1.0 | 40.8 | 45.5 | 1.38 ± 0.05 |

View File

@@ -1,5 +0,0 @@
command,mean,stddev,median,user,system,min,max
./slow/kraken-rbtree-opt 890,0.028858574056842112,0.0010792063880742354,0.02871603632,0.018728634736842102,0.010397546315789475,0.026890857320000003,0.03280110632
./slow/kraken-rbtree-opt-wavm 890,0.0358968304238961,0.0007304344407639161,0.03579772732,0.02372153480519481,0.010858762857142858,0.03467246532,0.03778242732
./slow/newlisp-slow-fexpr-rbtree 890,6.516844599920001,0.015387330949067515,6.519502710819999,6.477723739999999,0.038728519999999995,6.49131463232,6.53738309332
./slow/newlisp-macro-rbtree 890,1.00366118492,0.002375809996798342,1.00352140382,0.9717198400000001,0.031717619999999995,1.00011486032,1.00887062132
1 command mean stddev median user system min max
2 ./slow/kraken-rbtree-opt 890 0.028858574056842112 0.0010792063880742354 0.02871603632 0.018728634736842102 0.010397546315789475 0.026890857320000003 0.03280110632
3 ./slow/kraken-rbtree-opt-wavm 890 0.0358968304238961 0.0007304344407639161 0.03579772732 0.02372153480519481 0.010858762857142858 0.03467246532 0.03778242732
4 ./slow/newlisp-slow-fexpr-rbtree 890 6.516844599920001 0.015387330949067515 6.519502710819999 6.477723739999999 0.038728519999999995 6.49131463232 6.53738309332
5 ./slow/newlisp-macro-rbtree 890 1.00366118492 0.002375809996798342 1.00352140382 0.9717198400000001 0.031717619999999995 1.00011486032 1.00887062132

View File

@@ -1,5 +0,0 @@
command,mean,stddev,median,user,system,min,max,relative
./slow/kraken-rbtree-opt 890,0.028858574056842112,0.0010792063880742354,0.02871603632,0.018728634736842102,0.010397546315789475,0.026890857320000003,0.03280110632,1.0
./slow/kraken-rbtree-opt-wavm 890,0.0358968304238961,0.0007304344407639161,0.03579772732,0.02372153480519481,0.010858762857142858,0.03467246532,0.03778242732,1.2438878772454554
./slow/newlisp-macro-rbtree 890,1.00366118492,0.002375809996798342,1.00352140382,0.9717198400000001,0.031717619999999995,1.00011486032,1.00887062132,34.77861321017144
./slow/newlisp-slow-fexpr-rbtree 890,6.516844599920001,0.015387330949067515,6.519502710819999,6.477723739999999,0.038728519999999995,6.49131463232,6.53738309332,225.8200487343523
1 command mean stddev median user system min max relative
2 ./slow/kraken-rbtree-opt 890 0.028858574056842112 0.0010792063880742354 0.02871603632 0.018728634736842102 0.010397546315789475 0.026890857320000003 0.03280110632 1.0
3 ./slow/kraken-rbtree-opt-wavm 890 0.0358968304238961 0.0007304344407639161 0.03579772732 0.02372153480519481 0.010858762857142858 0.03467246532 0.03778242732 1.2438878772454554
4 ./slow/newlisp-macro-rbtree 890 1.00366118492 0.002375809996798342 1.00352140382 0.9717198400000001 0.031717619999999995 1.00011486032 1.00887062132 34.77861321017144
5 ./slow/newlisp-slow-fexpr-rbtree 890 6.516844599920001 0.015387330949067515 6.519502710819999 6.477723739999999 0.038728519999999995 6.49131463232 6.53738309332 225.8200487343523

View File

@@ -1,6 +0,0 @@
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|:---|---:|---:|---:|---:|
| `./slow/kraken-rbtree-opt 890` | 28.9 ± 1.1 | 26.9 | 32.8 | 1.00 |
| `./slow/kraken-rbtree-opt-wavm 890` | 35.9 ± 0.7 | 34.7 | 37.8 | 1.24 ± 0.05 |
| `./slow/newlisp-slow-fexpr-rbtree 890` | 6516.8 ± 15.4 | 6491.3 | 6537.4 | 225.82 ± 8.46 |
| `./slow/newlisp-macro-rbtree 890` | 1003.7 ± 2.4 | 1000.1 | 1008.9 | 34.78 ± 1.30 |

View File

@@ -1,4 +0,0 @@
command,mean,stddev,median,user,system,min,max
./slow/kraken-rbtree-opt 100,0.024073812766902663,0.00101568872666385,0.023981108820000003,0.013964058938053093,0.010416836283185843,0.022171882820000002,0.026677836820000002
./slow/kraken-rbtree-opt-wavm 100,0.034688892393170745,0.007841371606363657,0.033655831319999996,0.02159911268292682,0.01100518292682927,0.03249684882,0.10438634682000002
./slow/kraken-rbtree-slow-wavm 100,2501.1674679941198,26.23156008638233,2511.02493639732,2500.37616872,0.5680571000000001,2428.79803291582,2514.95137303882
1 command mean stddev median user system min max
2 ./slow/kraken-rbtree-opt 100 0.024073812766902663 0.00101568872666385 0.023981108820000003 0.013964058938053093 0.010416836283185843 0.022171882820000002 0.026677836820000002
3 ./slow/kraken-rbtree-opt-wavm 100 0.034688892393170745 0.007841371606363657 0.033655831319999996 0.02159911268292682 0.01100518292682927 0.03249684882 0.10438634682000002
4 ./slow/kraken-rbtree-slow-wavm 100 2501.1674679941198 26.23156008638233 2511.02493639732 2500.37616872 0.5680571000000001 2428.79803291582 2514.95137303882

View File

@@ -1,4 +0,0 @@
command,mean,stddev,median,user,system,min,max,relative
./slow/kraken-rbtree-opt 100,0.024073812766902663,0.00101568872666385,0.023981108820000003,0.013964058938053093,0.010416836283185843,0.022171882820000002,0.026677836820000002,1.0
./slow/kraken-rbtree-opt-wavm 100,0.034688892393170745,0.007841371606363657,0.033655831319999996,0.02159911268292682,0.01100518292682927,0.03249684882,0.10438634682000002,1.440938862865212
./slow/kraken-rbtree-slow-wavm 100,2501.1674679941198,26.23156008638233,2511.02493639732,2500.37616872,0.5680571000000001,2428.79803291582,2514.95137303882,103895.77638623131
1 command mean stddev median user system min max relative
2 ./slow/kraken-rbtree-opt 100 0.024073812766902663 0.00101568872666385 0.023981108820000003 0.013964058938053093 0.010416836283185843 0.022171882820000002 0.026677836820000002 1.0
3 ./slow/kraken-rbtree-opt-wavm 100 0.034688892393170745 0.007841371606363657 0.033655831319999996 0.02159911268292682 0.01100518292682927 0.03249684882 0.10438634682000002 1.440938862865212
4 ./slow/kraken-rbtree-slow-wavm 100 2501.1674679941198 26.23156008638233 2511.02493639732 2500.37616872 0.5680571000000001 2428.79803291582 2514.95137303882 103895.77638623131

View File

@@ -265,7 +265,6 @@
(.comb_params (lambda (x) (idx x 7)))
(.comb_body (lambda (x) (idx x 8)))
(.comb_wrap_level (lambda (x) (idx x 2)))
(.comb_rec_hashes (lambda (x) (idx x 9)))
(.prim_comb_sym (lambda (x) (idx x 3)))
(.prim_comb_handler (lambda (x) (idx x 2)))
@@ -431,22 +430,15 @@
(marked_val (lambda (x) (array 'val (hash_val x) x)))
(marked_comb (lambda (wrap_level env_id de? se variadic params body rec_hash) (array 'comb (hash_comb wrap_level env_id de? se variadic params body) wrap_level env_id de? se variadic params body rec_hash)))
(marked_comb (lambda (wrap_level env_id de? se variadic params body) (array 'comb (hash_comb wrap_level env_id de? se variadic params body) wrap_level env_id de? se variadic params body)))
(marked_prim_comb (lambda (handler_fun real_or_name wrap_level val_head_ok) (array 'prim_comb (hash_prim_comb handler_fun real_or_name wrap_level val_head_ok) handler_fun real_or_name wrap_level val_head_ok)))
(with_wrap_level (lambda (x new_wrap) (cond ((prim_comb? x) (dlet (((handler_fun real_or_name wrap_level val_head_ok) (.prim_comb x)))
(marked_prim_comb handler_fun real_or_name new_wrap val_head_ok)))
((comb? x) (dlet (((wrap_level env_id de? se variadic params body rec_hash) (.comb x)))
(marked_comb new_wrap env_id de? se variadic params body rec_hash)))
((comb? x) (dlet (((wrap_level env_id de? se variadic params body) (.comb x)))
(marked_comb new_wrap env_id de? se variadic params body)))
(true (error "bad with_wrap_level")))))
(add_hash_if_comb (lambda (new_hash x) (cond ((comb? x) (dlet (
((wrap_level env_id de? se variadic params body rec_hash) (.comb x))
) (marked_comb wrap_level env_id de? se variadic params body (cons (array new_hash wrap_level) rec_hash))))
(true x))))
(later_head? (rec-lambda recurse (x) (or (and (marked_array? x) (or (= false (.marked_array_is_val x)) (foldl (lambda (a x) (or a (recurse x))) false (.marked_array_values x))))
(and (marked_symbol? x) (= false (.marked_symbol_is_val x)))
@@ -496,10 +488,10 @@
(array (true_str "<a" (.marked_array_is_attempted x) ",r" (needed_for_progress x) "~" (.marked_array_this_rec_stop x) "~*" (.hash x) "*>" stripped_values) done_envs))))
((marked_symbol? x) (mif (.marked_symbol_is_val x) (array (true_str "'" (.marked_symbol_value x)) done_envs)
(array (true_str (.marked_symbol_needed_for_progress x) "#" (.marked_symbol_value x)) done_envs)))
((comb? x) (dlet (((wrap_level env_id de? se variadic params body rec_hash) (.comb x))
((comb? x) (dlet (((wrap_level env_id de? se variadic params body) (.comb x))
((se_s done_envs) (recurse se done_envs))
((body_s done_envs) (recurse body done_envs)))
(array (true_str "<n " (needed_for_progress x) " (comb " wrap_level " " env_id " " rec_hash " " se_s " " de? " " params " " body_s ")>") done_envs)))
(array (true_str "<n " (needed_for_progress x) " (comb " wrap_level " " env_id " " se_s " " de? " " params " " body_s ")>") done_envs)))
((prim_comb? x) (array (true_str "<wl=" (.prim_comb_wrap_level x) " " (.prim_comb_sym x) ">") done_envs))
((marked_env? x) (dlet ((e (.env_marked x))
(index (.marked_env_idx x))
@@ -597,7 +589,7 @@
((prim_comb? x) (array memo false))
((val? x) (array memo false))
((comb? x) (dlet (
((wrap_level i_env_id de? se variadic params body rec_hash) (.comb x))
((wrap_level i_env_id de? se variadic params body) (.comb x))
((memo in_se) (check_for_env_id_in_result memo s_env_id se))
((memo total) (if (and (not in_se) (!= s_env_id i_env_id)) (check_for_env_id_in_result memo s_env_id body)
(array memo in_se)))
@@ -740,12 +732,12 @@
(array pectx nil (if (!= nil new_env) new_env x)))
(array pectx nil x))))
((comb? x) (dlet (((wrap_level env_id de? se variadic params body rec_hash) (.comb x)))
((comb? x) (dlet (((wrap_level env_id de? se variadic params body) (.comb x)))
(mif (or (and (not (marked_env_real? env)) (not (marked_env_real? se))) ; both aren't real, re-evaluation of creation site
(and (marked_env_real? env) (not (marked_env_real? se)))) ; new env real, but se isn't - creation!
(dlet ((inner_env (make_tmp_inner_env params de? env env_id))
((pectx err evaled_body) (partial_eval_helper body false inner_env (array (idx env_stack 0) (cons inner_env (idx env_stack 1))) pectx (+ indent 1) false)))
(array pectx err (mif err nil (marked_comb wrap_level env_id de? env variadic params evaled_body rec_hash))))
(array pectx err (mif err nil (marked_comb wrap_level env_id de? env variadic params evaled_body))))
(array pectx nil x))))
((prim_comb? x) (array pectx nil x))
((marked_symbol? x) (mif (.marked_symbol_is_val x) x
@@ -817,7 +809,7 @@
) (if (= 'LATER err) (array pectx nil (l_later_call_array))
(array pectx err result))))
((comb? comb) (dlet (
((wrap_level env_id de? se variadic params body rec_hash) (.comb comb))
((wrap_level env_id de? se variadic params body) (.comb comb))
(final_params (mif variadic (concat (slice evaled_params 0 (- (len params) 1))
@@ -853,7 +845,7 @@
(if must_stop_maybe_id
(array pectx nil (marked_array false must_stop_maybe_id (if rec_stop (array hash) nil) (cons (with_wrap_level comb remaining_wrap) evaled_params) (.marked_array_source x)))
(dlet (((pectx err x) (drop_redundent_veval partial_eval_helper func_result env env_stack pectx indent)))
(array pectx err (add_hash_if_comb hash x)))))))
(array pectx err x))))))
)))
)))))
@@ -893,7 +885,7 @@
(env_id_start 1)
(empty_env (marked_env true nil nil nil nil nil))
(quote_internal (marked_comb 0 env_id_start nil empty_env false (array 'x) (marked_symbol env_id_start 'x) nil))
(quote_internal (marked_comb 0 env_id_start nil empty_env false (array 'x) (marked_symbol env_id_start 'x)))
(env_id_start (+ 1 env_id_start))
(root_marked_env (marked_env true nil nil nil nil (array
@@ -951,7 +943,7 @@
(cons inner_env (idx env_stack 1))) pectx (+ 1 indent) false))
(_ (print_strip (indent_str indent) "in vau, result of evaluating body was " pe_body))
) (array pectx err pe_body))))
) (mif err (array pectx err nil) (array pectx nil (marked_comb 0 new_id de? de variadic vau_params pe_body nil)))
) (mif err (array pectx err nil) (array pectx nil (marked_comb 0 new_id de? de variadic vau_params pe_body)))
)) 'vau 0 true))
(array 'wrap (marked_prim_comb (dlambda (only_head de env_stack pectx (evaled) indent)
@@ -1262,9 +1254,9 @@
(encode_function_section (lambda (x)
(dlet ( ; nil functions are placeholders for improted functions
;(_ (println "encoding function section " x))
;(_ (true_print "encoding function section " x))
(filtered (filter (lambda (i) (!= nil i)) x))
;(_ (println "post filtered " filtered))
;(_ (true_print "post filtered " filtered))
(encoded (encode_vector encode_LEB128 filtered))
) (concat (array #x03) (encode_LEB128 (len encoded)) encoded ))
))
@@ -1716,6 +1708,18 @@
; <env____ptr32>|<func_idx26><usesde1><wrap1>y101 - both env-carrying values 1 bit different
; <env____ptr32><28 0s> y001
; NOTE / TODO:
; reduce sizes to 16 bits w/ saturation & include true size field/calculation in object header
; to allow for 44 bit pointers for wasm64 (48 that could be used + minimum alignment of 16)
; Biggest loser is func_idx which would become 14 bits, but can perhaps borrow from env pointer if we further align envs
; currently aligning to 32 bytes, which is 8 word boundries or 4 kraken values (which I think is exactly what env requires, actually)
; which allows pretty long strings or envs or arrays with 3 values
; so that's 5 unused bits, to actually only require 43 bit pointers right now, I think
; Honestly, going to 40 bits is 1024GB of RAM, -5 is 35 bits. If we allow a non-standard encoding for env-funcs, then
; it leaves 23 bits for a function id, which is 8_388_608 possible functions, which isn't really terrible.
; We could do this only for env-funcs, or actually for anything depending on the extra slow down vs the extra non-saturating size
; Note that this does add an extra mask instruction for *everything* since the pointers aren't full width anymore
(to_hex_digit (lambda (x) (string (integer->char (if (< x 10) (+ x #x30)
(+ x #x37))))))
(le_hexify_helper (rec-lambda recurse (x i) (if (= i 0) ""
@@ -1823,7 +1827,7 @@
(nil_val array_tag) ; automatically 0 ptr, 0 size, 0 ref-counted
(emptystr_val string_tag); ^ ditto
(compile (dlambda ((pectx partial_eval_err marked_code) needs_runtime_eval
(compile (dlambda ((pectx partial_eval_err marked_code) dont_partial_eval
dont_lazy_env
dont_y_comb
dont_prim_inline
@@ -1903,6 +1907,7 @@
(_ (true_print "made true/false"))
((datasi memo bad_source_code_msg_val) (compile-string-val datasi memo "\nError: bad source code compile hit\n"))
((datasi memo bad_params_number_msg_val) (compile-string-val datasi memo "\nError: passed a bad number of parameters\n"))
((datasi memo bad_params_type_msg_val) (compile-string-val datasi memo "\nError: passed a bad type of parameters\n"))
((datasi memo dropping_msg_val) (compile-string-val datasi memo "dropping "))
@@ -4592,10 +4597,20 @@
(if r (array r nil nil (array datasi funcs memo env pectx inline_locals)) #f))))
(let_like_inline_closure (lambda (func_value containing_env_idx) (and (comb? func_value)
(not (.comb_varadic func_value))
(= containing_env_idx (.marked_env_idx (.comb_env func_value)))
(= nil (.comb_des func_value)))))
; TODO:
;
; Split compile-inner into compile-value and compile-code.
; Compile-value can only call into compile-code to compile a function.
; Compile-code can call into compile-value, but doesn't have to pass any of the data for the analysis passes.
; (BUT does pass memo back and forth as to not re-compile over and over, ofc)
; Compile-value is then what is called on the parsed program for NO PE
; OR
; called on ['run <wrap=0 nil.. () parsed_expr>]
; which when encountering a function will call compile-code to do partial evaluation & all the dataflow
; no PE can have compile function compile the body as (eval <body-compiled-as-value>)
;
; Feels like compling the function actually belongs in compile-value, in a weird way.
; Since it has to figure out what is code and what is value, is there actually any benefit in splitting them up?
; This is the second run at this, and is a little interesting
; It can return a value OR code OR an error string. An error string should be propegated,
@@ -4606,6 +4621,62 @@
; ctx is (datasi funcs memo env pectx inline_locals)
; return is (value? code? error? (datasi funcs memo env pectx inline_locals))
(let_like_inline_closure (lambda (func_value containing_env_idx) (and (comb? func_value)
(not (.comb_varadic func_value))
(= containing_env_idx (.marked_env_idx (.comb_env func_value)))
(= nil (.comb_des func_value)))))
; Ok, we're pulling out the call stuff out of compile
; Wrapped vs unwrapped
; Y combinator elimination
; Eta reduction?
; tail call elimination
; dynamic call unval-partial-eval branch
;
; ALSO: This means that it needs to be pulled out of even the compile-function bit, since it has to go through multiple function compilations
; in order to notice Y-Comb tying and Eta-reduce the lazyness
; which also means it needs to be able to memoize
;
; Rembember to account for (dont_compile dont_lazy_env dont_y_comb dont_prim_inline dont_closure_inline)
(call-info (rec-lambda call-info (c env_id) (cond
((val? c) nil)
((and (marked_symbol? c) (.marked_symbol_is_val c)) nil)
((marked_symbol? c) nil)
((marked_env? c) nil) ; So it actually needs to recurse into env
((comb? c) (dlet (
((wrap_level env_id de? se variadic params body) (.comb c))
(_ (mif (> wrap_level 1) (error "wrap level TOO DARN HIGH")))
) nil)
((prim_comb? c) nil)
((and (marked_array? c) (.marked_array_is_val c)) nil) ; and array values
((and (marked_array? c) ;(>= 2 (len (.marked_array_values c)))
(let_like_inline_closure (idx (.marked_array_values c) 0) env_id)) nil)
; REMEMBER - new env_id inside
; but same tce-data
; and same y-comb memo
(true nil)
; obv need to handle possible dynamic calls with an additional unval side, but also be careful of infinite recursion (as we had happen on compile before)
; due to the interaction of partial eval and unval (previously in compile) here
; check for Y-comb tie looked like
(and (not dont_y_comb) (!= nil (.marked_array_this_rec_stop c)) (get_passthrough (idx (.marked_array_this_rec_stop c) 0) ctx))
((ok x) (try_unval x (lambda (_) nil)))
(err (if (not ok) "couldn't unval in compile" err))
((pectx e pex) (cond ((!= nil err) (array pectx err nil))
(true (partial_eval_helper x false env (array nil nil) pectx 1 false))))
((tce_idx tce_full_params) (mif tce_data tce_data (array nil nil)))
(tce_able (and unwrapped (= tce_idx (extract_func_idx func_val))))
; NOTICE TRANSPARENT VEVAL
; also vcond, of course
))))
; type is a bit generic, both the runtime types + length of arrays
;
; (array <symbol_identifier> maybe_rc <length or false for arrays/strings>)
@@ -5076,10 +5147,15 @@
;(_ (true_print "doing infer-types-idx for " (true_str_strip c)))
;(_ (true_print "doing infer-types-idx i " i))
;(_ (true_print "doing infer-types-idx with " cache))
;(_ (true_print "doing infer-types-idx, cache is real? " (mif cache true false)))
( r (cached_infer_types_idx c env_id (mif cache (idx cache 0) type_data_nil) i))
(_ (true_print "doing infer-types-idx, cache is real? " (mif cache true false)))
( t (cached_infer_types_idx c env_id (mif cache (idx cache 0) type_data_nil) i))
;( t (cached_infer_types_idx c env_id (idx cache 0) i))
;( p (mif cache (pseudo_perceus_just_sub_idx (idx cache 1) i) nil))
( p nil )
;(_ (true_print "done infer-types-idx"))
) (array r))))
) (array t p))))
(compile-inner (rec-lambda compile-inner (ctx c need_value inside_veval outer_s_env_access_code s_env_access_code inline_level tce_data analysis_data) (cond
@@ -5146,7 +5222,6 @@
; shape in that case which will cause compile to keep stepping.
((datasi funcs memo env pectx inline_locals) ctx)
(hit_recursion (= 'RECURSE_FAIL (get-value-or-false memo (.hash c))))
(func_param_values (.marked_array_values c))
(num_params (- (len func_param_values) 1))
@@ -5164,6 +5239,8 @@
(compile_params (lambda (unval_and_eval ctx cond_tce)
(foldr (dlambda (x (a err ctx i)) (dlet (
;(_ (true_print "compile param with unval?" unval_and_eval " " (true_str_strip x)))
((datasi funcs memo env pectx inline_locals) ctx)
((x err ctx) (mif err (array nil err ctx)
(if (not unval_and_eval) (array x err ctx)
@@ -5172,7 +5249,6 @@
(err (if (not ok) "couldn't unval in compile" err))
((pectx e pex) (cond ((!= nil err) (array pectx err nil))
(hit_recursion (array pectx "blockrecursion" nil))
(true (partial_eval_helper x false env (array nil nil) pectx 1 false))))
(ctx (array datasi funcs memo env pectx inline_locals))
@@ -5477,7 +5553,9 @@
((source_code ctx) (mif (.marked_array_source c) (dlet (((code _ _ ctx) (compile-inner ctx (.marked_array_source c) true inside_veval outer_s_env_access_code s_env_access_code inline_level nil analysis_nil))
) (array code ctx))
(array k_cond_msg_val ctx)))
(array bad_source_code_msg_val ctx)))
(_ (mif (nil? source_code) (error "nil source codepost compile! pre was " (.marked_array_source c))))
;((source_code ctx) (mif (nil? source_code) (array bad_source_code_msg_val ctx) (array source_code ctx)))
((result_code ctx) (mif func_val
(dlet (
(unwrapped (extract_unwrapped func_val))
@@ -5692,9 +5770,20 @@
((comb? c) (dlet (
((wrap_level env_id de? se variadic params body rec_hashes) (.comb c))
((wrap_level env_id de? se variadic params body) (.comb c))
(_ (mif (> wrap_level 1) (error "wrap level TOO DARN HIGH")))
; note that this is just the func, not the env
(maybe_func (get_passthrough (.hash c) ctx))
((datasi funcs memo env pectx inline_locals) ctx)
((pectx err evaled_body) (mif (or maybe_func dont_partial_eval)
(array pectx "don't pe" body)
(dlet ((inner_env (make_tmp_inner_env params de? env env_id)))
(partial_eval_helper body false inner_env (array nil (array inner_env)) pectx 1 false))))
(body (mif err body evaled_body))
(ctx (array datasi funcs memo env pectx inline_locals))
; Let's look and see if we can eta-reduce!
; This is done here during code gen (when you would expect it earlier, like as part of partial eval)
; because we currently only "tie the knot" for Y combinator based recursion here
@@ -5702,76 +5791,28 @@
; and so we can only tell here weather or not it will be safe to remove the level of lazyness (because we get a func value back instead of code)
; and perform the eta reduction.
(attempt_reduction (and
(not dont_y_comb)
variadic
(= 1 (len params))
(marked_array? body)
(= 4 (len (.marked_array_values body)))
(prim_comb? (idx (.marked_array_values body) 0))
(= 'lapply (.prim_comb_sym (idx (.marked_array_values body) 0)))
(marked_symbol? (idx (.marked_array_values body) 2))
(not (.marked_symbol_is_val (idx (.marked_array_values body) 2)))
(= (idx params 0) (.marked_symbol_value (idx (.marked_array_values body) 2)))
(marked_symbol? (idx (.marked_array_values body) 3))
(not (.marked_symbol_is_val (idx (.marked_array_values body) 3)))
(= de? (.marked_symbol_value (idx (.marked_array_values body) 3)))
))
) (mif (and
(not dont_y_comb)
variadic
(= 1 (len params))
(marked_array? body)
(= 4 (len (.marked_array_values body)))
(prim_comb? (idx (.marked_array_values body) 0))
(= 'lapply (.prim_comb_sym (idx (.marked_array_values body) 0)))
(int? (get-value-or-false memo (.hash (idx (.marked_array_values body) 1))))
(marked_symbol? (idx (.marked_array_values body) 2))
(not (.marked_symbol_is_val (idx (.marked_array_values body) 2)))
(= (idx params 0) (.marked_symbol_value (idx (.marked_array_values body) 2)))
(marked_symbol? (idx (.marked_array_values body) 3))
(not (.marked_symbol_is_val (idx (.marked_array_values body) 3)))
(= de? (.marked_symbol_value (idx (.marked_array_values body) 3)))
)
(array (set_wrap_val wrap_level (get-value-or-false memo (.hash (idx (.marked_array_values body) 1)))) nil err ctx)
(dlet (
(full_params (concat params (mif de? (array de?) (array))))
(normal_params_length (if variadic (- (len params) 1) (len params)))
(compile_body_part (lambda (ctx body_part new_tce_data) (dlet (
(inner_env (make_tmp_inner_env params de? se env_id))
((params_vec _ _ ctx) (compile-inner ctx (marked_array true false nil (map (lambda (k) (marked_symbol nil k)) full_params) nil) true false outer_s_env_access_code s_env_access_code 0 nil analysis_nil))
(basic_get_s_env_code (local.get '$s_env))
(generate_get_s_env_code (local.tee '$s_env (call '$env_alloc (i64.const params_vec)
(local.set '$tmp_ptr (call '$malloc (i32.const (* 8 (len full_params)))))
(flat_map (lambda (i) (i64.store (* i 8) (local.get '$tmp_ptr)
(generate_dup (local.get (idx full_params i)))))
(range 0 (len full_params)))
(mk_array_code_rc_const_len (len full_params) (local.get '$tmp_ptr))
(generate_dup (local.get '$outer_s_env)))))
(lazy_get_s_env_code (_if '$have_s_env '(result i64)
(i64.ne (i64.const nil_val) (local.get '$s_env))
(then basic_get_s_env_code)
(else generate_get_s_env_code
;(call '$print (i64.const params_vec))
;(call '$print (i64.const newline_msg_val))
;(local.set '$outer_s_env (i64.const nil_val))
)))
(new_get_s_env_code (if dont_lazy_env basic_get_s_env_code lazy_get_s_env_code))
((datasi funcs memo env pectx inline_locals) ctx)
(inner_ctx (array datasi funcs memo inner_env pectx inline_locals))
(_ (true_print "Doing infer_types for body part for " full_params))
(inner_type_data (infer_types body_part (.marked_env_idx inner_env) empty_dict-list empty_dict-list))
(_ (true_print "done infer_types, Doing pseudo perceus " full_params))
((used_map_before used_map_sub_data) (pseudo_perceus body_part (.marked_env_idx inner_env) memo (push_used_map empty_use_map full_params)))
(_ (true_print "done pseudo_perceus, Doing borrow? " full_params))
((borrowed borrow_sub_data) (borrow? body_part false (.marked_env_idx inner_env) used_map_sub_data))
(_ (mif borrowed (error "body hast to be borrowed? " borrowed " " (true_str_strip body_part))))
(_ (true_print "done pseudo_perceus, Doing compile_body_part func def compile-inner " full_params))
(inner_analysis_data (array inner_type_data))
((inner_value inner_code err ctx) (compile-inner inner_ctx body_part false false (local.get '$outer_s_env) new_get_s_env_code 0 new_tce_data inner_analysis_data))
(_ (true_print "Done compile_body_part func def compile-inner " full_params))
; Don't overwrite env with what was our inner env! Env is returned as part of context to our caller!
((datasi funcs memo _was_inner_env pectx inline_locals) ctx)
) (array inner_value inner_code err (array datasi funcs memo env pectx inline_locals) generate_get_s_env_code))))
((early_quit err ctx) (mif attempt_reduction
(dlet (
((inner_value inner_code err ctx generate_get_s_env_code) (compile_body_part ctx (idx (.marked_array_values body) 1) nil))
; set it's wrap level to our wrap level
(inner_value (mif inner_value (set_wrap_val wrap_level inner_value)))
) (array inner_value err ctx))
(array nil nil ctx)))
) (mif (and (!= nil early_quit) (= nil err)) (array ;(mod_fval_to_wrap early_quit)
early_quit
nil nil ctx)
(dlet (
((env_val env_code env_err ctx) (if (and need_value (not (marked_env_real? se)))
(array nil nil "Env wasn't real when compiling comb, but need value" ctx)
@@ -5791,15 +5832,57 @@
(func_value (calculate_func_val wrap_level))
; if variadic, we just use the wrapper func and don't expect callers to know that we're varidic
(func_value (mif variadic (mod_fval_to_wrap func_value) func_value))
; Is this the vau-tieer?
(memo (mif env_val (foldl (dlambda (memo (hash wrap)) (put memo hash (combine_env_comb_val env_val (calculate_func_val wrap)))) memo rec_hashes)
memo))
(memo (put memo (.hash c) func_value))
(new_inline_locals (array))
(ctx (array datasi funcs memo env pectx new_inline_locals))
((inner_value inner_code err ctx generate_get_s_env_code) (compile_body_part ctx body (array our_func_idx full_params)))
(new_tce_data (array our_func_idx full_params))
(inner_env (make_tmp_inner_env params de? se env_id))
((params_vec _ _ ctx) (compile-inner ctx (marked_array true false nil (map (lambda (k) (marked_symbol nil k)) full_params) nil) true false outer_s_env_access_code s_env_access_code 0 nil analysis_nil))
(basic_get_s_env_code (local.get '$s_env))
(generate_get_s_env_code (local.tee '$s_env (call '$env_alloc (i64.const params_vec)
(local.set '$tmp_ptr (call '$malloc (i32.const (* 8 (len full_params)))))
(flat_map (lambda (i) (i64.store (* i 8) (local.get '$tmp_ptr)
(generate_dup (local.get (idx full_params i)))))
(range 0 (len full_params)))
(mk_array_code_rc_const_len (len full_params) (local.get '$tmp_ptr))
(generate_dup (local.get '$outer_s_env)))))
(lazy_get_s_env_code (_if '$have_s_env '(result i64)
(i64.ne (i64.const nil_val) (local.get '$s_env))
(then basic_get_s_env_code)
(else generate_get_s_env_code
;(call '$print (i64.const params_vec))
;(call '$print (i64.const newline_msg_val))
;(local.set '$outer_s_env (i64.const nil_val))
)))
(new_get_s_env_code (if dont_lazy_env basic_get_s_env_code lazy_get_s_env_code))
((datasi funcs memo env pectx inline_locals) ctx)
(inner_ctx (array datasi funcs memo inner_env pectx inline_locals))
;-------------
;(_ (true_print "Doing call-info" full_params))
;(call_info (call-info c env_id))
;-------------
(_ (true_print "Doing infer_types for body part for " full_params))
(inner_type_data (infer_types body (.marked_env_idx inner_env) empty_dict-list empty_dict-list))
(_ (true_print "done infer_types, Doing pseudo perceus " full_params))
((used_map_before used_map_sub_data) (pseudo_perceus body (.marked_env_idx inner_env) memo (push_used_map empty_use_map full_params)))
(_ (true_print "done pseudo_perceus, Doing borrow? " full_params))
((borrowed borrow_sub_data) (borrow? body false (.marked_env_idx inner_env) used_map_sub_data))
(_ (mif borrowed (error "body hast to be borrowed? " borrowed " " (true_str_strip body))))
(_ (true_print "done pseudo_perceus, Doing compile_body func def compile-inner " full_params))
(inner_analysis_data (array inner_type_data used_map_sub_data))
((inner_value inner_code err ctx) (compile-inner inner_ctx body false false (local.get '$outer_s_env) new_get_s_env_code 0 new_tce_data inner_analysis_data))
(_ (true_print "Done compile_body func def compile-inner " full_params))
; Don't overwrite env with what was our inner env! Env is returned as part of context to our caller!
((datasi funcs memo _was_inner_env pectx inline_locals) ctx)
(ctx (array datasi funcs memo env pectx inline_locals))
(inner_code (mif inner_value (i64.const (mod_fval_to_wrap inner_value)) inner_code))
(wrapper_func (func '$wrapper_func '(param $params i64) '(param $d_env i64) '(param $outer_s_env i64) '(result i64) '(local $param_ptr i32) '(local $rc_bytes i64) '(local $rc_ptr i32) '(local $rc_tmp i32)
(_if '$params_len_good
@@ -5850,7 +5933,6 @@
))))
; replace our placeholder with the real one
(funcs (concat old_funcs wrapper_func our_func (drop funcs (+ 2 (len old_funcs)))))
(memo (put memo (.hash c) func_value))
) (array func_value nil err (array datasi funcs memo env pectx outer_inline_locals)))
))
@@ -5874,12 +5956,13 @@
(_ (true_print "About to compile a bunch of symbols & strings"))
((run_val _ _ ctx) (compile-inner ctx (marked_symbol nil 'run) true false (array) (array) 0 nil analysis_nil))
((exit_val _ _ ctx) (compile-inner ctx (marked_symbol nil 'exit) true false (array) (array) 0 nil analysis_nil))
((args_val _ _ ctx) (compile-inner ctx (marked_symbol nil 'args) true false (array) (array) 0 nil analysis_nil))
((read_val _ _ ctx) (compile-inner ctx (marked_symbol nil 'read) true false (array) (array) 0 nil analysis_nil))
((write_val _ _ ctx) (compile-inner ctx (marked_symbol nil 'write) true false (array) (array) 0 nil analysis_nil))
((open_val _ _ ctx) (compile-inner ctx (marked_symbol nil 'open) true false (array) (array) 0 nil analysis_nil))
((monad_error_msg_val _ _ ctx) (compile-inner ctx (marked_val "Not a legal monad ( ['args <cont (arg_array error?)>] / ['read fd len <cont(data error_no)>] / ['write fd data <cont(num_written error_no)>] / ['open fd path <cont(new_fd error_no)>] /['exit exit_code])") true false (array) (array) 0 nil analysis_nil))
((monad_error_msg_val _ _ ctx) (compile-inner ctx (marked_val "Not a legal monad ( ['args <cont (arg_array error?)>] / ['read fd len <cont(data error_no)>] / ['write fd data <cont(num_written error_no)>] / ['open fd path <cont(new_fd error_no)>] / ['exit exit_code] / ['run <cont()>])") true false (array) (array) 0 nil analysis_nil))
((bad_args_val _ _ ctx) (compile-inner ctx (marked_val "<error with args>") true false (array) (array) 0 nil analysis_nil))
((bad_read_val _ _ ctx) (compile-inner ctx (marked_val "<error with read>") true false (array) (array) 0 nil analysis_nil))
((exit_msg_val _ _ ctx) (compile-inner ctx (marked_val "Exiting with code: ") true false (array) (array) 0 nil analysis_nil))
@@ -5909,8 +5992,7 @@
; ineriting rights, fdflags
(start (func '$start '(local $it i64) '(local $tmp i64) '(local $ptr i32) '(local $monad_name i64) '(local $len i32) '(local $buf i32) '(local $traverse i32) '(local $x i32) '(local $y i32) '(local $code i32) '(local $str i64) '(local $result i64) '(local $debug_malloc_print i32) '(local $rc_bytes i64) '(local $rc_ptr i32) '(local $rc_tmp i32)
(local.set '$it (if needs_runtime_eval (call '$eval_helper compiled_value_code (i64.const root_marked_env_val))
compiled_value_code))
(local.set '$it compiled_value_code)
(block '$exit_block
(block '$error_block
(_loop '$l
@@ -6011,6 +6093,39 @@
)
)
(_if '$is_run
(i64.eq (i64.const run_val) (local.get '$monad_name))
(then
;; len != 2
(br_if '$error_block (i32.ne (extract_size_code (local.get '$it)) (i32.const 2)))
;; second entry isn't a comb -> out
(br_if '$error_block (is_not_type_code comb_tag (i64.load 8 (local.get '$ptr))))
(local.set '$tmp (generate_dup (i64.load 8 (local.get '$ptr))))
(generate_drop (local.get '$it))
(generate_drop (global.get '$debug_func_to_call))
(generate_drop (global.get '$debug_params_to_call))
(generate_drop (global.get '$debug_env_to_call))
(global.set '$debug_func_to_call (generate_dup (local.get '$tmp)))
(global.set '$debug_params_to_call (i64.const nil_val))
(global.set '$debug_env_to_call (i64.const root_marked_env_val))
(local.set '$it (call_indirect
;;type
k_vau
;;table
0
;;params
(i64.const nil_val)
;;top_env
(i64.const root_marked_env_val)
;; static env
(extract_func_env_code (local.get '$tmp))
;;func_idx
(extract_func_idx_code (local.get '$tmp))
))
(br '$l)
)
)
; second entry isn't an int -> out
(br_if '$error_block (is_not_type_code int_tag (i64.load 8 (local.get '$ptr))))
@@ -6686,15 +6801,22 @@
) void)))
(run-compiler (lambda (dont_compile dont_lazy_env dont_y_comb dont_prim_inline dont_closure_inline f)
(run-compiler (lambda (dont_partial_eval dont_lazy_env dont_y_comb dont_prim_inline dont_closure_inline f)
(dlet (
(_ (true_print "reading in!"))
(read_in (read-string (slurp f)))
;(_ (true_print "read in, now evaluating"))
(evaled (if dont_compile (array (array 0 empty_dict) nil (mark read_in))
(partial_eval read_in)))
; This is basicaly (compile <comb0 () ('eval <marked_body> root_env)>)
; this does mean that without partial eval this is an extra and unnecessary lookup of 'eval in the root env but w/e, it's a single load
; empty partial_eval_ctx empty partial_eval_error value to compile
(body_value (marked_array true false nil (array (marked_symbol nil 'eval) (marked_array true false nil (array quote_internal (mark read_in)) true) root_marked_env) true))
(constructed_body (idx (try_unval body_value (lambda (_) nil)) 1))
(constructed_func (marked_comb 0 (+ env_id_start 1) 'outer root_marked_env false (array) constructed_body))
(constructed_value (marked_array true false nil (array (marked_symbol nil 'run) constructed_func) true))
(to_compile (array (array (+ env_id_start 1) empty_dict) nil constructed_value))
;(_ (true_print "done partialy evaling, now compiling"))
(bytes (compile evaled dont_compile dont_lazy_env dont_y_comb dont_prim_inline dont_closure_inline))
(_ (true_print "going"))
(bytes (compile to_compile dont_partial_eval dont_lazy_env dont_y_comb dont_prim_inline dont_closure_inline))
;(_ (true_print "compiled, writng out"))
(_ (write_file "./csc_out.wasm" bytes))
;(_ (true_print "written out"))
@@ -6712,7 +6834,7 @@
(cond ((= "test" com) (test-most))
((= "single" com) (single-test))
(true (run-compiler
(and (>= (len args) 2) (= "no_compile" (idx args 1)))
(and (>= (len args) 2) (= "no_partial_eval" (idx args 1)))
(and (>= (len args) 2) (= "no_lazy_env" (idx args 1)))
(and (>= (len args) 2) (= "no_y_comb" (idx args 1)))
(and (>= (len args) 2) (= "no_prim_inline" (idx args 1)))