Last active
December 31, 2015 05:39
-
-
Save jcmoore/7942319 to your computer and use it in GitHub Desktop.
closure-based dependency management
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var DOHTEM = Function; | |
var DEBUG = function (flag, context) { | |
return (flag === true || (context && context.TARGET && context.TARGET.MODE === true)); | |
}; | |
var DATUM = (function ($$) { | |
var DATUM; | |
return DATUM = function (method) { | |
return DOHTEM.prototype.toString.apply(method); | |
}; | |
}) ({ | |
get DOHTEM () { return DOHTEM; }, | |
}); | |
var DITTO = (function ($$) { | |
var DITTO; | |
return DITTO = function () { | |
var context; | |
var flag; | |
var method; | |
var vars = arguments.length; | |
method = (vars-- > 0) ? arguments[vars] : null; | |
flag = (vars-- > 0) ? arguments[vars] : null; | |
context = (vars-- > 0) ? arguments[vars] : null; | |
if ($$.DEBUG(flag, context)) { // use a proxy | |
return $$.DOHTEM ("method", "return function () { return method.apply(this, arguments); };") (method); | |
} | |
var src = $$.DATUM(method); | |
var s = src.indexOf("(") + 1; | |
var f = src.indexOf(")"); | |
var b = src.indexOf("{") + 1; | |
var e = src.lastIndexOf("}"); | |
return $$.DOHTEM (src.substr(s, f - s), '"use strict";\n' + src.substr(b, e - b)); | |
}; | |
}) ({ | |
get DEBUG () { return DEBUG; }, | |
get DATUM () { return DATUM; }, | |
get DOHTEM () { return DOHTEM; }, | |
}); | |
var DICE = (function ($$) { | |
var DICE; | |
return DICE = function (deps) { | |
return deps; | |
return Object.seal(deps); | |
if (!deps) { | |
return deps; | |
} | |
var config = $$.config; | |
var result = {}; | |
var keys = Object.keys(deps); | |
var count = keys.length; | |
var index; | |
var field; | |
for (index = 0; index < count; index++) { | |
field = keys[index]; | |
config.get = $$.getter(deps, field); | |
config.set = $$.setter(deps, field); | |
Object.defineProperty(result, field, config); | |
} | |
return result; | |
}; | |
}) ({ | |
config: { | |
get: function () {}, | |
set: function () {}, | |
}, | |
getter: function (deps, field) { | |
return function () { | |
return deps[field]; | |
}; | |
}, | |
setter: function (deps, field) { | |
return function (__) { | |
deps[field] = __; | |
}; | |
}, | |
}); | |
var DEPS = (function ($$) { | |
var DEPS; | |
return DEPS = function () { | |
var flag; | |
var deps; | |
var method; | |
var vars = arguments.length; | |
method = (vars-- > 0) ? arguments[vars] : null; | |
deps = (vars-- > 0) ? arguments[vars] : null; | |
flag = (vars-- > 0) ? arguments[vars] : null; | |
var closure = $$.DITTO(this, flag, method); | |
return closure($$.DICE(deps)); | |
}; | |
}) ({ | |
get DITTO () { return DITTO; }, | |
get DICE () { return DICE; }, | |
}); | |
var DUPE = (function ($$) { | |
var DUPE; | |
return DUPE = function () { | |
var deps; | |
var closure; | |
var vars = arguments.length; | |
closure = (vars-- > 0) ? arguments[vars] : null; | |
deps = (vars-- > 0) ? arguments[vars] : null; | |
return closure($$.DICE(deps)); | |
}; | |
}) ({ | |
get DICE () { return DICE; }, | |
}) | |
var DEV = (function ($$) { | |
var DEV; | |
return DEV = function (flag) { | |
var debug = false; | |
var delegate; | |
var env = ({ | |
TARGET: { MODE:flag }, | |
get __ () { return $$.DEPS; }, | |
set __ (__) { $$.DEPS = __; }, | |
get DEV () { return $$.DEV; }, | |
set DEV (__) { $$.DEV = __; }, | |
get DUPE () { return $$.DUPE; }, | |
set DUPE (__) { $$.DUPE = __; }, | |
get DEPS () { return delegate; }, | |
set DEPS (__) { delegate = __; }, | |
get DICE () { return $$.DICE; }, | |
set DICE (__) { $$.DICE = __; }, | |
get DITTO () { return $$.DITTO; }, | |
set DITTO (__) { $$.DITTO = __; }, | |
get DEBUG () { return $$.DEBUG; }, | |
set DEBUG (__) { $$.DEBUG = __; }, | |
}); | |
delegate = debug ? $$.DEPS : $$.DUPE({ | |
get DITTO () { return $$.DITTO }, | |
get DICE () { return $$.DICE }, | |
}, $$.DOHTEM ("$$", "return " + $$.DATUM($$.DEPS))); | |
return env; | |
}; | |
}) ({ | |
get DEV () { return DEV; }, | |
set DEV (__) { DEV = __; }, | |
get DUPE () { return DUPE; }, | |
set DUPE (__) { DUPE = __; }, | |
get DEPS () { return DEPS; }, | |
set DEPS (__) { DEPS = __; }, | |
get DICE () { return DICE; }, | |
set DICE (__) { DICE = __; }, | |
get DITTO () { return DITTO; }, | |
set DITTO (__) { DITTO = __; }, | |
get DEBUG () { return DEBUG; }, | |
set DEBUG (__) { DEBUG = __; }, | |
get DATUM () { return DATUM; }, | |
get DOHTEM () { return DOHTEM; }, | |
}); | |
var DENV = DEV(true); | |
var z = 1; | |
var add = DENV.DEPS({ | |
get z () { return z; }, | |
set z (__) { z = __; }, | |
}, function ($$) { | |
var add; | |
return add = function (x, y) { | |
var __ = $$; | |
//__.z = -__.z; | |
return x + y + __.z; | |
}; | |
}); | |
var f = DENV.DEPS({ | |
get add () { return add; }, | |
}, function ($$) { | |
var f; | |
return f = function () { | |
var __ = $$; | |
var add = __.add; | |
var sum = 0; | |
for (var i = 0; i < 10000; i++) { | |
sum = add(sum, i); | |
//sum = __.add(sum, i); // takes 100x as long !!!!! | |
} | |
//if (sum != 49995000) throw "argh"; | |
}; | |
}); | |
function measure(f) { | |
var start = new Date().valueOf(); | |
for (var i = 0; i < 100000; i++) { | |
f(); | |
} | |
var end = new Date().valueOf(); | |
if (typeof console !== "undefined") { | |
console.log(end - start); | |
} else { | |
print(end - start); | |
} | |
} | |
measure(f); // (31s on node-webkit, 10s on node, 1.6s on Chrome, 1.7s on d8) | |
//Inlined z called from add. | |
//Inlined z called from add. | |
//Inlined add called from f. | |
//Inlined z called from add. | |
//Inlined add called from f. | |
//Inlined f called from measure. | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var DOHTEM = Function; | |
var DEBUG = function (flag, context) { | |
return (flag === true || (context && context.TARGET && context.TARGET.MODE === true)); | |
}; | |
var DATUM = (function ($$) { | |
var DATUM; | |
return DATUM = function (method) { | |
return DOHTEM.prototype.toString.apply(method); | |
}; | |
}) ({ | |
get DOHTEM () { return DOHTEM; }, | |
}); | |
var DITTO = (function ($$) { | |
var DITTO; | |
return DITTO = function () { | |
var context; | |
var flag; | |
var method; | |
var vars = arguments.length; | |
method = (vars-- > 0) ? arguments[vars] : null; | |
flag = (vars-- > 0) ? arguments[vars] : null; | |
context = (vars-- > 0) ? arguments[vars] : null; | |
if ($$.DEBUG(flag, context)) { // use a proxy | |
return $$.DOHTEM ("method", "return function () { return method.apply(this, arguments); };") (method); | |
} | |
var src = $$.DATUM(method); | |
var s = src.indexOf("(") + 1; | |
var f = src.indexOf(")"); | |
var b = src.indexOf("{") + 1; | |
var e = src.lastIndexOf("}"); | |
return $$.DOHTEM (src.substr(s, f - s), '"use strict";\n' + src.substr(b, e - b)); | |
}; | |
}) ({ | |
get DEBUG () { return DEBUG; }, | |
get DATUM () { return DATUM; }, | |
get DOHTEM () { return DOHTEM; }, | |
}); | |
var DICE = (function ($$) { | |
var DICE; | |
return DICE = function (deps) { | |
return deps; | |
return Object.seal(deps); | |
if (!deps) { | |
return deps; | |
} | |
var config = $$.config; | |
var result = {}; | |
var keys = Object.keys(deps); | |
var count = keys.length; | |
var index; | |
var field; | |
for (index = 0; index < count; index++) { | |
field = keys[index]; | |
config.get = $$.getter(deps, field); | |
config.set = $$.setter(deps, field); | |
Object.defineProperty(result, field, config); | |
} | |
return result; | |
}; | |
}) ({ | |
config: { | |
get: function () {}, | |
set: function () {}, | |
}, | |
getter: function (deps, field) { | |
return function () { | |
return deps[field]; | |
}; | |
}, | |
setter: function (deps, field) { | |
return function (__) { | |
deps[field] = __; | |
}; | |
}, | |
}); | |
var DEPS = (function ($$) { | |
var DEPS; | |
return DEPS = function () { | |
var flag; | |
var deps; | |
var method; | |
var vars = arguments.length; | |
method = (vars-- > 0) ? arguments[vars] : null; | |
deps = (vars-- > 0) ? arguments[vars] : null; | |
flag = (vars-- > 0) ? arguments[vars] : null; | |
var closure = $$.DITTO(this, flag, method); | |
return closure($$.DICE(deps)); | |
}; | |
}) ({ | |
get DITTO () { return DITTO; }, | |
get DICE () { return DICE; }, | |
}); | |
var DUPE = (function ($$) { | |
var DUPE; | |
return DUPE = function () { | |
var deps; | |
var closure; | |
var vars = arguments.length; | |
closure = (vars-- > 0) ? arguments[vars] : null; | |
deps = (vars-- > 0) ? arguments[vars] : null; | |
return closure($$.DICE(deps)); | |
}; | |
}) ({ | |
get DICE () { return DICE; }, | |
}) | |
var DEV = (function ($$) { | |
var DEV; | |
return DEV = function (flag) { | |
var debug = false; | |
var delegate; | |
var env = ({ | |
TARGET: { MODE:flag }, | |
get __ () { return $$.DEPS; }, | |
set __ (__) { $$.DEPS = __; }, | |
get DEV () { return $$.DEV; }, | |
set DEV (__) { $$.DEV = __; }, | |
get DUPE () { return $$.DUPE; }, | |
set DUPE (__) { $$.DUPE = __; }, | |
get DEPS () { return delegate; }, | |
set DEPS (__) { delegate = __; }, | |
get DICE () { return $$.DICE; }, | |
set DICE (__) { $$.DICE = __; }, | |
get DITTO () { return $$.DITTO; }, | |
set DITTO (__) { $$.DITTO = __; }, | |
get DEBUG () { return $$.DEBUG; }, | |
set DEBUG (__) { $$.DEBUG = __; }, | |
}); | |
delegate = debug ? $$.DEPS : $$.DUPE({ | |
get DITTO () { return $$.DITTO }, | |
get DICE () { return $$.DICE }, | |
}, $$.DOHTEM ("$$", "return " + $$.DATUM($$.DEPS))); | |
return env; | |
}; | |
}) ({ | |
get DEV () { return DEV; }, | |
set DEV (__) { DEV = __; }, | |
get DUPE () { return DUPE; }, | |
set DUPE (__) { DUPE = __; }, | |
get DEPS () { return DEPS; }, | |
set DEPS (__) { DEPS = __; }, | |
get DICE () { return DICE; }, | |
set DICE (__) { DICE = __; }, | |
get DITTO () { return DITTO; }, | |
set DITTO (__) { DITTO = __; }, | |
get DEBUG () { return DEBUG; }, | |
set DEBUG (__) { DEBUG = __; }, | |
get DATUM () { return DATUM; }, | |
get DOHTEM () { return DOHTEM; }, | |
}); | |
var DENV = DEV(true); | |
var z = 1; | |
var add = DENV.DEPS({ | |
get z () { return z; }, | |
set z (__) { z = __; }, | |
}, function add__ ($$) { | |
return function add (x, y) { | |
var __ = $$; | |
//__.z = -__.z; | |
return x + y + __.z; | |
}; | |
}); | |
var f = DENV.DEPS({ | |
get add () { return add; }, | |
}, function f__ ($$) { | |
return function f () { | |
var __ = $$; | |
var add = __.add; | |
var sum = 0; | |
for (var i = 0; i < 10000; i++) { | |
sum = add(sum, i); | |
//sum = __.add(sum, i); // takes 100x as long !!!!! | |
} | |
//if (sum != 49995000) throw "argh"; | |
}; | |
}); | |
function measure(f) { | |
var start = new Date().valueOf(); | |
for (var i = 0; i < 100000; i++) { | |
f(); | |
} | |
var end = new Date().valueOf(); | |
if (typeof console !== "undefined") { | |
console.log(end - start); | |
} else { | |
print(end - start); | |
} | |
} | |
measure(f); // (2.6s on node-webkit, 10s on node, 1.6s on Chrome, 1.7s on d8) | |
//Inlined z called from add. | |
//Inlined z called from add. | |
//Inlined add called from f. | |
//Inlined z called from add. | |
//Inlined add called from f. | |
//Inlined f called from measure. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var DOHTEM = Function; | |
var DEBUG = function DEBUG (flag, context) { | |
return (flag === true || (context && context.TARGET && context.TARGET.MODE === true)); | |
}; | |
var DATUM = (function __ ($$) { | |
return function DATUM (method) { | |
return DOHTEM.prototype.toString.apply(method); | |
}; | |
}) ({ | |
get DOHTEM () { return DOHTEM; }, | |
}); | |
var DITTO = (function __ ($$) { | |
return function DITTO () { | |
var context; | |
var flag; | |
var method; | |
var vars = arguments.length; | |
method = (vars-- > 0) ? arguments[vars] : null; | |
flag = (vars-- > 0) ? arguments[vars] : null; | |
context = (vars-- > 0) ? arguments[vars] : null; | |
if ($$.DEBUG(flag, context)) { // use a proxy | |
return $$.DOHTEM ("method", "return function DELEGATE () { return method.apply(this, arguments); };") (method); | |
} | |
var src = $$.DATUM(method); | |
var s = src.indexOf("(") + 1; | |
var f = src.indexOf(")"); | |
var b = src.indexOf("{") + 1; | |
var e = src.lastIndexOf("}"); | |
return $$.DOHTEM (src.substr(s, f - s), '"use strict";\n' + src.substr(b, e - b)); | |
}; | |
}) ({ | |
get DEBUG () { return DEBUG; }, | |
get DATUM () { return DATUM; }, | |
get DOHTEM () { return DOHTEM; }, | |
}); | |
var DICE = (function __ ($$) { | |
return function DICE (deps) { | |
return deps; | |
return Object.seal(deps); | |
if (!deps) { | |
return deps; | |
} | |
var config = $$.config; | |
var result = {}; | |
var keys = Object.keys(deps); | |
var count = keys.length; | |
var index; | |
var field; | |
for (index = 0; index < count; index++) { | |
field = keys[index]; | |
config.get = $$.getter(deps, field); | |
config.set = $$.setter(deps, field); | |
Object.defineProperty(result, field, config); | |
} | |
return result; | |
}; | |
}) ({ | |
config: { | |
get: function dget () {}, | |
set: function dset () {}, | |
}, | |
getter: function getter (deps, field) { | |
return function dgetter () { | |
return deps[field]; | |
}; | |
}, | |
setter: function setter (deps, field) { | |
return function dsetter (__) { | |
deps[field] = __; | |
}; | |
}, | |
}); | |
var DEPS = (function __ ($$) { | |
return function DEPS () { | |
var flag; | |
var deps; | |
var method; | |
var vars = arguments.length; | |
method = (vars-- > 0) ? arguments[vars] : null; | |
deps = (vars-- > 0) ? arguments[vars] : null; | |
flag = (vars-- > 0) ? arguments[vars] : null; | |
var closure = $$.DITTO(this, flag, method); | |
return closure($$.DICE(deps)); | |
}; | |
}) ({ | |
get DITTO () { return DITTO; }, | |
get DICE () { return DICE; }, | |
}); | |
var DUPE = (function __ ($$) { | |
return function DUPE () { | |
var deps; | |
var closure; | |
var vars = arguments.length; | |
closure = (vars-- > 0) ? arguments[vars] : null; | |
deps = (vars-- > 0) ? arguments[vars] : null; | |
return closure($$.DICE(deps)); | |
}; | |
}) ({ | |
get DICE () { return DICE; }, | |
}) | |
var DEV = (function __ ($$) { | |
return function DEV (flag) { | |
var debug = false; | |
var delegate; | |
var env = ({ | |
TARGET: { MODE:flag }, | |
get __ () { return $$.DEPS; }, | |
set __ (__) { $$.DEPS = __; }, | |
get DEV () { return $$.DEV; }, | |
set DEV (__) { $$.DEV = __; }, | |
get DUPE () { return $$.DUPE; }, | |
set DUPE (__) { $$.DUPE = __; }, | |
get DEPS () { return delegate; }, | |
set DEPS (__) { delegate = __; }, | |
get DICE () { return $$.DICE; }, | |
set DICE (__) { $$.DICE = __; }, | |
get DITTO () { return $$.DITTO; }, | |
set DITTO (__) { $$.DITTO = __; }, | |
get DEBUG () { return $$.DEBUG; }, | |
set DEBUG (__) { $$.DEBUG = __; }, | |
}); | |
delegate = debug ? $$.DEPS : $$.DUPE({ | |
get DITTO () { return $$.DITTO }, | |
get DICE () { return $$.DICE }, | |
}, $$.DOHTEM ("$$", "return " + $$.DATUM($$.DEPS))); | |
return env; | |
}; | |
}) ({ | |
get DEV () { return DEV; }, | |
set DEV (__) { DEV = __; }, | |
get DUPE () { return DUPE; }, | |
set DUPE (__) { DUPE = __; }, | |
get DEPS () { return DEPS; }, | |
set DEPS (__) { DEPS = __; }, | |
get DICE () { return DICE; }, | |
set DICE (__) { DICE = __; }, | |
get DITTO () { return DITTO; }, | |
set DITTO (__) { DITTO = __; }, | |
get DEBUG () { return DEBUG; }, | |
set DEBUG (__) { DEBUG = __; }, | |
get DATUM () { return DATUM; }, | |
get DOHTEM () { return DOHTEM; }, | |
}); | |
var DENV = DEV(true); | |
var z = 1; | |
var add = DENV.DEPS({ | |
get z () { return z; }, | |
set z (__) { z = __; }, | |
}, function __ ($$) { | |
return function add (x, y) { | |
var __ = $$; | |
//__.z = -__.z; | |
return x + y + __.z; | |
}; | |
}); | |
var f = DENV.DEPS({ | |
get add () { return add; }, | |
}, function __ ($$) { | |
return function f () { | |
var __ = $$; | |
var add = __.add; | |
var sum = 0; | |
for (var i = 0; i < 10000; i++) { | |
sum = add(sum, i); | |
//sum = __.add(sum, i); // takes 100x as long !!!!! | |
} | |
//if (sum != 49995000) throw "argh"; | |
}; | |
}); | |
function measure(f) { | |
var start = new Date().valueOf(); | |
for (var i = 0; i < 100000; i++) { | |
// invoke f() with f_this as "this" -- thus exposing the add() method | |
f(); | |
} | |
var end = new Date().valueOf(); | |
if (typeof console !== "undefined") { | |
console.log(end - start); | |
} else { | |
print(end - start); | |
} | |
} | |
measure(f); // (2.6s on node-webkit, 10s on node, 1.6s on Chrome, 1.7s on d8) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment