[M3devel] [M3commit] CVS Update: cm3

Rodney M. Bates rodney_bates at lcwb.coop
Tue Jul 6 17:11:55 CEST 2010



Mika Nystrom wrote:
> As I've said before,
> 
> When I write:
> 
> VAR 
>   a : INTEGER;
> BEGIN
> 
>   ...
> 
>   .... a := ..    ...
> 
>   ...
> 
> END
> 
> that means I am putting you, the reader, on notice that I have no
> particularly meaningful idea of what a's initial value is.
> 
> If I were to write 
> 
> VAR 
>   a := 0;
> BEGIN
> ...
> END
> 
> I would mislead you into thinking that 0 is a somehow important
> initial value.  Which it's not.  It's just garbage, and it better
> not show up in the computation!

I often write an initialization in a variable declaration that I
fully expect will be overwritten before it is used, assuming I
don't make a mistake elsewhere.  I do this probably more often
in field declarations of record and object types than in variables.

I do it because it makes bugs more likely to be repeatable.
This is at the cost that it may occasionally make a bug go
unnoticed altogether because the initial value happens to
suppress an obvious symptom.

*But*, if it's code I wrote in the last ten years, or
maybe fifteen, such initializations always have (* Paranoid. *)
or (* Defensive. *) or a similar comment, for exactly Mika's
reason.  It tells a reader that this value is intended not be
algorithmically significant.

I suppose one could assume that an implementation of Modula-3
would initialize things consistently, but that relies on
something that is not a rule of the language.  Moreover, it
is very likely not true for a type where all bit patterns
represent members of the type.

Sometimes I try to pick a really weird value, just so
it will be more conspicuous and more likely to trigger
a symptom, if it ever gets mistakenly used.  This also helps
in a debugger just to see if a real algorithmic initialization
has ever been reached.

For many types, I often reserve a distinct value to mean "unknown"
or "meaningless", for some reason or other.  Sometimes I even
have more than one such special value.


> 
> Programs are mainly meant to be read by humans, not computers.
> 
>      Mika
> 
> 
> Jay K writes:
>> --_d2468f3b-9666-4291-98b5-5414421f54d9_
>> Content-Type: text/plain; charset="iso-8859-1"
>> Content-Transfer-Encoding: quoted-printable
>>
>>
>> We are going in circles.
> 



More information about the M3devel mailing list