What are the worst parts of D?

Andrei Alexandrescu via Digitalmars-d digitalmars-d at puremagic.com
Sun Oct 5 20:49:04 PDT 2014


On 10/5/14, 3:08 PM, eles wrote:
> 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.

The main distinction between structs and classes in D is the former are 
monomorphic value types and the later are polymorphic reference types. 
-- Andrei



More information about the Digitalmars-d mailing list