PEP 526 - var annotations and the spirit of python
Christian Gollwitzer
auriocus at gmx.de
Sun Jul 15 02:37:05 EDT 2018
Am 05.07.18 um 12:04 schrieb Steven D'Aprano:
> On Thu, 05 Jul 2018 09:17:20 +0200, Christian Gollwitzer wrote:
>
>> Am 04.07.18 um 17:31 schrieb Steven D'Aprano:
>>> On Wed, 04 Jul 2018 13:48:26 +0100, Bart wrote:
>>>
>>>> Presumably one type hint applies for the whole scope of the variable,
>>>> not just the one assignment.
>>>
>>> You know how in C you can write
>>>
>>> int x = 1; # the type applies for just this one assignment x =
>>> 2.5; # perfectly legal, right?
>>>
>>>
>> Not sure what point you are trying to make, but your example compiles in
>> C, if you replace the '#' comment sign with '//'.
>
>
> Oops.
>
>
> But... it compiles? Seriously?
>
>> Only it doesn't do
>> what you might think: the 2.5 is down-converted to an integer, therefore
>> x will be 2 in the end. There will be a compiler warning but no error.
>
> Sometimes I wonder how C programmers manage to write a bug-free "Hello
> World" program. No wonder it is described as a type-unsafe language or a
> weakly-typed language.
Even this compiles:
#include <stdio.h>
int main() {
int x=1;
x="This is serious";
printf("%d\n", x);
return 0;
}
Apfelkiste:Tests chris$ gcc intx.c && ./a.out
intx.c:4:3: warning: incompatible pointer to integer conversion assigning to
'int' from 'char [16]' [-Wint-conversion]
x="This is serious";
^~~~~~~~~~~~~~~~~~
1 warning generated.
15294370
Assignment in C to an integer will only fail when the source is a
struct. Everything else can be "converted" to an integer by the compiler.
> I understand upcasting ints to floats, that's cool (even if a few
> languages take a hard line on that too, I don't). I understand Python's
> dynamic typing approach. I don't understand C requiring type
> declarations, then down-casting floats to integers.
Without prototypes, it would be worse; the compiler would put the
bit-pattern of a float onto the stack and reinterpret that as an
integer. With prototypes there is a "sensible" result, namely the
integer part of the float. At least it doesn't crash ("2.5" in C is a
double constant, which is usually 64 bit, whereas int is usually 32 bit
only).
>
> At least it shows a warning. But hell, who pays attention to C compiler
> warnings? There's *so many of them*.
In programs that are maintained, the warnings are typically taken
seriously. Some warnings can be annoying, e.g. warnings from generated
code about unused variables and such, but if you see a flood of warnings
in regular code, that is a sign that the code has bad quality or wasn't
ever tested on the platform you try it to compile.
>
> (And I bet that by default the warning is disabled, amirite?)
Some people develop with -Werror (treat warnings as error and abort).
Christian
More information about the Python-list
mailing list