[Python-ideas] Another use case for the 'lazy' (aka 'delayed') keyword
David Mertz
mertz at gnosis.cx
Tue Feb 28 12:10:00 EST 2017
On Tue, Feb 28, 2017 at 8:54 AM, M.-A. Lemburg <mal at egenix.com> wrote:
> On 28.02.2017 17:35, David Mertz wrote:
> > Clearly there is SOME semantics that is consistent and coherent since
> many
> > languages have either a lazy or eager declaration syntax, with different
> > defaults between languages but both being built in. There are a lot of
> > ways that Python isn't Haskell, obviously. But both Scheme and OCaml are
> > eager by default with a lazy declaration (and Haskell or Miranda have an
> > eager declaration correspondingly).
> >
> > It might be worth looking at their semantics in the PEP.
>
> Scheme, for example, uses an explicit approach to turning
> a promise into a value:
>
> http://www.shido.info/lisp/scheme_lazy_e.html
>
> This makes a lot of sense, but you can already have the
> same in Python using generators.
>
I think the closer equivalent is a lambda. And it's quite true that
Scheme's `force` is pretty much the same thing as making a call to the
lambda later. E.g.
def force(x):
if callable(x):
return x()
else:
return x
In Python we only have pass by value (parameters to functions
> get pushed onto the VM stack). Pass by name can also be had,
> but requires explicit indirection, e.g. by using a generator
> as wrapper.
I wouldn't want to change pass-by-value semantics. What I imagine instead
is a new type `lazy` or `delayed` or `deferred` (whatever spelling).
Delayed objects would have that type, and access to objects would need to
do an implementation-level call to a "_force" that looks something like:
def _force(x):
if isinstance(x, delayed):
return _concretize(x)
else:
return x
I *do* see the obvious likely problem here. Object access is perhaps the
most common thing that happens in Python, and adding a new conditional
check to every one of those could very well slow down all the non-lazy
behavior far too much.
--
Keeping medicines from the bloodstreams of the sick; food
from the bellies of the hungry; books from the hands of the
uneducated; technology from the underdeveloped; and putting
advocates of freedom in prisons. Intellectual property is
to the 21st century what the slave trade was to the 16th.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20170228/2117c577/attachment.html>
More information about the Python-ideas
mailing list