Hello,

On Tue, 08 Dec 2020 11:46:59 -0000
"Mathew Elman" <mathew.el...@ocado.com> wrote:

> I am not sure if this has been suggested before, so my apologies if
> it has.
> 
> I would like to propose adding lazy types for casting builtins in a
> lazy fashion. e.g. `lazy_tuple` which creates a reference to the
> source iterable and a morally immutable sequence but only populates
> the tupular container when it or the source is used.
> 
> Note that if the original object is not a built-in, will not be used
> after casting  _or_ is immutable, this is trivial to implement. The
> difficulty arises when this it not the case, since the lazy object
> needs to also freeze any values that are mutated in the original to
> avoid side-effects.

You pinpointed the problem exactly. So, the only reliable way to create
"lazy" version is to store a copy *eagerly*, which makes the point moot.

Lazy-evaluation languages usually deal with that problem by
disallowing mutation in the first place (i.e. being purely
functional). You can use that solution in Python too. (Without "no
mutation" error checking, but it should be possible to implement the
alternative API which is "immutable", and I bet someone even did
that (PoC-style of course).) 

> An alternative to adding lazy types / lazy type casting (making it
> possible to implement these oneself) would be to add method call
> hooks to python, since this would allow having a "freeze value"
> callback hooked into the __setitem__ and __getitem__ methods.  Hooks
> may be a more useful solution for wider use cases as well.

[]

-- 
Best regards,
 Paul                          mailto:pmis...@gmail.com
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/MV4RZSAC3GK65SICBUIOMNNQDDFIK5MC/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to