Which D features to emphasize for academic review article

Mehrdad wfunction at hotmail.com
Tue Aug 14 18:07:16 PDT 2012


On Wednesday, 15 August 2012 at 00:32:43 UTC, Walter Bright wrote:
> On 8/14/2012 3:57 PM, Mehrdad wrote:
> I guess they aren't really default constructors, then <g>.

I say potayto, you say potahto...  :P


> So what happens when you allocate an array of them?

For arrays, they're called automatically.


Well, OK, that's a bit of a simplification.

It's what happens from the user perspective, not the compiler's 
(or runtime's).

Here's the full story.
And please read it carefully, since I'm __not__ saying D should 
adopt what C# does word for word!

In C#:
- You can define a custom default constructor for classes, but 
not structs.
- Structs _always_ have a zero-initializing default 
(no-parameter) constructor.
- Therefore, there is no such thing as "copy construction"; it's 
bitwise-copied.
- Ctors for _structs_ MUST initialize every field (or call the 
default ctor)
- Ctors for _classes_ don't have this restriction.
- Since initialization is "Cheap", the runtime _always_ does it, 
for _security_.
- The above^ is IRRELEVANT to the compiler!
   * It enforces initialization where it can.
   * It explicitly tells the runtime to auto-initialize when it 
can't.
     -- You can ONLY take the address of a variable in unsafe{} 
blocks.
     -- This implies you know what you're doing, so it's not a 
problem.


What D would do _ideally_, IMO:

1. Keep the ability to define default (no-args) and postblit 
constructors.

2. _Always_ force the programmer to initialize _all_ variables 
explicitly.
    * No, this is NOT what C++ does.
    * Yes, it is tested & DOES work well in practice. But NOT in 
the C++ mindset.
    * If the programmer _needs_ vars to be uninitialized, he can 
say  = void.
    * If the programmer wants NaNs, he can just say = T.init. 
Bingo.


It should work pretty darn well, if you actually give it a try.

(Don't believe me? Put it behind a compiler switch, and see how 
many people start using it, and how many of them [don't] complain 
about it!)


>> D could take a similar approach.
>
> It could, but default construction is better (!).

Well, that's so convincing, I'm left speechless!


More information about the Digitalmars-d mailing list