[Python-ideas] Why is design-by-contracts not widely
Dan Sommers
2QdxY4RzWzUUiLuE at potatochowder.com
Fri Sep 28 20:22:03 EDT 2018
On 9/28/18 7:39 PM, Steven D'Aprano wrote:
> On Fri, Sep 28, 2018 at 07:18:54PM +0200, 2qdxy4rzwzuuilue at potatochowder.com wrote:
>>
>> On 9/28/18 12:45 PM, Steven D'Aprano wrote:
>>> On Tue, Sep 25, 2018 at 09:59:53PM +1000, Hugh Fisher wrote:
>>>
>>>> C and Python (currently) are known as simple languages.
>>>
>>> o_O
>>>
>>> That's a usage of "simple" I haven't come across before. Especially in
>>> the case of C, which is a minefield of *intentionally* underspecified
>>> behaviour which makes it near to impossible for the developer to tell
>>> what a piece of syntactically legal C code will actually do in practice.
>>
>> s/C/Python/
>>
>> s/underspecified/dynamic/
>>
>> ;-)
>
> I see the wink, but I don't see the relevance. Are you agreeing with me
> or disagreeing?
I agree that Hugh's use of "simple" is unfamiliar.
I disagree that C is is a bigger offender than Python when it comes to a
developer telling what a piece of syntactically legal code will actually
do in practice. If that's not what you meant by "Especially in the case
of C...," then I mis-interpreted or read too much into your wording.
> Python is "simple" in the sense that the execution model is *relatively*
> simple, but its not a minimalist language by any definition. And as you
> say, the execution model is dynamic: we can't be sure what legal code
> will do until you know the runtime state.
That's my point: What you emphasized about C can be applied equally to
Python. In C, it's because the standard is intentionally
underspecified; in Python, it's y because the language is intentionally
dynamic.
When you said "underspecified," I didn't make the leap to "undefined
behaviour" (although I think I know from past experience how you feel
about C and its undefined behaviour). Instead, I jumped to things like
the ambiguity in the size of an int, or the freedom the compiler has to
pack/align struct values or implement integers as something other than
two's complement.
> (Although we can often guess, based on assumptions about sensible,
> non-weird objects that don't do weird things.)
Again, the same is true of C. In Python, weird objects might override
getattr; in C weird objects might point to hardware registers, or depend
on implementation specific detail(s).
> But none of that compares to C undefined behaviour. People who think
> that they are equivalent, don't understand C undefined behaviour.
Well, yes: Some syntactically legal C results in nasal demons, and some
of that code is harder to spot than others. AFAIK, syntactically legal
Python can only do that if the underlying C code invokes undefined
behaviour.
More information about the Python-ideas
mailing list