Compare commits
10 Commits
29a0266c67
...
c20ba09179
| Author | SHA1 | Date | |
|---|---|---|---|
| c20ba09179 | |||
| 7f9f419a23 | |||
| 5a4cb4b40b | |||
| dff6730dd9 | |||
| 0ed097b5b0 | |||
| 95f6dd867c | |||
| 94ae60f9d1 | |||
| b2f0b5f1dd | |||
| 18b901b2f1 | |||
| 54f1092a2a |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -13,3 +13,4 @@ build-ninja
|
||||
.*.un~
|
||||
callgrind*
|
||||
.stfolder
|
||||
*.wasm
|
||||
|
||||
66
flake.lock
generated
66
flake.lock
generated
@@ -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
173
flake.nix
@@ -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
|
||||
];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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 |
|
||||
|
||||
|
||||
|
||||
@@ -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,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,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 |
|
||||
@@ -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,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,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 |
|
||||
@@ -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,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,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 |
|
||||
@@ -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
18
koka_bench/kraken/test.sh
Executable 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
66
koka_bench/new_test.sh
Executable 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
|
||||
@@ -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,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,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 |
|
||||
@@ -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,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,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 |
|
||||
@@ -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,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,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 |
|
||||
@@ -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,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,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 |
|
||||
@@ -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,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,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 |
|
||||
@@ -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,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
|
||||
|
352
partial_eval.scm
352
partial_eval.scm
@@ -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)))
|
||||
|
||||
Reference in New Issue
Block a user