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