Why not allow empty code blocks?

Marko Rauhamaa marko at pacujo.net
Fri Jul 29 18:01:28 EDT 2016


BartC <bc at freeuk.com>:
> On 29/07/2016 20:43, Terry Reedy wrote:
>> So put in 'pass' whether or not there is no debugging code,
>> commented-out debugging code, or debugging code that runs, or whatever.
>
> But that's inelegant.
>
> The language requires that blocks always contains 1 or more
> statements. Fair enough, except that 0 statements are often needed so
> that a dummy statement - 'pass' - is required just to keep the code
> legal.
>
> That's untidy, as is your suggestion to keep the dummy statement lying
> around anyway so that the number of statements will always be N+1 and
> can never reach 0 as N changes.

Yes, untidy, albeit only slightly. What you gain is visible blocks.

The gods have spoken and have decided for visibility over philosophical
elegance.

I *have* been hit with analogous untidiness in classic C, which didn't
accept empty structs or empty arrays. I was generating C arrays from a
compiler and--annoyingly--had to place special checks in the compiler to
place a dummy element in an array where none would be generated
naturally.

I have also had to spend some time debugging some segmentation faults
caused by #ifdef's and surprising sizeof calculations in (classic) C and
(modern) C++. Look at this structure:

   struct S {
       int x[0];
   };

Gcc claims sizeof(struct S) == 0 in C and C++.

Well, that's natural, right?

How about:

   struct S {
   };

Now gcc claims sizeof(struct S) == 0 if the language is C but
sizeof(struct S) == 1 if the language is C++.

That's because Stroustrup is allergic to 0-size data structures the way
GvR is allergic to 0-size blocks.


Marko



More information about the Python-list mailing list