Nim is quite interesting, I haven't had a chance to dig deep into it yet. I'll check it out, thanks!
isolate side effects to one part of the codebase
Yeah! I think this is one of the big tricks we use for reasoning and composing our code: we move things to the edge. We separate "model" from "view", DB access from business logic, etc. To me pure function composition seems to be the essence of this approach.
I don't know to what extend javascript runtimes could benefit from something like that.
Alas, neither do I. In my uneducated view, engines could optimize -> code easier. Array methods run in parallel is something long-promised but not yet possible. Also maybe we could get automatic memoization of pure functions with garbage-collected caches.
Maybe JS libs could also do some optimizations if we had a method to distinguish pure from impure functions (isPureFunction or isImmutable && isFunction).
I think to test the idea we could imitate pure functions client-side a-la:
letPURE_SYMBOL=Symbol();exportfunctionpurify(fn){fn=Function('a','return ('+fn.toString()+')(a)');// naive eradication of possible closure capturesletresult=x=>isImmutable(x)?fn(x):throw'Pure functions can be called only w/ immutable args';result[PURE_SYMBOL]=true;returnObject.freeze(result);}exportfunctionisPure(fn){returnPURE_SYMBOLinfn;}
Nim is quite interesting, I haven't had a chance to dig deep into it yet. I'll check it out, thanks!
Yeah! I think this is one of the big tricks we use for reasoning and composing our code: we move things to the edge. We separate "model" from "view", DB access from business logic, etc. To me pure function composition seems to be the essence of this approach.
Alas, neither do I. In my uneducated view, engines could optimize
->
code easier. Array methods run in parallel is something long-promised but not yet possible. Also maybe we could get automatic memoization of pure functions with garbage-collected caches.Maybe JS libs could also do some optimizations if we had a method to distinguish pure from impure functions (
isPureFunction
orisImmutable && isFunction
).I think to test the idea we could imitate pure functions client-side a-la:
It's at least interesting to fantasize about it 🙂
P.S: someone shared with me a link to TS discussion on a related subject "add a modifier for pure functions" (haven't read it yet)