2 ms·
For "match", it needs to be an expression for some things so that means wrapping it in a function and returning the result. In the future I'm going to do some o
by pufuwozu 15y ago
For "match", it needs to be an expression for some things so that means wrapping it in a function and returning the result. In the future I'm going to do some optimisation to see if the expression is the last in a function and remove the wrapper. For example:
return (function() {
if(b instanceof True) {
return ifTrue;
} else if(b instanceof False) {
return ifFalse;
}
})();
Can just become:
if(b instanceof True) {
return ifTrue;
} else if(b instanceof False) {
return ifFalse;
}
The output of `with` is pretty gross. Definitely want to hear ideas on how to clean it up :)
- jawher 15y agoCan't you take te same approach ClojureScript took, i.e. to generate a straitforward translation to JavaScript, and then let Google's closure compiler take care of the optimizing thing ? For instance, for this Roy generated JS: var True = function(){}; var False = function(){}; var getBool = function(b, ifTrue, ifFalse) { return (function() { if(b instanceof True) { return ifTrue; } else if(b instanceof False) { return ifFalse; } })(); } The Closure compiler generates: var True = function() { }, False = function() { }, getBool = function(b, c, d) { var a; b instanceof True ? a = c : b instanceof False && (a = d); return a };
- pufuwozu 15y agoRoy has the same goal as CoffeeScript - create output that would be similar to how a JS dev would write it. If you use Roy but then decide you don't like it, just take the output and keep going. I could rely on Closure for optimal performance but what I really want is optimal readability.