[Python-Dev] Python-versus-CPython question for mul dispatch (original) (raw)
Nick Coghlan ncoghlan at gmail.com
Sat May 16 10:31:34 CEST 2015
- Previous message (by thread): [Python-Dev] Python-versus-CPython question for __mul__ dispatch
- Next message (by thread): [Python-Dev] Python-versus-CPython question for __mul__ dispatch
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 16 May 2015 at 07:35, Nathaniel Smith <njs at pobox.com> wrote:
On Thu, May 14, 2015 at 11:53 PM, Nathaniel Smith <njs at pobox.com> wrote:
On Thu, May 14, 2015 at 9:29 PM, Guido van Rossum <guido at python.org> wrote:
I expect you can make something that behaves like list by defining mul and rmul and returning NotImplemented.
Hmm, it's fairly tricky, and part of the trick is that you can never return NotImplemented (because you have to pretty much take over and entirely replace the normal dispatch rules inside mul and rmul), but see attached for something I think should work. So I guess this is just how Python's list, tuple, etc. work, and PyPy and friends need to match... For the record, it looks like PyPy does already have a hack to implement this -- they do it by having a hidden flag on the built-in sequence types which the implementations of '*' and '+' check for, and if it's found it triggers a different rule for dispatching to the op methods: https://bitbucket.org/pypy/pypy/src/a1a494787f4112e42f50c6583e0fea18db3fb4fa/pypy/objspace/descroperation.py?at=default#cl-692
Oh, that's rather annoying that the PyPy team implemented bug-for-bug compatibility there, and didn't follow up on the operand precedence bug report to say that they had done so. We also hadn't previously been made aware that NumPy is relying on this operand precedence bug to implement publicly documented API behaviour, so fixing it would break end user code :(
I guess that means someone in the numeric community will need to write a PEP to make this "try the other operand first" "feature" part of the language specification, so that other interpreters can implement it up front, rather than all having to come up with their own independent custom hacks just to make NumPy work.
Regards, Nick.
P.S. It would also be nice if someone could take on the PEP for a Python level buffer API for 3.6: http://bugs.python.org/issue13797
-- Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
- Previous message (by thread): [Python-Dev] Python-versus-CPython question for __mul__ dispatch
- Next message (by thread): [Python-Dev] Python-versus-CPython question for __mul__ dispatch
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]