How to do Generic Programming in D?

Nick nick at example.com
Wed Feb 23 09:22:06 PST 2011


On 2/23/2011 12:35 AM, Andrei Alexandrescu wrote:
> On 2/22/11 1:04 PM, Nick wrote:
>> Coming from Andrei's work in C++ "Modern C++ Programming" I wonder how
>> to implement many of those patterns in D?
>>
>> In C++ I would work with type lists and use lots of multiple inheritance
>> and templates to get the magic I need.
>>
>> D lacks MI, classes and delegates seem heavy (allocated on heap, with
>> one extra pointer and new for each delegate) and has instead template
>> mixins which do not create types and string mixing which create...
>> anything.
>>
>> So I am a bit lost.
>>
>> I guess I am looking for some code&examples to read to "get" GP in D. A
>> bit like "Modern C++ Programming".
>>
>> Of course, the basic question being: is D2 sufficient to support
>> everything that is possible in C++?
>>
>> Thanks!
>
> Welcome to the group.
>
> Using D for the kind of generic designs featured in MC++D may be a bit
> disconcerting because a lot of the C++ implementation is forced to use
> unintuitive mechanisms to get things done. The expectation is that the
> same mechanisms need to be used for the D implementation, too, which
> shouldn't be the case. In fact accomplishing any of MC++D's tasks is
> considerably easier in D.
>
> For example, indeed in C++ a policy-based design would need to use
> multiple inheritance. But this is not motivated by a need for multiple
> subtyping - MI is just the best proxy C++ has for injecting
> parameterized implementation. In D for that goal you'd use mixin
> templates, or for ultimate flexibility string mixins. If you do need
> multiple subtyping, you'd use classes in conjunction with e.g.
> parameterized interfaces and/or "alias this".
>
> Typelists are an elaborate C++ construct that is essentially built in
> into D.
>
> For the Command pattern, delegates would be a great start. Added value
> for e.g. currying and binding is trivial to implement, to the extent
> that we decided to deprecate a dedicated module (std.bind).
>
> There would be more to say. One way or another, policy-based design is
> difficult and often unintuitive. Therefore, it requires mastery of both
> the design topic at hand and of the implementation language. I think
> trying to get a solid PBD component off the ground as a D beginner would
> be pushing it. Nevertheless, it may be worth a try. I suggest starting
> with a simple, well-defined component such as Object Factory.
>
>
> Andrei

Thanks for all your replies!

I was not sure about mixins: the template ones had a little warning in 
the book as being mostly experimental, and the string mixins, while 
powerful, seemed to me something closer to c++ macros than to the 
template/class/policies I knew. But I will look again.

I will start slowly and defer to this list if I get stuck.

Thanks!


More information about the Digitalmars-d mailing list