Templates convariance
Bruno Medeiros
brunodomedeirosATgmail at SPAM.com
Sun Jul 2 12:27:50 PDT 2006
michal.minich at gmail.com wrote:
> Maybe this is the way how to solve this
> http://lambda-the-ultimate.org/node/1573
>
> ...and a publication linked from this blog entry
> http://research.microsoft.com/research/pubs/view.aspx?type=inproceedings&id=1215
>
>
Interesting article (I read chapters 1&2&5) (chapter 3 scared me away :P ).
Well, that's one way to solve it, but there are other ways surely, and
we don't know which one is better. (for starters: D's template mechanism
is very different than C# and Java.)
This is a very complex and advanced issue, but not as critical as many
other D issues which are likely to get more attention first (and
justifiedly so).
That said, I want to check out the Java generics semantics, I still
haven't look much into Java 1.5 .
>
> In article <e7b3q2$22m5$1 at digitaldaemon.com>, Bruno Medeiros says...
>> Sean Fritz wrote:
>>> In article <e799ce$2idm$1 at digitaldaemon.com>, michal.minich at gmail.com says...
>>>
>>> A list!(Shape) is not the same a a list!(Square). It sounds like you want some
>>> sort of wildcard matching or something to enforce type bounding like Java/C#
>>> have, but casts are definitely unsafe.
>>>
>>> Example code (I'm going to blotch various syntax, sorry in advance):
>>>
>>> void foo(List!(Shape) ls) {
>>> ls.add(new Circle) //passes type check locally?
>>> }
>>>
>>> ...
>>> List!(Square) ls = new List!(Square);
>>> foo(ls);
>>> //but ls now contains a Circle? Circles don't go in List!(Square)?
>>> ,,.
>>>
>>>
>> Indeed. I was about to mention that too, because this is a more general
>> problem concerning parameterized collections (Lists, arrays, etc.) in
>> that a parameterized collection type is only covariant with another
>> parameterized collection type if the parameter is invariant. (because
>> the parameter is both an input and an ouput)
>> So for example an array of Numbers can not be (safely) typed as an array
>> of Integers, nor it cannot be typed as an array of Objects.
>> Still, an array of Numbers can be seen as a readonly array of Objects,
>> and as a writeonly array of Integers.
>>
>> --
>> Bruno Medeiros - CS/E student
>> http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#D
>
>
Oops, a mistake above, this problem concerns any parameterized
(templated) type, not just parameterized collections.
--
Bruno Medeiros - CS/E student
http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#D
More information about the Digitalmars-d
mailing list