Weed wrote:
bearophile пишет:
 > Weed:
 >> Planned in the future to implement inheritance of structs or the
static creation of classes?
 >
 > Inheritance of structs: I think it's not planned. Structs in D are
meant to be used for different things than classes.
 > Yet, as time passes structs are gaining more power: you can't believe
 >
that very recently they have gained constructors/destructors too in D2.
Probably in a system language conceptual purity isn't much appreciated :-)
 >

I believe that the opportunity to place an object in memory, stack or
heap is more important than the struggle against "splicing".

I think not worth taking structs and classes from C#. May be bytecode
interpreter C# does not show the difference in speed between the
allocation of memory by a small object + its using and the use of a
static object, so developers C# decided to do so as done. (but I am not
a specialist in the design of compilers :))

 > Static creation of classes (I think you mean creation of objects): it
 > sounds like an interesting thing, I know of a system language that
 > allows the creation of objects only at compile-time, and at
 > compile-time it also performs several space optimizations among such
 > objects (and such space optimizations often improve running speed a
 > little).

And in fact we come to making structs and classes similar except that
classes can not be assigned by value.

Such an option I like.

If I understand you correctly - I think you confuse here two separate and orthogonal issues.
1) struct vs. class
2) memory allocation

What D tries to do is to provide types with value semantics via structs and types with reference semantics _and_polymorphism_ via classes. IMO C++ is a prime example how to not design a language and the slicing problem is a good example of that. value types should not have polymorphism whatsoever as is done in D.

memory allocation is orthogonal to this:
class C {...}
Struct S {...}

auto c1 = new C; // classes default to heap alloc
scope c2 = new C; // c2 is on stack
S s1; // structs default to stack
auto s2 = new S; // s2 is S* (heap alloc)

I think Andrei said he wants to make changes to "scope", that is IIRC.

struct inheritance, if it gets implemented in D, should express IMO semantics similar to concepts as in C++0x, not provide polymorphism for value types which is clearly a mistake. (also this will remove the need for typedefs, isn't it?)

Reply via email to