Eigenclass model: Difference between revisions

Content deleted Content added
Hundblue (talk | contribs)
m In RDF Schema: Section anchors added (rdfs/RDFS).
Hundblue (talk | contribs)
History: Power types mentioned, table added.
Line 48:
In Smalltalk, every class has its own metaclass, and metaclass inheritance parallels class inheritance.
 
In 1988, [[Luca Cardelli]] introduced the notion of ''power types''<ref>
However, a full and consistent application of the eigenclass model appeared first (and only) in the
{{cite web | author=Luca Cardelli | url=http://www.daimi.au.dk/~madst/tool/tool2004/papers/structural.pdf | title=Structural Subtyping and the Notion of Power Type}}</ref>
[[Ruby (programming language)|Ruby programming language]].
which can be regarded as type-theoretic counterparts to eigenclasses.
The notion has later been adopted in the field of [[Metamodeling|metamodelling]].<ref>{{cite journal |last=Odell |first=James |title=Power Types |journal=Journal of Object-Oriented Programming |volume=7 |year=1994 |number=2 |page=8-12}}</ref>
<ref>
{{cite web | author=C. Gonzalez-Perez, B. Henderson-Sellers | url=http://www.ie.inf.uc3m.es/grupo/docencia/reglada/ASDM/GonzalezPerez06.pdf | title=A powertype-based metamodelling framework}}</ref>
(Nowadays, the single word ''"powertypes"'' is preferred.)
 
However, aA full and consistent application of the eigenclass model appeared firstin (and1995 only)as ina core part of the
[[Ruby (programming language)|Ruby programming language]].,
created by [[Yukihiro Matsumoto]].
The term ''"eigenclass"''
appearedemerged around 2005 in the Ruby community.
In 2008,
the term has been established in an authoritative book,<ref>{{cite book | publisher=O'Reilly Media | author=David Flanagan, Yukihiro Matsumoto | url=http://oreilly.com/catalog/9780596516178/ | title=The Ruby Programming Language | isbn=978-0-596-51617-8}}</ref> replacing the previously used ''"singleton class"''
(although in Ruby 1.9, the corresponding introspection method is still named <code>singleton_class</code>).
 
By simplification, the development history of the eigenclass model can be viewed as a 3-stage extension of a universality principle, summarized by the following table:
 
<table style="border-collapse:collapse;" border="1" cellpadding="3">
<tr>
<th>Year</th><th>Inventor</th>
<th>The principle</th>
<th>&hellip; in terms of the eigenclass model</th>
</tr>
<tr>
<td style="white-space:nowrap">c. 1980</td>
<td>Jim Althoff<ref>
{{cite web | url=http://mail.python.org/pipermail/python-dev/2001-May/014508.html | title=&#91;Python-Dev&#93; Classes and Metaclasses in Smalltalk }}</ref>
</td>
<td>Every class has its own metaclass.</td>
<td>Every class has an eigenclass.</td>
</tr>
<tr>
<td>c. 1988</td>
<td>Luca Cardelli</td>
<td>Every type has a power type.</td>
<td>Every class and every eigenclass has an eigenclass.</td>
</tr>
<tr>
<td>c. 1995</td>
<td>Yukihiro Matsumoto</td>
<td colspan=2 style="text-align:center">Every object has an eigenclass.</td>
</tr>
</table>
 
== {{anchor|canonical structure}} The canonical structure of &#1013; ==