Which D features to emphasize for academic review article

F i L witte2008 at gmail.com
Fri Aug 10 21:55:33 PDT 2012


F i L wrote:
> Walter Bright wrote:
>> It catches only a subset of these at compile time. I can craft 
>> any number of ways of getting it to miss diagnosing it. 
>> Consider this one:
>>
>>    float z;
>>    if (condition1)
>>         z = 5;
>>    ... lotsa code ...
>>    if (condition2)
>>         z++;
>> 
>> [...]
>
> Yes, but that's not really an issue since the compiler informs 
> the coder of it's limitation. You're simply forced to 
> initialize the variable in this situation.

I just want to clarify something here. In C#, only class/struct 
fields are defaulted to a usable value. Locals have to be 
explicitly set before they're used.. so, expanding on your 
example above:

     float z;
     if (condition1)
         z = 5;
     else
         z = 6; // 'else' required

     ... lotsa code ...
     if (condition2)
         z++;

On the first condition, without an 'else z = ...', or if the 
condition was removed at a later time, then you'll get a compiler 
error and be forced to explicitly assign 'z' somewhere above 
using it. So C# and D work in "similar" ways in this respect 
except that C# catches these issues at compile-time, whereas in D 
you need to:

   1. run the program
   2. get bad result
   3. hunt down bug

NaNs in C# are "mostly" (citations needed) set to ensure fields 
are initialized in a constructor:

     class Foo
     {
         float f = float.NaN; // Can't 'f' use unless Foo is
                              // properly constructed.
     }


More information about the Digitalmars-d mailing list