On Tue, Feb 28, 2017 at 8:54 AM, M.-A. Lemburg <m...@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.
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/