Austin Ziegler
4/21/2005 1:29:00 PM
[Fair warning to those who plan on emailing me regarding this
response. I'll be ignoring you. I am posting this to make sure that
there is a public refutation to Ilias's incorrect statements below.
-a]
On 4/21/05, Ilias Lazaridis <ilias@lazaridis.com> wrote:
> As stated before, the following documentation is false:
Stated incorrectly. The documentation is, in fact, correct. It
doesn't mesh with UML, perhaps, and it doesn't mesh with your
limited capacity for understanding, but that doesn't make it
incorrect.
Metaclass -- singleton class, virtual class, or whatever you wish to
call it -- is something that doesn't mesh well with standard object
notations. You are the first person that I've seen in three and a
half years to suggest that they don't understand this documentation
once they've started playing with the capabilities of Ruby and
understanding the practical means by which the object model is
supported in the language. As others have pointed out -- with lots
of supporting code -- it is not the documentation which is wrong
here.
[...]
> a) The term "meta-classes" is false.
> Correction: "specializing-singleton-objects"
It is not false. It is, perhaps, over used in a variety of terms. It
is "meta" in terms of Ruby objects. Your term may be more useful in
the future, but I have my doubts. As Class is an Object, a MetaClass
is a MetaObject ;)
> b) vertical arrows do not represent inheritance
> e.g.: Object----> (Object)
> Correction: Object-----(Object)
Those are horizontal, not vertical. It is also one of those things
that, as others have pointed out, is not *quite* as *you* understand
it. Metaobjects don't show up in the public inheritance hierarchy,
but that makes them no less real.
> c) the classes in "()" do not belong to the object model
> Correction: remove (showcase sso in seperate topic)
This is incorrect. The metaobjects/metaclasses shown in the diagrams
are essential, if not normally visible, parts of the Ruby Object
Model. I do not believe that this is just an implementation detail,
as it is exposed to the language for use.
> My final questions are basicly:
> * Ruby is OO. Why is the sso not directly accessible?
The metaobjects/metaclasses are not directly accessible because Matz
has chosen not to make them directly accessible. There is an RCR
which recommends the creation of a method to make this easily and
directly accessible because Ruby developers have discovered the
value and utility that these metaobjects have. There is significant
disagreement on the name of what this method should be. However, as
Why the Lucky Stiff has demonstrated, it's a no-brainer for users to
develop this single method themselves -- and he's even written it
for them to copy or use as they please.
> * Who has written the "ri Class" documentation?
Matz wrote the essentials. I don't think that anyone knows the Ruby
object model better than he.
> * Can I expect an apology for this false documentation?
Given that the docuemntation isn't false, no. Of course, even if you
*were* correct and the documentation was false, I suspect that you'd
get an apology only if hell is endothermic. And, as we all know,
it's exothermic. (Either that, or you'll get your apology after all
atomic motion has stopped because.)
-austin
--
Austin Ziegler * halostatue@gmail.com
* Alternate: austin@halostatue.ca