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