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