[Python-3000] bytes and dicts (was: PEP 3137: Immutable Bytes and Mutable Buffer) (original) (raw)
Neil Toronto ntoronto at cs.byu.edu
Fri Sep 28 21:46:30 CEST 2007
- Previous message: [Python-3000] bytes and dicts (was: PEP 3137: Immutable Bytes and Mutable Buffer)
- Next message: [Python-3000] bytes and dicts (was: PEP 3137: Immutable Bytesand Mutable Buffer)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Jim Jewett wrote:
On 9/28/07, Guido van Rossum <guido at python.org> wrote:
The question is whether it's worth the effort to raise TypeError when the potential exists that a certain hash sequence could raise this TypeError. Bugs depending on the hash sequence are exactly the sort of thing that doesn't get found by tests, and can't be easily reproduced.
Not that my opinion counts for much because I mostly just lurk, but I have to agree. A one-in-a-million Heisenbug (Mandelbug?) is exactly the sort of thing that breaks production systems but nobody can figure out how to fix, and causes management to lose faith in a language or in their developers.
I'm less and less convinced -- after all, we're making the exception only for bytes/str, not for other types that might raise TypeError upon comparison.
What would those other types be? As you point out in the "Bytes and the Str Type" section, this exception violates the "general rule that comparing objects of different types for equality should just return False".
So there's a special case comparison that's intended to protect users from themselves - to keep them from comparing bytes and strings without specifying an encoding. Then there has to be another potentially performance-munching special case to save them from an essentially random exception that could occur because of this extra protection - and this special-casing can only be guaranteed for built-in types, not custom ones. It's too easy to forget to consider it.
Is the only case they need to be saved from the 'if == ' case? Shouldn't it be perfectly fine for a dict to hold a str and a bytes? If I recall correctly, the decision to raise a TypeError on str/bytes comparison was made before bytes became immutable and could be put into dicts.
Maybe the extra protection isn't worth the effort. How about a warning instead of a TypeError? Can the bytecode interpreter do something for simple '==' cases? Are there other alternatives?
Neil
- Previous message: [Python-3000] bytes and dicts (was: PEP 3137: Immutable Bytes and Mutable Buffer)
- Next message: [Python-3000] bytes and dicts (was: PEP 3137: Immutable Bytesand Mutable Buffer)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]