Are the critiques in "All the things I hate about Python" valid?
Richard Damon
Richard at Damon-Family.org
Mon Feb 19 20:26:20 EST 2018
On 2/19/18 10:35 AM, Chris Angelico wrote:
> On Tue, Feb 20, 2018 at 12:34 AM, Steven D'Aprano
> <steve+comp.lang.python at pearwood.info> wrote:
>> On Mon, 19 Feb 2018 20:14:32 +1100, Chris Angelico wrote:
>>
>>> As an integer, 3.141590 is 1078530000 $
>>>
>>> Looks to me like C is perfectly happy to interpret a float as an int.
>> Yes, but that's not an *automatic* coercion. To count as weakly typed,
>> the compiler has to do it automatically, without an explicit cast or
>> conversion.
> Fair enough. If you ignore warnings, then C does have that kind of weak typing:
>
> $ cat demo.c
> #include <stdio.h>
>
> int main() {
> float f = 3.14159;
> int *i = &f;
> printf("As an integer, %f is %d\n", f, *i);
> return 0;
> }
>
> $ gcc demo.c
> demo.c: In function ‘main’:
> demo.c:5:14: warning: initialization from incompatible pointer type
> [-Wincompatible-pointer-types]
> int *i = &f;
> ^
> $
>
> GCC was quite happy to compile that code, even though the type of "&f"
> is "pointer to float", and it's being assigned to a variable of type
> "pointer to int". But C is a language saddled with so much history and
> backward compatibility constraints that there are some things you just
> CAN'T make into errors; so in terms of "how safe is C?", I'd have to
> say that warnings (especially those that are enabled by default - I
> didn't need to say "-Wall" for this test), count as "disallowing",
> especially if all the major compilers emit warnings on the same code.
> But I do see the argument that "it compiles, so the language clearly
> permits it".
>
> ChrisA
One thing to note, that is more an issue with GCC than with C. By the
standard, that is a constraint violation, that requires a diagnostic,
and the C standard says it provides no definition of what should happen
here, which is about as strong as it gets to defining something as an
'Error', the only thing with a stronger requirement is the #error
statement which must not running the program.
GCC has decided that this diagnostic will be considered just a 'Warning'
and provides its own meaning to the statement. You really want to run
with pedantic-errors enabled to get GCC to reject code with constraint
violations.
--
Richard Damon
More information about the Python-list
mailing list