Are the critiques in "All the things I hate about Python" valid?
bartc
bc at freeuk.com
Tue Feb 20 07:43:22 EST 2018
On 20/02/2018 12:11, Paul Moore wrote:
> On 20 February 2018 at 11:18, Antoon Pardon <antoon.pardon at vub.be> wrote:
>> There is no such possibility in Python. You can off course start with x
>> = Digit(5), but the language
>> won't stop you from doing x = 11 later.
>> I'm not proficient with C++, but IIUC, you could make a class in C++ and
>> have the constructor and
>> copy operator check for these kind of things. True it would be run-time
>> checks but that would
>> already be more than Python can give.
I don't know if that counts. In Pascal (and presumably Ada) then all the
gubbins need to make this work properly:
var x: 1..10;
x = 10;
x = x + 1; { error? }
would already be in place. Trying to emulate that within a language is
complex and unwieldy, and someone has to know how to do it, and then do
it. If someone else creates an add-on for it, then those tend to be
large and cumbersome (because they have to have every conceivable bell
and whistle). And it's an extra dependency.
The end result: if I wanted to sit down right now and have a variable
and/or type in Python or C++ that is constrained to be within 1..10,
then I couldn't. I'd have to use a generic integer type.
And in fact, in Python, I couldn't even do that, as I can assign
anything at all to x.
This is not necessarily undesirable: part of the point of dynamic
languages is being informal and having less discipline imposed so that
things can get done more rapidly. But enforced discipline can also be
useful.
> It's somewhat unrelated (scoping is a different topic than assignment)
> but you can do
>
> {
> int x = 2;
> {
> char *x = "hello";
> }
> }
>
> in C, so names can have different types even in C (it's just
> variables, or names within a specific scope, that have types
> associated with them).
That's scope; Python has that too. (Although not C's block scopes and
its bizarre rules which mean that you can have up 5 different 'x'
meanings even within the same block. And an unlimited number of 'x'
scopes within the same function.
(This is allowed in C: int L; L: L=10; goto L; )
--
bartc
More information about the Python-list
mailing list