Static struct initialization syntax behavior & it being disabled upon adding a constructor

Ali Çehreli acehreli at yahoo.com
Mon Apr 18 16:17:30 UTC 2022


On 4/17/22 17:35, Ali Çehreli wrote:

 > compared to C++, the amount of constructor, destructor, copy
 > constructor, etc. that I do *not* write in D is very liberating to me.
 > It feels like I just write what is needed and it mostly just works.

The following is a quick and dirty grep-based stats from a largish 
successful project that implements multiple libraries and binaries. The 
figures are numbers of times each construct appears in source code:

                struct: 231
             interface:   3
                 class:  12
                 union:   0

       this(/* ... */):  72 [1]
  shared static this():   8
         static this():   1 [2]

shared static ~this():   0
        static ~this():   0
               ~this():   8

            this(this):   0 [3]

[1] Most operations in most constructors are trivial assignments to members.

[2] It contains just an enforce expression to ensure the environment is 
as expected. (It is an oversight that this is not a 'shared static this' 
as well.)

[3] There are no copy constructors either because the project started 
with an older compiler.

It is remarkable that I did not implement a single copy or move behavior 
ever. Compare that to countless C++ articles on attempting to teach how 
to deal with fundamental operations of object. Forgotten to be called or 
not, there are no 'move' (which does not move in C++) or 'forward' 
(which does not forward in C++) expressions at all.

What a price the programming community keeps on paying just because 
their powerful programming language was there first...

Ali



More information about the Digitalmars-d-learn mailing list