David Currie wrote:
At the risk of appearing ignorant, I don't know everything about D.
However in D I have noticed the following.
It is a policy decision in D that a class is ALWAYS on the heap and passed
by REFERENCE. (I know there is a keyword to put a class object on the stack
but this is not facile and needing a workaround is poor language design).
This is effectively FORCED Java.
A D struct is on the stack and is NOT a class and has NO inheritance.
I have issues with this philosophy.
I'm not comfortable with it either. But as you know, there is
scoped!MyClass library solution. One thing I miss is a Scoped!MyClass
struct so I could embed my classes into structs without using heap. Then
a construct() function could be used on it to init members and to call
constructors (emplace() may be used to do that).
ALL struct VARIABLES when declared are initialised to their .init value.
Just in case a programmer "forgets" to initialize them.
This is like using a sledgehammer instead of a scalpel.
Could you answer me WHY??
For safety and for easier generic programming. You can always disable
automatic initialization by using void initializer.
ALL classes when declared are instantiated on the heap
and their constructor called. Again I ask WHY??
This is wrong. Classes when declared are initialized to null (unless
void initializer is used). They're not automatically instantiated. You
must explicitly instantiate them using _new_ operator.