FW: Vocabulary

2003-12-12 Thread Austin Hastings

 -Original Message-
 From: Luke Palmer [mailto:[EMAIL PROTECTED]
 Sent: Friday, December 12, 2003 6:23 AM
 
 So I'm seeing a lot of inconsistent OO-vocabulary around here, and it
 makes things pretty hard to understand.
 
 So here's how Perl 6 is using said inconsistent terms, AFAIK:
 
 - attribute
   A concrete data member of a class.  Used with Chas.
 
 - property
   An out-of-band sticky note to be placed on a single object.
 Used with Cbut.
 
 - trait
   A compile time sticky note to be placed on a wide variety 
 of things. Used with Cis.

Did I miss something with IS and OF?

That is, I think:

  Cis means storage type, while Cof means trait or class:

  my @a is Herd of Cat;

declares a Herd (presumably a base class of some collection type) with the trait that, 
in this case, members will be of Class Cat.

Did this change when I wasn't looking?

 - role
   A collection of methods to be incorporated into a class sans
 inheritance (and maybe some other stuff, too).  Used with Cdoes.

No comment, since this is still hovering (see Larry's reply).

 
 So for example:
 
 class Dog
 does Boolean# role
 is extended # trait
 is Mammal   # [1]

The only difference I can see here between Cdoes Boolean and Cis extended would be 
the declaration of Boolean or extended (unless Cis can only be used with built-in 
traits, which seems unnecessarily restrictive...)

 {
 has $.tail; # attribute
 has @.legs; # attribute
 }
 
 my $fido = Dog.new
 but false;  # property
 
 Hope that clears things up.
 
 Luke
 
 [1] This is a base class, which is an overloaded use of Cis.  Though,
 upon A12 release, we'll probably find out that it's not overloaded but
 instead, elegantly unified, somehow. 

Thanks for bringing this out.

=Austin



Re: FW: Vocabulary

2003-12-12 Thread Larry Wall
On Fri, Dec 12, 2003 at 04:31:32PM -0500, Austin Hastings wrote:
:  - trait
:A compile time sticky note to be placed on a wide variety 
:  of things. Used with Cis.
: 
: Did I miss something with IS and OF?
: 
: That is, I think:
: 
:   Cis means storage type, while Cof means trait or class:
: 
:   my @a is Herd of Cat;
: 
: declares a Herd (presumably a base class of some collection type) with the trait 
that, in this case, members will be of Class Cat.
: 
: Did this change when I wasn't looking?

No, it hasn't changed.  Generally Cis specifies the storage class when
you're applying it to a variable.  We've just been using it a little
weirdly on things that aren't variables, such as class declarations.

:  - role
:A collection of methods to be incorporated into a class sans
:  inheritance (and maybe some other stuff, too).  Used with Cdoes.
: 
: No comment, since this is still hovering (see Larry's reply).

Flutter, flutter.

:  So for example:
:  
:  class Dog
:  does Boolean# role
:  is extended # trait
:  is Mammal   # [1]
: 
: The only difference I can see here between Cdoes Boolean and Cis extended would 
be the declaration of Boolean or extended (unless Cis can only be used with built-in 
traits, which seems unnecessarily restrictive...)

Traits are seeming a lot more like roles than like superclasses
these days.  But they may still be different beasties.  A role will
have some rules about how it's composed into a class, while a trait
can presumably do anything it jolly well pleases.  They may unify at
some point, but maybe only at a temperature of billions of degrees.

Larry