Steven D'Aprano wrote:
> On Wed, Dec 09, 2020 at 12:05:17PM -0000, Mathew Elman wrote:
> > Steven D'Aprano wrote:
> > On Tue, Dec 08, 2020 at 11:46:59AM -0000, Mathew
> > Elman wrote:
> > 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.
> > What are your use-cases for this?
> > Does this include things like lazy_list, lazy_float,
> > lazy_bool, 
> > lazy_str, lazy_bytearray etc?
> > I would say yes, it should include these types as well.
> > The use case is for when you are casting between types a high number 
> > of times to pass them around, especially into another type and back.
> > I would say, don't do that. If you have a list, and you pass it to 
> another function after converting to a tuple, why would you take that 
> tuple and convert back to a list when you already have a list?
> For types like casting back and forth between float and int, there will 
> be data loss.
> Even if there is not, the overhead of creating a "lazy proxy" to the 
> float is probably greater than just converting.
I see what you mean here, I think my initial thought was more towards container 
types rather than ints and floats, I said these should be included because I 
saw no reason why not. Thinking about it, for int and float types it makes less 
sense, because you have no great saving, whereas for a container type, you can 
increase the reference count by 1 instead of N. 

> > How do these
> > hooks freeze the list?
> > they don't freeze the list, they freeze the values in the lazy_tuple 
> > when the list is mutated, so when mutating the list, the values in the 
> > tuple are set (if they have not been already), so that they aren't 
> > also mutated in the lazy_tuple.
You seem to be referring to the lazy_tuple as the hook, I am saying that _I_ 
could implement a lazy class if hooks existed. i.e. I could make a class 
`LazyTuple` that when instanced with a list, creates and stores the hooks on 
itself. 

> > How is this supposed to work in practice?
A method e.g. `create_hook(method, callback)` would return a concrete reference 
to the hook, and uses a weak reference to know if it needs to execute the 
callback (meaning that it would only add the overhead of a check for callbacks 
if the concrete reference still existed).

> > Where does the hook live? When 
> is it called? What does it do?
> How does the lazy tuple know that the list's setitem has been called?

It knows because of a hook? This is my whole point about including hooks in 
this thread, i.e. if it was possible to add a callback on a method, it would 
execute when it is called. I am not sure I understand your question.
_______________________________________________
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/GD3TTQPULXGVQIKQUTERF6MAOD5WUS4B/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to