Are the critiques in "All the things I hate about Python" valid?
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Mon Feb 19 09:25:26 EST 2018
On Mon, 19 Feb 2018 12:35:19 +0000, bartc wrote:
> Type systems get rapidly very complicated when you have to deal with
> arbitrary sets of values and with arbitrary rules of interaction.
> Someone has to devise a programming language to allow all that without
> tying itself up in knots. Someone else has to program in it. And someone
> else has to try and understand it!
Indeed. That's exactly the point I'm making.
A type-system that allowed you to express extremely fine-grained
distinctions would be effectively a fully fledged programming language
itself, probably even Turing Complete, and so our type-specifications
would be as error-prone as the code we write now.
Probably more so, due to the requirements that type specifications be a
lot more compact than the rest of the code we write.
> Ones like C++ has already tied itself itself up in knots just doing the
> basics; I'm not sure how it would handle even my 1,3,5,7,9 type.
>
> But Python has classes and can do some of this stuff; how would it
> handle a numeric type that is constrained to be whole numbers within
> 0..9 inclusive?
This becomes easy at run-time:
class Digit(int):
def __new__(cls, arg):
instance = super().__new__(cls, arg)
if not 0 <= instance <= 9:
raise ValueError('argument is out of range')
return instance
The above is obviously not a full-blown production-ready class. But it
illustrates the basic concept. This is the sort of thing that dynamic
languages excel at: enforcing constraints at run-time which are hard to
enforce at compile-time.
--
Steve
More information about the Python-list
mailing list