Hello, On Wed, 13 Jan 2021 02:08:01 -0800 Emily Bowman <silverback...@gmail.com> wrote:
> Even if you define __bool__() as returning a bool, and > error/undefined behavior otherwise, that doesn't eliminate side > effects. Is it even possible to nail down a definition to the point > that you can say, "Thou shalt not mutate or cause anything" and have > it meaningfully enforced in the compiler or interpreter? Yes, sure, "pure" annotation on a function would (ideally/eventually) need "typechecking". We could start with simple rules like: a) a pure function should not mutate any objects which it didn't create; b) for "mutation" also counts passing objects to (other) non-pure functions. The hardest part is again to know which of these other functions is pure or impure. Runtime checking should not be the aim to shoot for. There should be a way to preserve as much as possible of Python's dynamic nature that we all love, yet avoid runtime lookups. The above "purity" conditions are also too restrictive, so would need to be extended/elaborated (which would certainly require more detailed annotations; fortunately, we all already accepted annotations to be a part of Python's nature, so wanting to use them more shouldn't come as surprise). > > -Em > > On Wed, Jan 13, 2021 at 12:18 AM Paul Sokolovsky <pmis...@gmail.com> > wrote: > > > Hello, > > > > On Wed, 13 Jan 2021 18:27:07 +1100 > > Chris Angelico <ros...@gmail.com> wrote: > > > > [] > > > > > > Optimizations are an implementation detail, and implementation > > > > details should not change the language. > > > > > > The language can also be defined in an optimization-friendly way, > > > though. Consider how we got positional-only arguments in Python: > > > first they existed in C-implemented functions in CPython, even > > > though they couldn't exist in pure Python code, and then the > > > functionality got added to the language definition, thus > > > permitting the optimization. > > > > In this case, the culprit seems to be that __bool__() and many other > > "special" methods may have side effects. So, just as "const" > > annotation would be useful for variables, "pure" (side-effect free) > > annotation would be useful for functions. > > > > But that alone won't help due to too-dynamic nature of Python. It's > > not much of an optimization if, at runtime, at each call-site, you > > need to check whether a function is pure to decide if you have to > > call it, or may skip it. Instead, that rather be done at compile > > time. > > > > But checking which method (pure or impure) will be called when is > > again complicated statically in Python. What to do about that? > > Well, we can introduce, ahem, some "strict" mode, in which *all* > > __bool__(), __gt__(), and friends must be declared pure, and for > > good measure, returning bool. Then we know we can skip any such > > method call. > > > > You see, all heresy starts from small things... > > > > [] > > > > -- > > Best regards, > > Paul mailto:pmis...@gmail.com > > _______________________________________________ > > Python-Dev mailing list -- python-dev@python.org > > To unsubscribe send an email to python-dev-le...@python.org > > https://mail.python.org/mailman3/lists/python-dev.python.org/ > > Message archived at > > https://mail.python.org/archives/list/python-dev@python.org/message/4P52JORZ4WBCPC6DERRITDRETEFWT73H/ > > Code of Conduct: http://python.org/psf/codeofconduct/ > > -- Best regards, Paul mailto:pmis...@gmail.com _______________________________________________ Python-Dev mailing list -- python-dev@python.org To unsubscribe send an email to python-dev-le...@python.org https://mail.python.org/mailman3/lists/python-dev.python.org/ Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/TCG7237FJILE4MVKBXSTTQEIR6CX7VFJ/ Code of Conduct: http://python.org/psf/codeofconduct/