On Tue, May 15, 2018 at 10:35 AM, Steven D'Aprano
We would need to flag which expression can be cached because it is PURE, and tag how far the CACHE operates over:
<BEGIN CACHE> <PURE> func(arg) <END PURE> + func(arg)*2 + func(arg)**2 <END CACHE>
This would tell the compiler to only evaluate the sub-expression "func(arg)" once, cache the result, and re-use it each other time it sees that same sub-expression within the surrounding expression.
To be clear: it doesn't matter whether or not the sub-expression actually is pure. And it doesn't have to be a function call: it could be anything legal in an expression.
If we had this, with appropriately awesome syntax, would that negate the usefulness of assignment expresions in your mind?
Not for me, no. It doesn't eliminate lengthy expressions, only costly ones. It also doesn't deduplicate for convenience of editing. So that's one goal achieved, two not achieved. If the function is actually pure, all you need is lru_cache and you get that result. If it isn't, you've hit one of the two hardest problems in computing, good luck. ChrisA