Observation:  We're doing a *lot* of talking past each other.

Proposed Remedy: We need to better document our discussions so that we 
don't keep having them.

---

I volunteer (*shudder*) to be another grunt secretary and start 
compiling a preliminary document, written as a tutorial for newbies 
(because we are *all* newbies when it comes to perl6 OO) that covers 
perl6 OO philosophies as they evolve -- if everyone is ok with that 
idea, and if nobody else is already doing it.

It should encompass, at minimum:

(1) Definitions of common terms, so that everyone in these discussions 
understands what-we-mean-by-the-word-"blah", -for us-, as opposed to 
"in language X" or "according to the concepts of Y".  We shouldn't have 
to hedge about what words like "private" or "interface" mean, we should 
discuss it, define it, and have it explicitly written down.

(2) An appendix that lists any open and closed issues, "closed" meaning 
we reach a consensus recommendation that Larry/Damian could easily look 
at without wading through the fission reactions that led to them.  So 
that issues can actually be "closed", for starters, and so that when 
Larry/Damian gets to the related Apos & Exes, they have at least 
something better to start from.

(3) A small gallery of proposed cookbook problems & solutions, 
demonstrating suggested syntax as it's agreed upon.  This will allow 
everyone to verify that common problems can indeed be solved, in at 
least one canonical way, using the concepts proposed.  As the OO 
Apocalypse(s) are finalized, the solutions get changed to match.

In creating that "tutorial", we can have something that an outsider can 
read and get up to speed quickly, and hopefully we will have something 
that we can easily tweak into being "real" documentation after the 
appropriate Apocalypses are completed.

OK, having said that, and providing nobody wants to shoot this idea 
down:

---

A refresher glance through the RFCs indicates that, at least at that 
time, there was precious little agreement on OO details, other than it 
should remain basically perl, but Better, for some widely divergent 
definitions of Better.  Since then, we've gotten a much clearer idea of 
what Larry was aiming for, and I think we can agree that the RFCs do 
not adequately document the evolving thoughts on perl6 OO.

Derived from the RFCs and subsequent discussions, here is a proposed OO 
Bill of Rights: fundamental truths that I *think* are already agreed 
upon, and from which all other OO laws must be derived:

(OO Article 1) It should be possible, in general, to do anything you 
did in perl5 in perl6.  It may no longer be the best way, or the 
preferred way, but it should be possible.  This includes runtime 
manipulation of both inheritance and method dispatching, for example.

(OO Article 2) perl6 should not be geared towards any one OO 
methodology.  perl6 should be a powerful sandbox by which individuals 
-- both amateur and professional -- could create and distribute new 
object methodologies;  OO zealotry shall be delegated to the modules 
produced by those later individuals.  "Out-of-box" perl6 OO should be 
geared towards providing all the necessary hooks by which zealots may 
easily manufacture their wares.

(OO Article 3) There should no longer be any hint of the implementation 
of perl objects as hashes.  $obj->{ myAttr } is dead.  Objects _might_ 
internally be implemented as hashes, or as anything else, but no part 
of the syntax should imply hash structure.  perl6 objects will be first 
class ... well... objects.

(OO Article 4) perl6 objects must be able to be used *universally* as 
fully-fledged built-in types: scalars, arrays, hashes, etc.  Operator 
overloading and tie() will never again longer conflict, because if the 
OO stuff is truly correct, tie() as we know it won't need to exist.  
Operator overloading, including those pseudo-operators required for 
"tied" access, will be folded into OO methodology.

(OO Article 5) perl6 OO -- at least, some definable subset of it -- 
needs to be runtime-friendly.  Runtime overhead must be kept tolerable. 
  It certainly can't be, for example, an order of magnitude slower than 
similar non-OO code.  It should be possible to program web 
applications, high traffic data-warehousing code, etc. in OO without 
paying speed penalties so outrageous as to disqualify OO from being 
used.

(OO Articles 6) Also considered drop-deads: interfaces, assertions (of 
various sorts), multiple inheritance, complex delegation.  Don't have 
to use them, but they should be there if you want them.

Can we at least agree on these?  Are there other basic tenets that 
should be included?
If we can reach some consensus, the next step is to start presenting 
the ~10 (by my rough count) "fundamental" open issues that are screwing 
everything else up.

MikeL

Reply via email to