Larry Wall wrote:
One can always mixin a "does LinearInterpolation" at run time in the
body of the sub to get the effect of a directive, so I think the most
useful thing is to treat roles in signatures as constraints where
they can be used to select for MMD.

Further questions concerning MMD:

1) How are the classes of
   a) the container
   b) the value
   used in dispatch? Note that 'Array of Num' in other languages
   is more like a parameter on the template/generic: Array[Int].
   Does it hold for Perl 6 in general that the 'of' is syntactic
   sugar for (container) class specialisation? E.g. could Damian's
   example of Source[Perl] be written as 'Source of Perl'?
   Should the programmer get the chance to define if the type parameter
   is either covariant or contravariant like the extends/super in Java5
   generics?

2) how are the where clauses used in MMD relative to roles and classes?

3) I guess the distance function is not specified yet, right? Is it at
   least symmetric, so that it avoids the surprises that CLOS has in store
   with its linearisations? The multiple inheritance resolution is also
   relying on user intervention and not calculating a class precidence
   list as Dylan does. Symmetic means the following:

   with

   class Base {...}
   class Left is Base {...}
   class Right is Base {...}

   there are at most three binary multis allowed

   multi sub foo ( Base $x, Base $y ) {...}
   multi sub foo ( Left $x, Left $y ) {...}
   multi sub foo ( Right $x, Right $y ) {...}

   otherwise a call like foo( Base.new, Right.new ) would be ambigous.
   In other words a conflict where one multi is more specific here and
   another there is reported and not somehow "resolved".

4) what's the intent of trait_auxiliary:shall?


: I still wonder how the type system really works...

Me too.  If it's any comfort, just think of the design of Perl 6 as
a genetic algorithm running on a set of distributed wetware CPUs.
We'll just keep mutating our ideas till they prove themselves adaptive.

At the very heart a type system is something simple: it defines an order. Or actually two intertwinned ones: the subtype relation and the inheritance relation. The typechecker, the optimizer and the dispatcher use this order to enlighten or annoy the programmer, to decide what code to generate and which method to call respectively.

With junctive values on types it should be easy to define a lattice that
consists of user specified and calculated nodes. This is what I tried
to explain elsewhere---without having clear vision how that fits into the
Perl 6 Genom :)

Last not least the parametric polymorphism should be accompanied by a
constraints system to get CBP (Constraint-Bounded Polymorphism) which
is a superset of F-Bounded Polymorphism. This proposal is polymorphic
as well: some consider it Hell others Heaven---with roles flipped when
it comes to excessive use of (implicit) Any ;)

MfG
--
TSa (Thomas Sandlaß)



Reply via email to