Biggest problems w/ D
Craig Black
craigblack2 at cox.net
Thu Aug 9 20:55:25 PDT 2007
"Tristam MacDonald" <swiftcoder at gmail.com> wrote in message
news:f9gm20$2jd6$1 at digitalmars.com...
>
>
> Kirk McDonald wrote:
>> C. Dunn wrote:
>>
>>> 5) Same syntax structs and classes. This is minor problem, but it is
>>> extremely confusing to the novice. A struct and a class are
>>> completely different in D, but the fact that I can write code the
>>> same to use either one implies too much similarity. It leads to
>>> programming errors which easily result in seg-fault.
>>>
>>> Also, it is too difficult to switch a set of objects from structs to
>>> classes or vice versa. I need to be able to do that in order to
>>> compare runtimes for various implementations. Again, I don't know
>>> the best answer.
>>>
>>
>> Structs and classes are very different beasts in D, even if they look the
>> same. However, there are some important differences in their use which
>> should clue you in:
>>
>> Using 'new' on a class gives you a reference, using it on a struct gives
>> you a pointer.
>>
>> Structs are plain ol' data. Saying "SomeStruct s;" gives you an instance
>> you can immediately behind using. You have to use 'new' to get a class
>> instance.
>>
>> Classes have inheritance and all those other object-oriented features,
>> while structs do not.
>>
>> What I am getting at is that whether something should be a class or a
>> struct seems like an important design decision which shouldn't be
>> expected to change after development is well underway. Also, code doesn't
>> really look all that similar when it uses structs vs. classes.
>>
>
> I don't agree here. I had all my algebraic classes (vectors, matrices,
> transforms, etc.) as structs, as they needed to be value types, and for
> performance. However, I had to convert several of the more complex structs
> to classes instead, when I needed reference semantics.
>
> Since structs use a different constructor syntax, along with 'this' versus
> '*this', it was quite annoying. Since the only difference the original
> spec highlighted was that one in a reference type, and one a value type,
> it seems silly to have large syntactical differences between them. In
> particular, that structs lack meaningful constructors/destructors/copying
> semantics is *really* annoying. Value types are scoped, so why not let us
> use that to our advantage?
Agreed. I think Walter has plans to add constructors/destructors/copying
semantics to structs. It's a welcome change.
-Craig
More information about the Digitalmars-d
mailing list