On Tue, May 15, 2018 at 10:35 AM, Steven D'Aprano <[email protected]> wrote:
> 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
_______________________________________________
Python-ideas mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to