Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
ruse compiler factorial 010
(version: 0)
Comparing performance of:
v0 vs v1 use strict vs v1 vs tailcall vs vanilla vs iterative vs gambit
Created:
6 years ago
by:
Guest
Jump to the latest result
Script Preparation code:
NNN = 100 function v0 () { function voidf(k) { return k(undefined); }; function pk(x, y) { console.log("pk", x, y); return voidf; } function trampoline(thunk) { // console.log('trampoline start', thunk) while (thunk && typeof thunk === "function") { // console.log('boing'); thunk = thunk(); } return thunk } function add(a, b) { return a + b; } function times(a, b) { return a * b; } let program = (function( kxx ) { return (function( ) { return (function( k ) { return k ( (function( kk, factorial_0 ) { return (function( ) { return (function( kxx ) { return (function( ) { return (function( k ) { return k ( (function( kk, t_3 ) { return (function( ) { return (function( kxx ) { return (function( ) { return factorial_0 ( (function( v ) { return (function( ) { return (function( k ) { return k ( NNN ) ;}) ( (function( v0 ) { return (function( ) { return (function( k ) { return k ( 1 ) ;}) ( (function( v1 ) { return (function( ) { return v ( kxx, (function( kv ) { return kv ( v0 ) ;}), (function( kv ) { return kv ( v1 ) ;}) ) ;}) ;}) ) ;}) ;}) ) ;}) ;}) ) ;}) ;}) ( kk ) ;}) ;}) ) ;}) ( (function( v ) { return (function( ) { return (function( k ) { return (function( ) { factorial_0 = (function( k ) { return k ( (function( kk, n_1, total_2 ) { return (function( ) { return (function( k ) { return (function( kpr ) { return (function( ) { return n_1 ( (function( v0 ) { return (function( ) { return (function( k ) { return k ( 0 ) ;}) ( (function( v1 ) { return kpr ( v0 === v1 ) ;}) ) ;}) ;}) ) ;}) ;}) ( (function( kif ) { return /* if */ kif ? (function( ) { return total_2 ( k ) ;}) : (function( ) { return (function( kxx ) { return (function( ) { return factorial_0 ( (function( v ) { return (function( ) { return (function( kpr ) { return (function( ) { return n_1 ( (function( v0 ) { return (function( ) { return (function( k ) { return k ( -1 ) ;}) ( (function( v1 ) { return kpr ( add ( v0, v1 ) ) ;}) ) ;}) ;}) ) ;}) ;}) ( (function( v0 ) { return (function( ) { return (function( kpr ) { return (function( ) { return n_1 ( (function( v0 ) { return (function( ) { return total_2 ( (function( v1 ) { return kpr ( times ( v0, v1 ) ) ;}) ) ;}) ;}) ) ;}) ;}) ( (function( v1 ) { return (function( ) { return v ( kxx, (function( kv ) { return kv ( v0 ) ;}), (function( kv ) { return kv ( v1 ) ;}) ) ;}) ;}) ) ;}) ;}) ) ;}) ;}) ) ;}) ;}) ( k ) ;}) ;}) ) ;}) ( kk ) ;}) ;}) ) ;}); return k ( voidf ) ;}) ;}) ( (function( v0 ) { return (function( ) { return v ( kxx, (function( kv ) { return kv ( v0 ) ;}) ) ;}) ;}) ) ;}) ;}) ) ;}) ;}) ( kk ) ;}) ;}) ) ;}) ( (function( v ) { return (function( ) { return voidf ( (function( v0 ) { return (function( ) { return v ( kxx, (function( kv ) { return kv ( v0 ) ;}) ) ;}) ;}) ) ;}) ;}) ) ;}) ;}) ; function output(x) { pk('output', x); return function() {}; } trampoline(function() {return program (output);}); } function v1strict() { "use strict"; function voidf(k) { return k(undefined); }; function pk() { console.log.apply(console, arguments); } function trampoline(thunk) { // console.log('trampoline start', thunk) while (thunk && typeof thunk === "function") { // console.log('boing'); thunk = thunk(); } return thunk } function prepend(v, a) { // a.slice().unshift(0); // avoid mutation with copy a.unshift(v); return a; } function apply(func, args) { return func.apply(this, args); } function add(a, b) { return a + b; } function times(a, b) { return a * b; } let program = (function( k ) { return (function( k ) { return k ( (function( k, fact_0 ) { return (function( k ) { return (function( k ) { return k ( (function( k, t_3 ) { return (function( k ) { return fact_0 ( (function( v ) { return (function( k ) { return k ( NNN ) ;}) ( (function( v0 ) { return (function( k ) { return k ( 1 ) ;}) ( (function( v1 ) { return (function( ) { return v ( k, (function( kv ) { return kv ( v0 ) ;}), (function( kv ) { return kv ( v1 ) ;}) ) ;}) ;}) ) ;}) ) ;}) ) ;}) ( k ) ;}) ) ;}) ( (function( v ) { return (function( k ) { return (function( ) { fact_0 = (function( k ) { return k ( (function( k, n_1, total_2 ) { return (function( k ) { return (function( k ) { return n_1 ( (function( v0 ) { return (function( k ) { return k ( 0 ) ;}) ( (function( v1 ) { return k ( v0 === v1 ) ;}) ) ;}) ) ;}) ( (function( kif ) { return /* if */ kif ? (function( ) { return total_2 ( k ) ;}) : (function( ) { return (function( k ) { return fact_0 ( (function( v ) { return (function( k ) { return n_1 ( (function( v0 ) { return (function( k ) { return k ( -1 ) ;}) ( (function( v1 ) { return k ( add ( v0, v1 ) ) ;}) ) ;}) ) ;}) ( (function( v0 ) { return (function( k ) { return total_2 ( (function( v0 ) { return n_1 ( (function( v1 ) { return k ( times ( v0, v1 ) ) ;}) ) ;}) ) ;}) ( (function( v1 ) { return (function( ) { return v ( k, (function( kv ) { return kv ( v0 ) ;}), (function( kv ) { return kv ( v1 ) ;}) ) ;}) ;}) ) ;}) ) ;}) ) ;}) ( k ) ;}) ;}) ) ;}) ( k ) ;}) ) ;}); return k ( voidf ) ;}) ;}) ( (function( v0 ) { return (function( ) { return v ( k, (function( kv ) { return kv ( v0 ) ;}) ) ;}) ;}) ) ;}) ) ;}) ( k ) ;}) ) ;}) ( (function( v ) { return voidf ( (function( v0 ) { return (function( ) { return v ( k, (function( kv ) { return kv ( v0 ) ;}) ) ;}) ;}) ) ;}) ) ;}) ; function output(x) { pk('output', x); return function() {}; } trampoline(function() {return program (output);}); } function v1() { function voidf(k) { return k(undefined); }; function pk() { console.log.apply(console, arguments); } function trampoline(thunk) { // console.log('trampoline start', thunk) while (thunk && typeof thunk === "function") { // console.log('boing'); thunk = thunk(); } return thunk } function prepend(v, a) { // a.slice().unshift(0); // avoid mutation with copy a.unshift(v); return a; } function apply(func, args) { return func.apply(this, args); } function add(a, b) { return a + b; } function times(a, b) { return a * b; } let program = (function( k ) { return (function( k ) { return k ( (function( k, fact_0 ) { return (function( k ) { return (function( k ) { return k ( (function( k, t_3 ) { return (function( k ) { return fact_0 ( (function( v ) { return (function( k ) { return k ( NNN ) ;}) ( (function( v0 ) { return (function( k ) { return k ( 1 ) ;}) ( (function( v1 ) { return (function( ) { return v ( k, (function( kv ) { return kv ( v0 ) ;}), (function( kv ) { return kv ( v1 ) ;}) ) ;}) ;}) ) ;}) ) ;}) ) ;}) ( k ) ;}) ) ;}) ( (function( v ) { return (function( k ) { return (function( ) { fact_0 = (function( k ) { return k ( (function( k, n_1, total_2 ) { return (function( k ) { return (function( k ) { return n_1 ( (function( v0 ) { return (function( k ) { return k ( 0 ) ;}) ( (function( v1 ) { return k ( v0 === v1 ) ;}) ) ;}) ) ;}) ( (function( kif ) { return /* if */ kif ? (function( ) { return total_2 ( k ) ;}) : (function( ) { return (function( k ) { return fact_0 ( (function( v ) { return (function( k ) { return n_1 ( (function( v0 ) { return (function( k ) { return k ( -1 ) ;}) ( (function( v1 ) { return k ( add ( v0, v1 ) ) ;}) ) ;}) ) ;}) ( (function( v0 ) { return (function( k ) { return total_2 ( (function( v0 ) { return n_1 ( (function( v1 ) { return k ( times ( v0, v1 ) ) ;}) ) ;}) ) ;}) ( (function( v1 ) { return (function( ) { return v ( k, (function( kv ) { return kv ( v0 ) ;}), (function( kv ) { return kv ( v1 ) ;}) ) ;}) ;}) ) ;}) ) ;}) ) ;}) ( k ) ;}) ;}) ) ;}) ( k ) ;}) ) ;}); return k ( voidf ) ;}) ;}) ( (function( v0 ) { return (function( ) { return v ( k, (function( kv ) { return kv ( v0 ) ;}) ) ;}) ;}) ) ;}) ) ;}) ( k ) ;}) ) ;}) ( (function( v ) { return voidf ( (function( v0 ) { return (function( ) { return v ( k, (function( kv ) { return kv ( v0 ) ;}) ) ;}) ;}) ) ;}) ) ;}) ; function output(x) { pk('output', x); return function() {}; } trampoline(function() {return program (output);}); } function vanilla() { function factorial (n) { return n === 0 ? 1 : n * factorial(n -1); } console.log(factorial(NNN)); } function tailcall() { function factorial (n, total) { return n === 0 ? total : factorial(n - 1, total * n); } console.log(factorial(NNN, 1)) } function iterative() { function sFact(num) { var rval=1; for (var i = 2; i <= num; i++) rval = rval * i; return rval; } console.log(sFact(NNN)); } function gambit() { // File generated by Gambit v4.9.3 // Link info: (409003 (js ()) "app_" (("lib") ("app")) (string glo-println pair ffi nargs wrong_nargs r2 r1 pollcount poll r0 r3 stack sp make_interned_symbol peps glo module_register modlinkinfo module_registry_init) (for-each lib js-alert patch! current-milliseconds app app# append println) (for-each lib# js-alert patch! current-milliseconds ##vm-main-module-ref app# append ##program-descr println) (for-each js-alert patch! current-milliseconds app# append println) #f) var g_glo = {}; function g_host_function2scm(obj) { function g_h2s_procedure() { return g_scm2host_call(obj); } return g_h2s_procedure; } function G_ModLinkInfo(name,index) { this.name = name; this.index = index; } var g_module_count = 0; var g_module_map = {}; var g_module_table = null; var g_nargs = 0; var g_peps = {}; var g_pollcount = 100; function g_println(s) { if (Object.prototype.hasOwnProperty.call(function () {return this;}(),"console")) { console.log(s); } else { print(s); } } function G_ScmObj() { } var g_stack = []; function g_str2codes(strng) { var codes = []; for (var i=0; i < strng.length; i++) { codes.push(strng.charCodeAt(i)); } return codes; } function g_str_hash(strng) { var h = 18652613; var i = 0; var leng = strng.length; while (i < leng) { h = ((h ^ strng.charCodeAt(i)) * 16777619) & 536870911; ++i; } return h; } var g_symbol_table = {}; function G_Eof() { } function G_F32Vector(elems) { this.elems = elems; } function G_F64Vector(elems) { this.elems = elems; } function G_Flonum(val) { this.val = val; } G_Flonum.prototype.toString = function () { return this.val.toString(); }; function G_Jumpable() { } G_Jumpable.prototype.jump = function () {}; function g_module_registry_init(link_info) { var n = link_info.length; var i = 0; g_module_table = new Array(n); while (i < n) { var info = link_info[i]; g_module_map[info.name] = info; g_module_table[i] = null; ++i; } } function G_Pair(car,cdr) { this.car = car; this.cdr = cdr; } var g_r0 = void 0; var g_r1 = void 0; var g_r2 = void 0; var g_r3 = void 0; function G_S16Vector(elems) { this.elems = elems; } function G_S32Vector(elems) { this.elems = elems; } function G_S8Vector(elems) { this.elems = elems; } function g_scm_procedure2host(obj) { function scm_procedure() { var args = Array.prototype.slice.call(arguments); return g_host2scm_call(obj,args); } return scm_procedure; } var g_sp = -1; function G_ScmString(codes) { this.codes = codes; } G_ScmString.prototype.toString = function () { var limit = 32768; if (this.codes.length < limit) { return String.fromCharCode.apply(null,this.codes); } else { var chunks = []; var i = 0; while (i < this.codes.length) { chunks.push(String.fromCharCode.apply(null,this.codes.slice(i,i + limit))); i += limit; } return chunks.join(""); } }; function G_Structure(slots) { this.slots = slots; if (slots[0] === null) { this.slots[0] = this; } } function G_Symbol(name,hash,interned) { this.name = name; this.hash = hash; this.interned = interned; } G_Symbol.prototype.toString = function () { return this.name; }; function G_U16Vector(elems) { this.elems = elems; } function G_U32Vector(elems) { this.elems = elems; } function G_U8Vector(elems) { this.elems = elems; } function G_ControlPoint(id,parent) { this.id = id; this.parent = parent; } G_ControlPoint.prototype = Object.create(G_Jumpable.prototype); var g_eof_obj = new G_Eof(); function g_host2scm(obj) { if (obj === void 0) { return void 0; } if (obj === null) { return null; } if (typeof obj === "boolean") { return obj; } if (typeof obj === "number") { if ((obj | 0) === obj && obj >= -536870912 && obj <= 536870911) { return obj; } else { return new G_Flonum(obj); } } if (typeof obj === "function") { return g_host_function2scm(obj); } if (typeof obj === "string") { return new G_ScmString(g_str2codes(obj)); } if (typeof obj === "object") { if (obj instanceof Array) { return obj.map( g_host2scm ); } if (obj instanceof Uint8Array) { return new G_U8Vector(obj); } if (obj instanceof Uint16Array) { return new G_U16Vector(obj); } if (obj instanceof Uint32Array) { return new G_U32Vector(obj); } if (obj instanceof Int8Array) { return new G_S8Vector(obj); } if (obj instanceof Int16Array) { return new G_S16Vector(obj); } if (obj instanceof Int32Array) { return new G_S32Vector(obj); } if (obj instanceof Float32Array) { return new G_F32Vector(obj); } if (obj instanceof Float64Array) { return new G_F64Vector(obj); } var alist = null; for (var key in obj) { alist = new G_Pair(new G_Pair(g_host2scm(key),g_host2scm(obj[key])),alist); } return alist; } throw "host2scm error"; } function g_make_interned_symbol(name) { var obj = Object.prototype.hasOwnProperty.call(g_symbol_table,name) ? g_symbol_table[name] : null; if (obj === null) { obj = new G_Symbol(name,g_str_hash(name),false); obj.interned = true; g_symbol_table[name] = obj; } return obj; } function g_scm2host(obj) { if (obj === void 0) { return obj; } if (obj === null) { return obj; } if (typeof obj === "boolean") { return obj; } if (typeof obj === "number") { return obj; } if (obj instanceof G_Flonum) { return obj.val; } if (obj instanceof G_ScmString) { return obj.toString(); } if (obj instanceof Array) { return obj.map( g_scm2host ); } if (obj instanceof G_U8Vector) { return obj.elems; } if (obj instanceof G_U16Vector) { return obj.elems; } if (obj instanceof G_U32Vector) { return obj.elems; } if (obj instanceof G_S8Vector) { return obj.elems; } if (obj instanceof G_S16Vector) { return obj.elems; } if (obj instanceof G_S32Vector) { return obj.elems; } if (obj instanceof G_F32Vector) { return obj.elems; } if (obj instanceof G_F64Vector) { return obj.elems; } if (obj instanceof G_Pair) { var jsobj = {}; var i = 0; while (obj instanceof G_Pair) { var elem = obj.car; if (elem instanceof G_Pair) { jsobj[g_scm2host(elem.car)] = g_scm2host(elem.cdr); } else { jsobj[i] = g_scm2host(elem); } ++i; obj = obj.cdr; } return jsobj; } if (obj instanceof G_Structure) { throw "scm2host error (cannot convert Structure)"; } if (typeof obj === "function") { return g_scm_procedure2host(obj); } throw "scm2host error"; } function g_trampoline(pc) { while (pc !== null) { pc = pc(); } } function g_underflow() { var nextf = g_stack[0]; if (nextf === void 0) { return null; } var frame = nextf; var ra = frame[0]; var fs = ra.fs; var link = ra.link; g_stack = frame.slice(0,fs + 1); g_sp = fs; g_stack[0] = frame[link]; g_stack[link] = g_underflow; return ra; } g_underflow.id = 0; g_underflow.parent = null; g_underflow.fs = 0; g_underflow.link = 0; function G_EntryPoint(id,parent,nfree) { this.id = id; this.parent = parent; this.nfree = nfree; } G_EntryPoint.prototype = Object.create(G_ControlPoint.prototype); function g_module_register(module_descr) { var temp = module_descr[0]; var name = temp[temp.length - 1].name; var info = Object.prototype.hasOwnProperty.call(g_module_map,name) ? g_module_map[name] : null; if (info === null) { g_sp = -1; g_stack[++g_sp] = void 0; g_r0 = g_underflow; g_nargs = 0; g_trampoline(module_descr[4]); } else { var index = info.index; var old = g_module_table[index]; g_module_table[index] = module_descr; if (old === null) { ++g_module_count; if (g_module_count === g_module_table.length) { g_glo["##program-descr"] = [g_module_table,null,false]; temp = g_module_table[g_module_table.length - 1][0]; g_glo["##vm-main-module-ref"] = temp[temp.length - 1]; g_sp = -1; g_stack[++g_sp] = void 0; g_r0 = g_underflow; g_nargs = 0; g_trampoline(g_module_table[0][4]); } } } } function g_poll(dest) { g_pollcount = 100; g_stack.length = g_sp + 1; return dest; } function G_ReturnPoint(id,parent,fs,link) { this.id = id; this.parent = parent; this.fs = fs; this.link = link; } G_ReturnPoint.prototype = Object.create(G_ControlPoint.prototype); function g_scm_call(proc,args) { g_sp = -1; g_stack[++g_sp] = void 0; g_nargs = args.length; i = 0; while (i < g_nargs) { g_stack[++g_sp] = args[i]; ++i; } if (g_nargs > 0) { if (g_nargs > 1) { if (g_nargs > 2) { g_r3 = g_stack[g_sp]; --g_sp; } g_r2 = g_stack[g_sp]; --g_sp; } g_r1 = g_stack[g_sp]; --g_sp; } g_r0 = g_underflow; g_trampoline(proc); return g_r1; } function g_tostr(obj) { if (obj === false) { return "#f"; } else { if (obj === true) { return "#t"; } else { if (obj === null) { return ""; } else { if (obj === void 0) { return "#!void"; } else { if (obj === g_eof_obj) { return "#!eof"; } else { if (obj instanceof G_Pair) { return g_tostr(obj.car) + g_tostr(obj.cdr); } else { return obj.toString(); } } } } } } } function g_bb1_println() { g_println(g_tostr(g_r1)); g_r1 = void 0; return g_r0; } g_bb1_println.id = 0; g_bb1_println.parent = null; g_bb1_println.nfree = -1; g_glo["println"] = g_bb1_println; function g_heapify_cont(ra) { if (g_sp > 0) { var fs = ra.fs; var link = ra.link; var base = g_sp - fs; var chain; if (base > 0) { chain = g_stack.slice(base,base + fs + 1); chain[0] = ra; g_sp = base; var prev_frame = chain; var prev_link = link; ra = prev_frame[prev_link]; fs = ra.fs; link = ra.link; base = g_sp - fs; while (base > 0) { var frame = g_stack.slice(base,base + fs + 1); frame[0] = ra; g_sp = base; prev_frame[prev_link] = frame; prev_frame = frame; prev_link = link; ra = prev_frame[prev_link]; fs = ra.fs; link = ra.link; base = g_sp - fs; } g_stack[link] = g_stack[0]; g_stack[0] = ra; prev_frame[prev_link] = (g_stack.length = fs + 1 , g_stack); } else { g_stack[link] = g_stack[0]; g_stack[0] = ra; chain = (g_stack.length = fs + 1 , g_stack); } g_stack = [chain]; g_sp = 0; } return g_underflow; } function g_host2scm_call(proc,args) { return g_scm2host(g_scm_call(proc,args.map( g_host2scm ))); } function g_prepend_arg1(arg1) { var i = 0; if (g_nargs > 0) { g_stack[++g_sp] = g_r1; if (g_nargs > 1) { g_stack[++g_sp] = g_r2; if (g_nargs > 2) { g_stack[++g_sp] = g_r3; } } } g_stack[++g_sp] = null; while (i < g_nargs) { g_stack[g_sp - i] = g_stack[g_sp - (i + 1)]; ++i; } g_stack[g_sp - i] = arg1; ++g_nargs; if (g_nargs > 0) { if (g_nargs > 1) { if (g_nargs > 2) { g_r3 = g_stack[g_sp]; --g_sp; } g_r2 = g_stack[g_sp]; --g_sp; } g_r1 = g_stack[g_sp]; --g_sp; } } function g_scm2host_call(fn) { if (g_nargs > 0) { g_stack[++g_sp] = g_r1; if (g_nargs > 1) { g_stack[++g_sp] = g_r2; if (g_nargs > 2) { g_stack[++g_sp] = g_r3; } } } var args = g_stack.slice(g_sp + 1 - g_nargs,g_sp + 1 - g_nargs + g_nargs); g_sp += - g_nargs; var ra = g_heapify_cont(g_r0); var frame = g_stack[0]; var tmp = args.map( g_scm2host ); tmp = fn.apply( null, tmp ); g_r1 = g_host2scm(tmp); g_sp = -1; g_stack[++g_sp] = frame; return ra; } function g_wrong_nargs(proc) { g_prepend_arg1(proc); return g_peps["##raise-wrong-number-of-arguments-exception-nary"]; } g_module_registry_init([new G_ModLinkInfo("lib",0),new G_ModLinkInfo("app",1)]); // File generated by Gambit v4.9.3 // Link info: (409003 (js ()) "lib" (("lib")) (module_register make_interned_symbol ffi peps pair r2 glo-println glo poll pollcount string r1 r0 sp stack wrong_nargs nargs) (println append js-alert patch! for-each app# current-milliseconds) (println append js-alert patch! for-each lib# current-milliseconds) (println append js-alert patch! for-each current-milliseconds) #f) var g_cst0_G_lib = new G_ScmString([62,62,62,32,108,105,98,46,115,99,109]); function g_bb1_lib_23_() { // entry-point if (g_nargs !== 0) { return g_wrong_nargs(g_bb1_lib_23_); } g_stack[g_sp+1] = g_r0; g_r1 = g_cst0_G_lib; ++g_sp; if (--g_pollcount === 0) { return g_poll(g_bb2_lib_23_); } else { g_r0 = g_bb3_lib_23_; g_nargs = 1; return g_glo["println"](); } } g_bb1_lib_23_.id = 0; g_bb1_lib_23_.parent = g_bb1_lib_23_; g_bb1_lib_23_.nfree = -1; g_bb1_lib_23_._name = g_make_interned_symbol("lib#"); g_bb1_lib_23_.ctrlpts = null; g_bb1_lib_23_.info = false; function g_bb2_lib_23_() { g_r0 = g_bb3_lib_23_; g_nargs = 1; return g_glo["println"](); } g_bb2_lib_23_.id = 1; g_bb2_lib_23_.parent = g_bb1_lib_23_; function g_bb3_lib_23_() { // return-point g_glo["for-each"] = g_bb1_for_2d_each; g_glo["append"] = g_bb1_append; g_glo["current-milliseconds"] = g_bb1_current_2d_milliseconds; g_glo["js-alert"] = g_bb1_js_2d_alert; g_glo["patch!"] = g_bb1_patch_21_; g_r0 = g_stack[g_sp]; if (--g_pollcount === 0) { return g_poll(g_bb4_lib_23_); } else { g_nargs = 0; --g_sp; return g_glo["app#"](); } } g_bb3_lib_23_.id = 2; g_bb3_lib_23_.parent = g_bb1_lib_23_; g_bb3_lib_23_.fs = 1; g_bb3_lib_23_.link = 1; function g_bb4_lib_23_() { g_nargs = 0; --g_sp; return g_glo["app#"](); } g_bb4_lib_23_.id = 3; g_bb4_lib_23_.parent = g_bb1_lib_23_; g_bb1_lib_23_.ctrlpts = [g_bb1_lib_23_,g_bb2_lib_23_,g_bb3_lib_23_,g_bb4_lib_23_]; g_peps["lib#"] = g_bb1_lib_23_; g_glo["lib#"] = g_bb1_lib_23_; function g_bb1_for_2d_each() { // entry-point if (g_nargs !== 2) { return g_wrong_nargs(g_bb1_for_2d_each); } if (g_r2 instanceof G_Pair) { g_stack[g_sp+1] = g_r0; g_stack[g_sp+2] = g_r1; g_stack[g_sp+3] = g_r2; g_r1 = g_r2.car; g_sp += 3; if (--g_pollcount === 0) { return g_poll(g_bb3_for_2d_each); } else { g_r0 = g_bb4_for_2d_each; g_nargs = 1; return g_stack[g_sp-1](); } } else { return g_bb12_for_2d_each(); } } g_bb1_for_2d_each.id = 0; g_bb1_for_2d_each.parent = g_bb1_for_2d_each; g_bb1_for_2d_each.nfree = -1; g_bb1_for_2d_each._name = g_make_interned_symbol("for-each"); g_bb1_for_2d_each.ctrlpts = null; g_bb1_for_2d_each.info = false; function g_bb2_for_2d_each() { g_stack[g_sp+1] = g_r0; g_stack[g_sp+2] = g_r1; g_stack[g_sp+3] = g_r2; g_r1 = g_r2.car; g_sp += 3; if (--g_pollcount === 0) { return g_poll(g_bb3_for_2d_each); } else { g_r0 = g_bb4_for_2d_each; g_nargs = 1; return g_stack[g_sp-1](); } } g_bb2_for_2d_each.id = 1; g_bb2_for_2d_each.parent = g_bb1_for_2d_each; function g_bb3_for_2d_each() { g_r0 = g_bb4_for_2d_each; g_nargs = 1; return g_stack[g_sp-1](); } g_bb3_for_2d_each.id = 2; g_bb3_for_2d_each.parent = g_bb1_for_2d_each; function g_bb4_for_2d_each() { // return-point g_r1 = g_stack[g_sp].cdr; g_r2 = g_r1; g_r1 = g_stack[g_sp-1]; g_r0 = g_stack[g_sp-2]; g_sp -= 3; if (--g_pollcount === 0) { return g_poll(g_bb6_for_2d_each); } else { if (g_r2 instanceof G_Pair) { return g_bb7_for_2d_each(); } else { return g_bb12_for_2d_each(); } } } g_bb4_for_2d_each.id = 3; g_bb4_for_2d_each.parent = g_bb1_for_2d_each; g_bb4_for_2d_each.fs = 3; g_bb4_for_2d_each.link = 1; function g_bb12_for_2d_each() { g_r1 = void 0; return g_r0; } g_bb12_for_2d_each.id = 4; g_bb12_for_2d_each.parent = g_bb1_for_2d_each; function g_bb6_for_2d_each() { if (g_r2 instanceof G_Pair) { g_stack[g_sp+1] = g_r0; g_stack[g_sp+2] = g_r1; g_stack[g_sp+3] = g_r2; g_r1 = g_r2.car; g_sp += 3; if (--g_pollcount === 0) { return g_poll(g_bb8_for_2d_each); } else { g_r0 = g_bb9_for_2d_each; g_nargs = 1; return g_stack[g_sp-1](); } } else { return g_bb12_for_2d_each(); } } g_bb6_for_2d_each.id = 5; g_bb6_for_2d_each.parent = g_bb1_for_2d_each; function g_bb7_for_2d_each() { g_stack[g_sp+1] = g_r0; g_stack[g_sp+2] = g_r1; g_stack[g_sp+3] = g_r2; g_r1 = g_r2.car; g_sp += 3; if (--g_pollcount === 0) { return g_poll(g_bb8_for_2d_each); } else { g_r0 = g_bb9_for_2d_each; g_nargs = 1; return g_stack[g_sp-1](); } } g_bb7_for_2d_each.id = 6; g_bb7_for_2d_each.parent = g_bb1_for_2d_each; function g_bb8_for_2d_each() { g_r0 = g_bb9_for_2d_each; g_nargs = 1; return g_stack[g_sp-1](); } g_bb8_for_2d_each.id = 7; g_bb8_for_2d_each.parent = g_bb1_for_2d_each; function g_bb9_for_2d_each() { // return-point g_r1 = g_stack[g_sp].cdr; if (g_r1 instanceof G_Pair) { g_stack[g_sp] = g_r1; g_r1 = g_r1.car; g_r0 = g_bb5_for_2d_each; g_nargs = 1; return g_stack[g_sp-1](); } else { g_r1 = void 0; g_sp -= 3; return g_stack[g_sp+1](); } } g_bb9_for_2d_each.id = 8; g_bb9_for_2d_each.parent = g_bb1_for_2d_each; g_bb9_for_2d_each.fs = 3; g_bb9_for_2d_each.link = 1; function g_bb10_for_2d_each() { g_stack[g_sp] = g_r1; g_r1 = g_r1.car; g_r0 = g_bb5_for_2d_each; g_nargs = 1; return g_stack[g_sp-1](); } g_bb10_for_2d_each.id = 9; g_bb10_for_2d_each.parent = g_bb1_for_2d_each; function g_bb5_for_2d_each() { // return-point g_r2 = g_stack[g_sp].cdr; g_r1 = g_stack[g_sp-1]; g_r0 = g_stack[g_sp-2]; g_sp -= 3; if (--g_pollcount === 0) { return g_poll(g_bb6_for_2d_each); } else { if (g_r2 instanceof G_Pair) { return g_bb7_for_2d_each(); } else { return g_bb12_for_2d_each(); } } } g_bb5_for_2d_each.id = 10; g_bb5_for_2d_each.parent = g_bb1_for_2d_each; g_bb5_for_2d_each.fs = 3; g_bb5_for_2d_each.link = 1; function g_bb11_for_2d_each() { g_r1 = void 0; g_sp -= 3; return g_stack[g_sp+1](); } g_bb11_for_2d_each.id = 11; g_bb11_for_2d_each.parent = g_bb1_for_2d_each; g_bb1_for_2d_each.ctrlpts = [g_bb1_for_2d_each,g_bb2_for_2d_each,g_bb3_for_2d_each,g_bb4_for_2d_each,g_bb12_for_2d_each,g_bb6_for_2d_each,g_bb7_for_2d_each,g_bb8_for_2d_each,g_bb9_for_2d_each,g_bb10_for_2d_each,g_bb5_for_2d_each,g_bb11_for_2d_each]; g_peps["for-each"] = g_bb1_for_2d_each; function g_bb1_append() { // entry-point if (g_nargs !== 2) { return g_wrong_nargs(g_bb1_append); } if (g_r1 instanceof G_Pair) { g_stack[g_sp+1] = g_r0; g_stack[g_sp+2] = g_r1; g_r1 = g_r1.cdr; g_r0 = g_bb3_append; g_nargs = 2; g_sp += 2; return g_peps["append"](); } else { g_r1 = g_r2; return g_r0; } } g_bb1_append.id = 0; g_bb1_append.parent = g_bb1_append; g_bb1_append.nfree = -1; g_bb1_append._name = g_make_interned_symbol("append"); g_bb1_append.ctrlpts = null; g_bb1_append.info = false; function g_bb2_append() { g_stack[g_sp+1] = g_r0; g_stack[g_sp+2] = g_r1; g_r1 = g_r1.cdr; g_r0 = g_bb3_append; g_nargs = 2; g_sp += 2; return g_peps["append"](); } g_bb2_append.id = 1; g_bb2_append.parent = g_bb1_append; function g_bb3_append() { // return-point g_r2 = g_stack[g_sp].car; g_r1 = new G_Pair(g_r2,g_r1); g_sp -= 2; return g_stack[g_sp+1](); } g_bb3_append.id = 2; g_bb3_append.parent = g_bb1_append; g_bb3_append.fs = 2; g_bb3_append.link = 1; function g_bb4_append() { g_r1 = g_r2; return g_r0; } g_bb4_append.id = 3; g_bb4_append.parent = g_bb1_append; g_bb1_append.ctrlpts = [g_bb1_append,g_bb2_append,g_bb3_append,g_bb4_append]; g_peps["append"] = g_bb1_append; function g_bb1_current_2d_milliseconds() { // entry-point if (g_nargs !== 0) { return g_wrong_nargs(g_bb1_current_2d_milliseconds); } g_r1 = Date.now(); return g_r0; } g_bb1_current_2d_milliseconds.id = 0; g_bb1_current_2d_milliseconds.parent = g_bb1_current_2d_milliseconds; g_bb1_current_2d_milliseconds.nfree = -1; g_bb1_current_2d_milliseconds._name = g_make_interned_symbol("current-milliseconds"); g_bb1_current_2d_milliseconds.ctrlpts = null; g_bb1_current_2d_milliseconds.info = false; g_bb1_current_2d_milliseconds.ctrlpts = [g_bb1_current_2d_milliseconds]; g_peps["current-milliseconds"] = g_bb1_current_2d_milliseconds; function g_bb1_js_2d_alert() { // entry-point if (g_nargs !== 1) { return g_wrong_nargs(g_bb1_js_2d_alert); } alert(g_scm2host(g_r1));g_r1 = void 0; return g_r0; } g_bb1_js_2d_alert.id = 0; g_bb1_js_2d_alert.parent = g_bb1_js_2d_alert; g_bb1_js_2d_alert.nfree = -1; g_bb1_js_2d_alert._name = g_make_interned_symbol("js-alert"); g_bb1_js_2d_alert.ctrlpts = null; g_bb1_js_2d_alert.info = false; g_bb1_js_2d_alert.ctrlpts = [g_bb1_js_2d_alert]; g_peps["js-alert"] = g_bb1_js_2d_alert; function g_bb1_patch_21_() { // entry-point if (g_nargs !== 1) { return g_wrong_nargs(g_bb1_patch_21_); } patch(g_scm2host(g_r1));g_r1 = void 0; return g_r0; } g_bb1_patch_21_.id = 0; g_bb1_patch_21_.parent = g_bb1_patch_21_; g_bb1_patch_21_.nfree = -1; g_bb1_patch_21_._name = g_make_interned_symbol("patch!"); g_bb1_patch_21_.ctrlpts = null; g_bb1_patch_21_.info = false; g_bb1_patch_21_.ctrlpts = [g_bb1_patch_21_]; g_peps["patch!"] = g_bb1_patch_21_; g_module_register([[g_make_interned_symbol("lib")],[],null,1,g_bb1_lib_23_,false]); // File generated by Gambit v4.9.3 // Link info: (409003 (js ()) "app" (("app")) (module_register glo peps make_interned_symbol sp stack r3 r0 poll pollcount r1 r2 wrong_nargs nargs) () (app#) () #f) function g_bb1_app_23_() { // entry-point if (g_nargs !== 0) { return g_wrong_nargs(g_bb1_app_23_); } g_r2 = 1; g_r1 = 13371; if (--g_pollcount === 0) { return g_poll(g_bb5_app_23_); } else { if (g_r1 === 0) { return g_bb6_app_23_(); } else { return g_bb2_app_23_(); } } } g_bb1_app_23_.id = 0; g_bb1_app_23_.parent = g_bb1_app_23_; g_bb1_app_23_.nfree = -1; g_bb1_app_23_._name = g_make_interned_symbol("app#"); g_bb1_app_23_.ctrlpts = null; g_bb1_app_23_.info = false; function g_bb5_app_23_() { if (g_r1 === 0) { g_r1 = g_r2; return g_r0; } else { g_r3 = g_r1 + -1; g_r1 = g_r1 * g_r2; if (g_r3 === 0) { return g_r0; } else { g_r2 = g_r3 + -1; g_r1 = g_r3 * g_r1; if (g_r2 === 0) { return g_r0; } else { g_r1 = g_r2 * g_r1; g_stack[g_sp+1] = g_r2; g_r2 = g_r1; g_r1 = g_stack[g_sp+1] + -1; if (--g_pollcount === 0) { return g_poll(g_bb5_app_23_); } else { if (g_r1 === 0) { return g_bb6_app_23_(); } else { return g_bb2_app_23_(); } } } } } } g_bb5_app_23_.id = 1; g_bb5_app_23_.parent = g_bb1_app_23_; function g_bb6_app_23_() { g_r1 = g_r2; return g_r0; } g_bb6_app_23_.id = 2; g_bb6_app_23_.parent = g_bb1_app_23_; function g_bb2_app_23_() { g_r3 = g_r1 + -1; g_r1 = g_r1 * g_r2; if (g_r3 === 0) { return g_r0; } else { g_r2 = g_r3 + -1; g_r1 = g_r3 * g_r1; if (g_r2 === 0) { return g_r0; } else { g_r1 = g_r2 * g_r1; g_stack[g_sp+1] = g_r2; g_r2 = g_r1; g_r1 = g_stack[g_sp+1] + -1; if (--g_pollcount === 0) { return g_poll(g_bb5_app_23_); } else { if (g_r1 === 0) { return g_bb6_app_23_(); } else { return g_bb2_app_23_(); } } } } } g_bb2_app_23_.id = 3; g_bb2_app_23_.parent = g_bb1_app_23_; function g_bb7_app_23_() { return g_r0; } g_bb7_app_23_.id = 4; g_bb7_app_23_.parent = g_bb1_app_23_; function g_bb3_app_23_() { g_r2 = g_r3 + -1; g_r1 = g_r3 * g_r1; if (g_r2 === 0) { return g_r0; } else { g_r1 = g_r2 * g_r1; g_stack[g_sp+1] = g_r2; g_r2 = g_r1; g_r1 = g_stack[g_sp+1] + -1; if (--g_pollcount === 0) { return g_poll(g_bb5_app_23_); } else { if (g_r1 === 0) { return g_bb6_app_23_(); } else { return g_bb2_app_23_(); } } } } g_bb3_app_23_.id = 5; g_bb3_app_23_.parent = g_bb1_app_23_; function g_bb4_app_23_() { g_r1 = g_r2 * g_r1; g_stack[g_sp+1] = g_r2; g_r2 = g_r1; g_r1 = g_stack[g_sp+1] + -1; if (--g_pollcount === 0) { return g_poll(g_bb5_app_23_); } else { if (g_r1 === 0) { return g_bb6_app_23_(); } else { return g_bb2_app_23_(); } } } g_bb4_app_23_.id = 6; g_bb4_app_23_.parent = g_bb1_app_23_; g_bb1_app_23_.ctrlpts = [g_bb1_app_23_,g_bb5_app_23_,g_bb6_app_23_,g_bb2_app_23_,g_bb7_app_23_,g_bb3_app_23_,g_bb4_app_23_]; g_peps["app#"] = g_bb1_app_23_; g_glo["app#"] = g_bb1_app_23_; g_module_register([[g_make_interned_symbol("app")],[],null,1,g_bb1_app_23_,false]); }
Tests:
v0
v0()
v1 use strict
v1strict()
v1
v1()
tailcall
tailcall()
vanilla
vanilla()
iterative
iterative()
gambit
gambit()
Rendered benchmark preparation results:
Suite status:
<idle, ready to run>
Run tests (7)
Previous results
Fork
Test case name
Result
v0
v1 use strict
v1
tailcall
vanilla
iterative
gambit
Fastest:
N/A
Slowest:
N/A
Latest run results:
No previous run results
This benchmark does not have any results yet. Be the first one
to run it!
Autogenerated LLM Summary
(model
llama3.2:3b
, generated one year ago):
It seems like you're providing a set of benchmarking data and some code snippets, but I'll need more information to provide a precise answer. Could you please provide the following details: 1. What is the specific problem or question you'd like me to help with? 2. Are there any specific parts of the code or benchmarking data that you'd like me to focus on? Assuming I understand correctly, here's my attempt at answering your "preamble" question: **It looks like you're setting up a benchmarking test for some JavaScript code**. The provided code snippet appears to be a Gambit implementation, which is a high-performance JavaScript runtime. The code defines several benchmark functions (`v0`, `v1strict`, etc.) and registers them with the `g_module_register` function. The `g_peps` and `g_glo` arrays seem to store some metadata or settings for the benchmarks. Please provide more context or information about what you're trying to accomplish, and I'll do my best to assist you!
Related benchmarks:
ruse compiler factorial 001
ruse compiler factorial 002
ruse compiler factorial 003
ruse compiler factorial 004
Comments
Confirm delete:
Do you really want to delete benchmark?