What are the worst parts of D?

eles via Digitalmars-d digitalmars-d at puremagic.com
Sun Oct 5 15:08:10 PDT 2014


On Sunday, 5 October 2014 at 14:55:38 UTC, Dicebot wrote:

> Right now I have no idea where the development is headed and 
> what to expect from next few releases. I am not speaking about 
> wiki.dlang.org/Agenda but about bigger picture. Unexpected 
> focus on C++ support, thread about killing auto-decoding, 
> recent ref counting proposal

Just to add more salt:

http://blogs.msdn.com/b/oldnewthing/archive/2010/08/09/10047586.aspx

Raymond Chen: " When you ask somebody what garbage collection is, 
the answer you get is probably going to be something along the 
lines of "Garbage collection is when the operating environment 
automatically reclaims memory that is no longer being used by the 
program. It does this by tracing memory starting from roots to 
identify which objects are accessible."

This description confuses the mechanism with the goal. It's like 
saying the job of a firefighter is "driving a red truck and 
spraying water." That's a description of what a firefighter does, 
but it misses the point of the job (namely, putting out fires 
and, more generally, fire safety).

Garbage collection is simulating a computer with an infinite 
amount of memory. The rest is mechanism. And naturally, the 
mechanism is "reclaiming memory that the program wouldn't notice 
went missing." It's one giant application of the as-if rule."

Interesting, in the comments, the distinction that is made 
between finalizers and destructors, even if they happen to have 
the same syntax, for example in C# and C++.

For example here: 
http://blogs.msdn.com/b/oldnewthing/archive/2010/08/09/10047586.aspx#10047776

I feel difficult to swallow the fact that D classes do not lend 
themselves to RAII. While I could accept the memory management 
could be left outside RAII, running destructors (or disposers) 
deterministically is a must.

I particularily find bad that D recommends using structs to free 
resources because the destructor of those is run automatically. 
Just look at this example:

http://dlang.org/cpptod.html#raii

struct File
{
     Handle h;

     ~this()
     {
         h.release();
     }
}

void test()
{
     if (...)
     {
         auto f = File();
         ...
     } // f.~this() gets run at closing brace, even if
       // scope was exited via a thrown exception
}

Even if C++ structs are almost the same as classes, the logical 
solit between the two is: structs are DATA, classes are BEHAVIOR. 
I will not get my head around the fact that I will *recommend* 
putting methods in a struct.


More information about the Digitalmars-d mailing list