=pod

=head1 NAME

Synopsis 12.5 - The Perl 6 Object MetaModel

=head1 SYNOPSIS

This is an unofficial amendment to the Synopsis 12, which describes the design
and implementation of the Perl 6 objects metamodel. It is very rough at the
moment, but will be filled in more as the work on this metamodel progresses.

=head1 DESCRIPTION

=head2 Core Elements

=over 4

=item Class

A Class in Perl 6 is much the same as classes in other OO languagues. It is a
collection of methods and attributes which can be used to construct an Instance
from.

=item Instance

An Instance is an instance of a Class. It is very much the same as in other OO
languages. 

=item Role

A Role at its most basic can be thought of as a collection of methods and
attributes which get included into a class. A very simplistic view of this is
that it is not unlike a language level #INCLUDE directive. Roles share
similarities to other familiar OO concepts as mixins and interfaces, but they
differ in how they are composed into the class as well as the rules which
govern that composition. Roles will be discussed in further detail later in
this document.  

=back

=head2 Secondary Elements

=over 4

=item Methods

=over 4

=item Class Methods

=item Instance Methods

=item Role Methods

=item SubMethods

=back

=item Attributes

=over 4

=item Class Attribute

=item Instance Attribute

=item Role Attribute

=back

=back

=head1 SEE ALSO

=head2 Research Papers

=over 4

=item A Core Calculus for MetaClasses

L<http://research.sun.com/projects/plrg/core-calculus.pdf>

=item Any of these papers on Traits

L<http://www.iam.unibe.ch/~scg/Research/Traits/>

(Note: Traits are what inspired the Perl 6 concepts of Roles)

=back 

=head2 Other Perl Modules

=over 4

=item L<Class::Role>, L<Class::Roles> & L<Class::Trait>

The first two are early attempts to prototype role behavior, and the last is an
implementation of the Trait system based on the paper which originally inspired
Roles.

=back

=head2 Other Languages

=over 4

=item Smalltalk

I prefer the Brown book by Adele Goldberg and David Robinson, but any book that
talks about the Smalltalk metaclasses is a good reference.

=item CLOS

The Common Lisp Object System has a very nice metamodel, and there's plenty of
reference on it. In particular there is a small implementation of CLOS called
TinyCLOS which is very readable (if you know enough Scheme, that is :).

=item Objective C

There is a good amount of documentation about the Objective C Runtime which
explains the class and object structures. Here are some relevant links:

=over 4

=item L<http://developer.apple.com/documentation/Cocoa/Reference/ObjCRuntimeRef/index.html>

=item ... add more links

=back

=back

=head1 AUTHORS

Stevan Little E<lt>stevan@iinteractive.comE<gt>

=cut
