943:. You guys could expand on that and similar articles throughout the web. The more or less definitive book on Ruby is "The Ruby Programming Language" (written by Matz the creator of Ruby among others). Like Bini, the authors prefer the term "eigenclass" and use it throughout the text. In either case, the article right now isn't very well written. There is a lot of ambiguity, especially on the definition, which states that "a metaclass is a class whose instances are classes." That is exactly how Ruby's classes work, as Kusunose pointed out earlier. Piet counters that it isn't sufficient because it can't be subclassed or extended. If this is true, this belongs in the article, along with a proper citation. I will add a "Citation needed" tag and let those are more interested in language lawyer-ing figure it out. --
2475:
2467:
248:
74:
53:
171:
150:
22:
666:
Java language. A class object is a representation of that syntactic form (and implies much about the meaning of that form). This sublty in wording of the JLS is required for languages that have reflection (i.e., where the semantics of the language is wholy or partially represected in the language itself). This issue has no bearing on the fact that java.lang.Class meets the definition of a metaclass.
1883:
wonder WTF are these "infinite chains" anyway? I know nothing about Ruby but it's hard for me to imagine how any programming language can support infinity as a run time concept. Does anyone know what this means? Is it really supported by that reference and if so can we say it in a way that makes more sense? If no one replies I'm going to just be bold and delete that sentence completely. --
1863:
fairly quickly to low level coding examples that will quickly lose anyone who doesn't know how to program. IMO, we should focus first on describing the concepts more and do so in a way that isn't specific to C++, Java, Smalltalk or any other language and then perhaps give an example. Examples seem to me (mostly) more appropriate for a technical manual not an encyclopedia anyway.
1902:"But I've already told you: classes store methods. They're different. Now I know you're probably a bit confused wondering, "If a class is an object, but objects are built on classes, isn't there a big confusing infinite cycle here that you're not explaining?" No, there's not. I hate to break it to you, but a class isn't really an object. From Ruby's source code:"
1232:) violates both principles. The violation of the second principle is typically "compensated" by terminological dialectics. In most of the Smalltalk literature, metaclasses are sometimes classes (this is what is usually explicitly proclaimed), sometimes not (usually implicitly). In the following statements, metaclasses are implicitly not classes:
1339:
you are considering these convoluted fictitious eigenclasses; if you consider the actual "class-of" relationship in the various languages, they will only lead to a finite number of objects (although it can go into a cycle). I think it is much clearer to talk about (and people who come to this article
2007:
This section asserts that "In languages without metaclasses, these details are defined by the language specification and can't be overridden." This is oversimplified and incomplete. For example, while it has nothing approaching metaclasses, the C# language allows the layout of types to be customized
938:
Someone should mention Ruby in the article. Regardless of whether Ruby has metaclasses, there is a very common perception that it does (google it) and it's worth addressing that in the article. Ruby's object model *is* in fact very similar to
Smalltalk's so it's no surprise that someone would have
784:
There seems to be one major difference between Java's java.lang.Class and the metaclasses in
Smalltalk, Objective-C, etc.: Class methods in those languages are simply instance methods of the class object. You can select the class object dynamically, and call a method on it like a method on any other
1862:
This is more a general comment after looking at several wiki articles on OO, not that specific to this article per se although it applies here as well. I notice many of the OO articles do this, they talk in very language specific terms rather than first describing the general concepts and they jump
665:
Second, the definition of metaclass is part of a theory of reflection (a subset of the theory of programming languages) that is independent of specification of any particular programming language. The reason the JLS uses the word "represents" is that a Java class is a syntactic form written in the
634:
Just because a class doesn't have a public constructor doesn't mean you cannot instantiate it. Many perfectly good classes don't have public constructors, like java.util.regex.Pattern or java.nio.ByteBuffer. However, you can still instantiate them through factory methods. The same thing is true of
1882:
The "In Ruby" section currently states " Consequently, eigenclasses form infinite chains. " I notice someone edited out a second sentence about how this leads to an infinite regress. I'm not even sure what "infinite regress" was supposed to mean there but it seems reasonable to take it out but I
662:
First, as Piet observed, one cannot instantiate java.lang.Class. This implies a huge weakness in the Java
Metaobject Protocol. Programmers compensate for this weakness with many complex tricks played in specialized class loaders. If the Java MOP were sufficiently capable, such tricks would be
1169:
link. This referred page is supposed to be dedicated to the subject. It at least lists the names of inheritance roots for all the mentioned programming languages: Smalltalk, Ruby, Python, Java, Scala, CLOS (as a dialect of Lisp), and Perl 5. Exact definition of the term is then given in
785:
object, and it will call the class method. Whereas, a Class object in Java only has the instance methods of the Class class; given a Class object you cannot simply call a method on it to access a static method of the class; you have to use reflection to do something similar. --
635:
java.util.Class. You can instantiate it through Class.forName(), for example. Yes, that requires having an existing class file for it to load (which is a detail of the Java loading mechanism), but that still fits the description of being able to instantiate it. --
2458:
269:
1064:
It says "Metaclasses are either explicit or implicit according to whether they are classes or not, respectively." and that "implicit metaclasses are supported by Ruby, Smalltalk-80 and
Objective-C". However, I can assure you that metaclasses
1045:
It says "The metaclass root is the class of the inheritance root", but doesn't define term "inheritance root". It seems to imply that "inheritance root" is always a class object? How do you determine whether something is the "inheritance
538:
The above answer is not correct. The definition is "a metaclass is a class whose instances are classes." In Java, all classes including java.lang.Class are instances of java.lang.Class. A good reference on this subject is
Appendix A of
1099:
It says "The metaclass root is simultaneously the instance root". What the hell is an "instance root"? "Root" implies some kind of hierarchy. For classes, there is the inheritance hierarchy. But what is the "hierarchy" for instances?
1334:
I don't understand the utility of this fictitious .class map that you describe. Why does it have to return something "named"? You talk about the supposed problem of eigenclass chains being infinite. But that is a problem
659:
Gentleman, the definition of a metaclass is: "a metaclass is a class whose instances are classes." java.lang.Class meets this definition; consequently, it is a metaclass. Now there are two issues in your comments to
1145:) is the "metaclass root"? However, Java is not generally considered to have metaclasses. I believe that this has to do with the fact that "inheritance root" and "class of" are not well defined, as above.
1036:
960:
Singleton classes in Ruby do inherit from class Class. In addition, a class is always an instance of its singleton class. Why are singleton classes, then, not considered metaclasses as well?
923:
Someone re-added Ruby to the list, with a comment about Ruby's metaclasses being the same as
Smalltalk's. I find that pretty unlikely. If it can't be sourced, I'm going to remove it again. —
2387:
1550:
instead of – like in Ruby – skipping the eigenclass as well as all the ancestors that are eigenclasses and returning the first "real" class which would in this case be constantly the
1211:
independence on the implementation of infinite regress: the map should return an explicit named/nameable class, not an eigenclass, since eigenclass chains are conceptually infinite.
525:. It doesn't define how classes and their instances behave. All classes and instances behave the same in Java: they do what the JVM says. Java doesn't really have metaclassing.
2496:
1722:. So while it is true that (assuming the language has a finite number of objects) the instance-of relationship must end in a cycle, that cycle does not have to have a length of 1.
2405:
2401:
564:
classes; they're not really classes. This view is supported by the docs. For example, the only place I can find java.lang.Class mentioned in the Java
Language Specification
579:
a Class object that is shared by all arrays with the same element type and number of dimensions." (Emphasis added again.) And there are Class objects, especially Void.TYPE
1053:
be "meant by class of" for those languages. It says "Unfortunately, the introspection methods class (in
Smalltalk) and class-of (in CLOS) are misleading here." But e.g. the
692:"Gentleman, the definition of a metaclass is: 'a metaclass is a class whose instances are classes.' java.lang.Class meets this definition; consequently, it is a metaclass."
1661:. Both relations are hierarchical, in the latter case except for classes that are their own instances. But if the instance relationship is considered in the strict sense
543:
by Ira R. Forman and Nate Forman, Manning, 2005. The issue alluded to above is that Java
Reflection API does not allow one to dynamically create classes or modify them.--
293:
1214:
The CLOS object model violates the monotonicity principle for some built-in classes (but it disallows user-created monotonicity breaks). As a consequence, the (CLOS's)
2516:
2492:
221:
2327:
It would be useful to provide some history of the term/concept 'metaclass'. Who proposed the concept? Which language first implemented it? Who proposed the word?
1365:
map provides a formally clean concept to which the programming languages can be compared. Deviations from the concept can be seen as implementation/design "quirks".
990:
1158:
1115:
965:
831:
433:
1851:
872:" reference does not actually describe metaclasses, but a different Ruby concept known as "singleton classes". Any objections if i go ahead and remove it? --
1642:
class – using the semantics of the eigenclass model. And, indeed, it is true that the eigenclass of the inheritance root is the only direct descendant of the
1022:
Is there any reason for the assigning the __slots__ in the python code example? I know about the efficiency gain but that's not the point of this example. --
350:
288:
961:
2507:
The page specifies that C++ metaclasses are planned for C++ 23, but I find no evidence that this is planned for release in this version. In particular,
132:
2554:
1049:
It says that "in the case of the latter two languages care must be taken as to what is meant by class of in (1)". But it does not elaborate on what
211:
1499:
class in
Smalltalk-80 which is presumably not considered to be a metaclass in the Smalltalk literature. But even in this case, one can say that all
1623:
This has been already explained in the previous point. Based on the eigenclass model introduced by Ruby, implicit metaclasses in Smalltalk-80 are
1754:
map, then there is always a fixpoint. This fixpoint is unique for Ruby, Python, Scala/Java, Smalltalk-80, and CLOS – it equals the metaclass root
2166:
2017:
1985:
1843:
1775:
1609:
2559:
2549:
2338:
2010:
852:
2453:
1340:
would actually want to know about) the actual class-of relationship for each language, no matter if it leads to a named or unnamed class. --
855:
2363:
1877:
1857:
1742:
1258:
In contrast, the Ruby programming language does not violate the above principles. The terminological dilemma is solved by distinguishing
187:
1919:
1892:
1872:
1349:
2539:
1631:. The same holds for Objective-C, but just in abstract sense, since Objective-C does not have a single non-degenerated metaclass root.
644:
395:
122:
886:
2463:
Compare these two: In the former, the "instanceof" labels are floating, labeling nothing. In the latter we have instanceof arrows.
2238:
1783:
2383:
When you have finished reviewing my changes, you may follow the instructions on the template below to fix any issues with the URLs.
617:
2511:
makes no mention of metaclasses. Could someone confirm if this is indeed planned and undocumented, or just an error in this page ?
1823:
which is a standard reference for the classic definition of a metaclass. The following are citations from the mentioned Java book:
1617:
1010:
913:
2534:
1993:
794:
769:
2207:
369:
234:
178:
155:
743:
677:
586:
571:
the class of the object." (Emphasis added.) Similarly, the javadoc for java.lang.Class says: "Instances of the class Class
547:
672:) has two papers on JEM, my proposal to extend Java give java.lang.Class that capabilities that we all would like it to have.
458:
825:
2512:
2488:
1061:
reports the class of an object, and if your definition does not match, then it's your definition that needs to be modified.
952:
98:
1734:
1341:
1150:
1107:
1023:
986:
786:
761:
636:
341:
1689:
My comment to the suggested term "hierarchy for instances": In an object model that supports metaclasses, the bare word
1789:
The definition also applies to Java/Scala provided that each class is identified with its "class object", so that e.g.
1031:
725:"The reason the JLS uses the word 'represents' is that a Java class is a syntactic form written in the Java language."
2174:
905:
That doesn't provide metaclass functionality: you can't subclass or otherwise extend it. (See the discussion about
560:
Calling a java.lang.Class object a class strikes me as a little weird, though. My view is that Class objects merely
322:
2355:
2030:
1495:
map, then the definition is "widely acceptable" (w.r.t. established conventions) except for the single case of the
1278:
introspection method. The differences between Ruby and Smalltalk in this respect are shown in the following table:
186:
related articles on Knowledge. If you would like to participate, please visit the project page, where you can join
1905:
2544:
2459:
Smalltalk-80 metaclasses diagram thumbnail omits instanceof arrows but keeps instanceof labels floating in space.
414:
81:
58:
2404:
to delete these "External links modified" talk page sections if they want to de-clutter talk pages, but see the
1770:
512:
2470:
The Smalltalk-80 metaclass hierarchy as a UML diagram, as typically shown here, missing the instanceof arrows
2373:
1072:
It says "By standard, the metaclass root is named Class." However, in Smalltalk-80, the "inheritance root" is
2043:
class method that creates classes. You can verify that classes created via this method are not instances of
2448:
2333:
2025:
1017:
379:
260:
33:
605:
into a class (as required by your definition sentence), let alone extend it (even if it were declared non-
529:
1970:
869:
389:
303:
2520:
2478:
The Smalltalk-80 metaclass hierarchy as a UML diagram, enlarged now shows the missing instanceof arrows
2423:
If you have discovered URLs which were erroneously considered dead by the bot, you can report them with
2364:
https://web.archive.org/web/20080903123731/http://www.ibm.com/developerworks/linux/library/l-pymeta.html
994:
707:
2354:. If you have any questions, or need the bot to ignore the links, or the page altogether, please visit
1069:
classes in Smalltalk-80 and Objective-C. (Maybe you have a different definition for what "is a class"?)
939:
added that to the article. Here's something I found by one of the more influential Ruby programmers--
424:
1653:
The core structure of an object model that support metaclasses has two fundamental relationships: the
969:
876:
663:
unnecessary. However, this does not change the fact that by definition java.lang.Class is a metaclass.
1915:
1888:
1868:
1001:
Metaprogramming, for one thing. (This is not the only way metaprogramming can be done, though.) --
811:
451:
2287:"Language Features for Re-Use and Extensibility in Concurrent Object-Oriented Programming Languages"
1328:
The "alternative definition" just follows the Ruby's approach since it allows cleaner description.
1121:
How does this definition include/exclude languages like Java? Could the user simply claim that the
580:
565:
2286:
899:
842:
Squeak goes irresponsive and takes 100% CPU usage. Could someone please explain why this happens?
97:
on Knowledge. If you would like to participate, please visit the project page, where you can join
2439:
2271:
2008:
using metadata supplied via the Struct Layout Attribute the usage of which is described on MSDN:
1738:
1345:
1154:
1111:
1027:
851:
actual interaction between the VM and OS causing the error is beyond the scope of this ::article.
790:
765:
640:
491:
21:
2408:
before doing mass systematic removals. This message is updated dynamically through the template
2367:
2224:
932:
2424:
2351:
2002:
1932:
Injectivity: Different objects have different eigenclasses. (This property is reflected by the
1577:– instead of following all the (possibly fictitious) ancestors of the fictitious eigenclass of
94:
2253:
1165:
The term "inheritance root" is not defined – instead the page refers to another page, via the
2411:
1389:
between the inheritance root and the metaclass root. The correspondence applies as follows:
360:
39:
2193:
1669:
map, taken as a relation) then this relation forms a tree whose root is the fixpoint of the
2484:
2431:
2329:
1911:
1884:
1864:
1103:
1076:, and thus the "metaclass root", which is defined as the class of the inheritance root, is
982:
940:
760:"... the instances of java.lang.Class aren't classes." Sounds like a circular statement. --
500:
710:. Where your argument falls down is that the instances of java.lang.Class aren't classes.
575:
classes and interfaces in a running Java application. Every array also belongs to a class
8:
1926:
Eigenclass chains must be infinite as a consequence of the following three assumptions:
2502:
2390:, "External links modified" talk page sections are no longer generated or monitored by
2170:
2021:
1989:
1847:
1779:
1613:
1592:(as known from Ruby), just prefers uniformity over particular conventions (such as the
508:
2430:
If you found an error with any archives or the URLs themselves, you can fix them with
848:'cause the Metaclass has no class. Try comp.lang.smalltalk to get a fuller answer. The
270:
Requested articles/Applied arts and sciences/Computer science, computing, and Internet
1706:. For example, in Smalltalk-80, the instance-of relationship ends in a cycle of 2 --
1006:
948:
910:
883:
873:
818:
614:
279:
2272:"Metalevel solution to inheritance anomaly in concurrent object-oriented languages"
1589:
1228:
The Smalltalk-80 object model (taking together with the introspection method named
1171:
928:
802:
331:
183:
893:
669:
2322:
1969:
has already been used in such circumstances. See e.g. the paper (page 3) about
1956:
1816:
1274:
es without eigenclasses. This is in particular reflected in the semantics of the
674:
544:
1906:
http://ruby-metaprogramming.rubylearning.com/html/seeingMetaclassesClearly.html
974:
739:
Nonsense. JLS consistently calls the syntactic form a "class declaration". --
405:
2396:. No special action is required regarding these talk page notices, other than
2528:
2300:
2058:
object that responds to the method is not a metaclass (it is even a string):
896:
863:
808:
522:
504:
1953:... how any programming language can support infinity as a run time concept
2474:
2466:
2374:
https://web.archive.org/web/20030430162409/http://www.onlamp.com/lpt/a/3388
1797:) is regarded as just an inconvenient reference to the class that is named
1222:
which is not the highest metaclass since it is not an ancestor of e.g. the
1002:
944:
1608:
introspection methods of Smalltalk-80 / CLOS are considered "misleading".
2397:
924:
822:
740:
583:
526:
247:
1801:. Such an identification is suggested by the introspection method named
2508:
1538:
is a descendant of the inheritance root but NOT a strict descendant of
807:
The See Also list is larger than the article. Can't it be trimmed? --
2347:
979:
What's the point of having this? What is it used for in real life?
312:
90:
2377:
1733:) is the "metaclass root", as you say an instance root would be. --
1166:
86:
73:
52:
1596:
method in Smalltalk-80). But perhaps it should be specific about
1177:
The main characteristics of the (possibly fictitious) canonical
170:
149:
1974:
1959:. This is exactly what is applied to Ruby's eigenclass chains.
1910:
So I'm removing that extra sentence about "infinite chains". --
2269:
2179:
892:
Ruby has the Class class and every classes are instances of it
388:
Find pictures for the biographies of computer scientists (see
2368:
http://www.ibm.com/developerworks/linux/library/l-pymeta.html
1764:
method of Smalltalk-80 does not correspond to the canonical
567:
is here: "The method getClass returns the Class object that
1485:
Given this, metaclasses are the inheritance descendants of
2358:
for additional information. I made the following changes:
1929:
Uniformity (universality): Every object has an eigenclass.
1509:
are metaclasses. (Note that this would not be possible if
1266:
es, the latter being (possibly indirect) instances of the
1235:
Metaclasses are in one-to-one correspondence with classes.
2251:
1037:"Alternative definition" confusing, incomplete, or wrong
613:
extend). It is a tool for reflection, nothing more. --
1774:. This map has indeed a 2-element cycle you described.
2217:
2039:
class in Ruby is not a metaclass, despite having the
1760:(see the table in point 2). As mentioned above, the
182:, a collaborative effort to improve the coverage of
85:, a collaborative effort to improve the coverage of
2400:using the archive tool instructions below. Editors
1809:if a distinction was considered worth emphasizing.
1768:map. Instead, it corresponds to what can be called
1646:class. (This eigenclass is obtained by evaluating
1634:As indicated by the above table, the class of the
1581:which would finally again result in "hitting" the
1238:Metaclass inheritance parallels class inheritance.
1041:The "Alternative definition" is highly confusing.
294:Computer science articles needing expert attention
1588:The "alternative definition", being based on the
609:; there simply isn't any metaclass functionality
582:, which I would argue clearly aren't classes. --
2526:
2225:"The actualclass map pseudotree in Smalltalk-80"
1174:on which the "alternative definition" is based.
832:Squeak freezes on double Metaclass instantiation
601:No, Jorend is correct. You cannot instantiate
670:http://home.austin.rr.com/forman/ira/index.html
2386:This message was posted before February 2018.
2050:The following code shows another example of a
1811:This or similar approach is taken in the book
1693:should be avoided because it is synonymous to
1522:As already mentioned before, the Smalltalk-80
1491:. If you only consider the table, without the
434:WikiProject Computer science/Unreferenced BLPs
1697:– every object is an instance of some class.
2284:
2208:"The Common Lisp Object System: An Overview"
1725:Plus, neither member of this cycle (neither
1687:which is simultaneously the metaclass root.
1391:
1279:
351:Computer science articles without infoboxes
289:Computer science articles needing attention
19:
1133:) is the "inheritance root", and thus the
255:Here are some tasks awaiting attention:
2346:I have just modified 2 external links on
2054:method that returns a new class, yet the
1963:... how this leads to an infinite regress
2555:Mid-importance Computer science articles
2473:
2465:
1805:. This method would presumably be named
1357:The utility of the (mostly) fictitious
2527:
2339:External links modified (January 2018)
839:Transcript show: (Metaclass new new).
196:Knowledge:WikiProject Computer science
2560:WikiProject Computer science articles
2550:Start-Class Computer science articles
1679:As a consequence, in addition to the
199:Template:WikiProject Computer science
2270:Satoshi Matsuoka, Akinori Yonezava.
1955:– Infinity can be supported through
1858:Examples: Do we really need so many?
1827:In Java (…) all classes are objects.
1815:. This book has a common co-author (
906:
176:This article is within the scope of
79:This article is within the scope of
15:
2239:"Java Reflection in Action, Part 2"
1943:Acyclicity: There are no cycles in
1526:method deviates from the canonical
521:Not really; that's more related to
38:It is of interest to the following
13:
1558:is an implicit metaclass (so that
370:Timeline of computing 2020–present
14:
2571:
2540:Low-importance Computing articles
2350:. Please take a moment to review
496:Is java.lang.Class a metaclass?
396:Computing articles needing images
2378:http://www.onlamp.com/lpt/a/3388
1361:map is uniform description. The
1204:is an inheritance descendant of
1196:is an inheritance descendant of
1184:monotonicity: for every objects
895:so I'm going to add it again. --
246:
169:
148:
72:
51:
20:
2254:"SELF: The Power of Simplicity"
2252:David Ungar, Randall B. Smith.
1530:map in two respects. First, if
216:This article has been rated as
127:This article has been rated as
107:Knowledge:WikiProject Computing
2535:Start-Class Computing articles
2293:
2278:
2263:
2245:
2231:
2200:
2186:
1977:. In the latter case the term
1750:If you consider the canonical
1372:map allows the correspondence
1032:23:16, 20 September 2011 (UTC)
941:Ruby doesn't have meta classes
110:Template:WikiProject Computing
1:
2026:21:47, 19 February 2015 (UTC)
2011:"StructLayoutAttribute Class"
1873:17:32, 27 December 2013 (UTC)
1852:15:37, 24 December 2012 (UTC)
1784:13:54, 28 December 2012 (UTC)
1743:01:29, 28 December 2012 (UTC)
1618:13:54, 28 December 2012 (UTC)
1350:01:29, 28 December 2012 (UTC)
1159:20:44, 18 December 2012 (UTC)
1116:20:03, 19 December 2012 (UTC)
970:15:43, 17 November 2009 (UTC)
856:18:39, 13 December 2006 (UTC)
826:17:53, 16 February 2006 (UTC)
548:15:32, 20 December 2006 (UTC)
530:16:12, 16 February 2006 (UTC)
450:Tag all relevant articles in
190:and see a list of open tasks.
101:and see a list of open tasks.
2454:15:06, 26 January 2018 (UTC)
2161:Please stop vandalizing the
1994:10:04, 3 December 2014 (UTC)
1920:23:28, 2 December 2014 (UTC)
1893:22:47, 2 December 2014 (UTC)
1702:There does not have to be a
1248:Metaclasses are exactly the
1218:the inheritance root is the
1092:is the direct superclass of
887:10:20, 16 January 2007 (UTC)
877:09:58, 12 January 2007 (UTC)
812:03:37, 27 January 2006 (UTC)
744:16:14, 22 January 2007 (UTC)
678:18:48, 17 January 2007 (UTC)
618:11:02, 16 January 2007 (UTC)
459:WikiProject Computer science
235:WikiProject Computer science
179:WikiProject Computer science
7:
1821:Putting metaclasses to work
1011:23:09, 30 August 2009 (UTC)
953:23:08, 30 August 2009 (UTC)
868:As far as i can tell, the "
706:I accept the definition; I
587:14:27, 7 January 2007 (UTC)
390:List of computer scientists
10:
2576:
2521:12:24, 25 April 2023 (UTC)
2497:16:25, 20 April 2018 (UTC)
2417:(last update: 5 June 2024)
2343:Hello fellow Wikipedians,
1878:"Infinite chains" in Ruby?
1585:class, just like in Ruby.
1546:returns the eigenclass of
1519:class or its eigenclass.)
222:project's importance scale
133:project's importance scale
2334:01:32, 23 July 2015 (UTC)
1813:Java Reflection in Action
1245:class is not a metaclass.
995:01:50, 19 June 2009 (UTC)
933:13:42, 2 April 2008 (UTC)
770:22:47, 12 July 2011 (UTC)
645:23:44, 14 July 2011 (UTC)
541:Java Reflection in Action
452:Category:Computer science
228:
215:
202:Computer science articles
164:
126:
67:
46:
2509:C++23 - cppreference.com
2060:
2031:The Struct class in Ruby
1835:is Java's only metaclass
1655:inheritance relationship
1270:class, the former being
914:20:01, 6 June 2007 (UTC)
900:10:34, 6 June 2007 (UTC)
882:OK, i've removed it. --
454:and sub-categories with
2175:08:44, 4 May 2015 (UTC)
1771:imposed actualclass map
1665:(so that it equals the
1565:a strict descendant of
795:00:29, 1 May 2012 (UTC)
2545:All Computing articles
2479:
2471:
1675:x.class.class.class. …
1255:Each class has a name.
415:Computer science stubs
95:information technology
28:This article is rated
2477:
2469:
1708:Metaclass class class
1677:stops at this root).
1659:instance relationship
1650:in Pharo or Squeak.)
836:Just try to do this:
82:WikiProject Computing
2398:regular verification
1534:is a class (so that
1137:object representing
1125:object representing
1057:method in Smalltalk
1018:slots in python code
577:that is reflected as
233:Things you can help
2388:After February 2018
1979:infinite regression
1573:"redirects" to the
1368:In particular, the
870:Metaclasses in Ruby
2480:
2472:
2442:InternetArchiveBot
2393:InternetArchiveBot
2285:Satoshi Matsuoka.
1898:I just found this:
1663:direct-instance-of
1554:class. Second, if
1319:the eigenclass of
817:Done. Next time,
668:BTW my home page (
113:Computing articles
34:content assessment
2499:
2487:comment added by
2418:
1973:or papers about
1683:there is also an
1648:ProtoObject class
1483:
1482:
1414:Inheritance root
1326:
1325:
1106:comment added by
985:comment added by
819:Knowledge:Be bold
517:
503:comment added by
489:
488:
485:
484:
481:
480:
477:
476:
473:
472:
143:
142:
139:
138:
2567:
2482:
2452:
2443:
2416:
2415:
2394:
2332:
2316:
2315:
2313:
2311:
2297:
2291:
2290:
2282:
2276:
2275:
2267:
2261:
2260:
2258:
2249:
2243:
2242:
2235:
2229:
2228:
2221:
2215:
2214:
2212:
2204:
2198:
2197:
2190:
2157:
2154:
2151:
2148:
2145:
2142:
2139:
2136:
2133:
2130:
2127:
2124:
2121:
2118:
2115:
2112:
2109:
2106:
2103:
2100:
2097:
2094:
2091:
2088:
2085:
2082:
2079:
2076:
2073:
2070:
2067:
2064:
2057:
2053:
2046:
2042:
2038:
2014:
1967:infinite regress
1936:prefix, meaning
1833:
1819:) with the book
1808:
1804:
1800:
1796:
1792:
1763:
1718:is not equal to
1681:inheritance root
1649:
1645:
1641:
1637:
1626:
1607:
1603:
1595:
1590:eigenclass model
1584:
1580:
1576:
1572:
1568:
1561:
1557:
1553:
1549:
1545:
1541:
1537:
1533:
1525:
1518:
1498:
1479:
1474:
1469:
1464:
1459:
1444:
1439:
1434:
1429:
1424:
1392:
1322:
1316:
1305:
1299:
1280:
1277:
1273:
1269:
1265:
1251:
1244:
1231:
1225:
1221:
1217:
1172:eigenclass model
1167:inheritance root
1118:
997:
608:
604:
516:
497:
463:
457:
332:Computer science
261:Article requests
250:
243:
242:
230:
229:
204:
203:
200:
197:
194:
193:Computer science
184:Computer science
173:
166:
165:
160:
156:Computer science
152:
145:
144:
115:
114:
111:
108:
105:
76:
69:
68:
63:
55:
48:
47:
31:
25:
24:
16:
2575:
2574:
2570:
2569:
2568:
2566:
2565:
2564:
2525:
2524:
2505:
2503:C++ metaclasses
2461:
2446:
2441:
2409:
2402:have permission
2392:
2356:this simple FaQ
2341:
2330:John Vandenberg
2328:
2325:
2320:
2319:
2309:
2307:
2299:
2298:
2294:
2283:
2279:
2268:
2264:
2256:
2250:
2246:
2237:
2236:
2232:
2223:
2222:
2218:
2210:
2206:
2205:
2201:
2194:"rb_class_real"
2192:
2191:
2187:
2182:
2159:
2158:
2155:
2152:
2149:
2146:
2143:
2140:
2137:
2134:
2131:
2128:
2125:
2122:
2119:
2116:
2113:
2110:
2107:
2104:
2101:
2098:
2095:
2092:
2089:
2086:
2083:
2080:
2077:
2074:
2071:
2068:
2065:
2062:
2055:
2051:
2044:
2040:
2036:
2033:
2009:
2005:
1997:
1957:lazy evaluation
1912:MadScientistX11
1885:MadScientistX11
1880:
1865:MadScientistX11
1860:
1855:
1831:
1806:
1802:
1798:
1794:
1790:
1761:
1731:Metaclass class
1716:Metaclass class
1647:
1643:
1639:
1635:
1624:
1605:
1601:
1593:
1582:
1578:
1574:
1570:
1566:
1559:
1555:
1551:
1547:
1543:
1539:
1535:
1531:
1523:
1516:
1503:descendants of
1496:
1477:
1472:
1467:
1462:
1457:
1449:Metaclass root
1442:
1437:
1432:
1427:
1422:
1320:
1314:
1303:
1297:
1275:
1271:
1267:
1263:
1249:
1242:
1229:
1223:
1219:
1215:
1101:
1039:
1020:
980:
977:
907:java.lang.Class
866:
840:
834:
805:
606:
603:java.lang.Class
602:
498:
494:
492:java.lang.Class
469:
466:
461:
455:
443:Project-related
438:
419:
400:
374:
355:
336:
317:
298:
274:
201:
198:
195:
192:
191:
158:
112:
109:
106:
103:
102:
61:
32:on Knowledge's
29:
12:
11:
5:
2573:
2563:
2562:
2557:
2552:
2547:
2542:
2537:
2513:192.54.145.138
2504:
2501:
2489:174.62.125.132
2460:
2457:
2436:
2435:
2428:
2381:
2380:
2372:Added archive
2370:
2362:Added archive
2340:
2337:
2324:
2321:
2318:
2317:
2292:
2277:
2262:
2244:
2230:
2216:
2199:
2184:
2183:
2181:
2178:
2061:
2032:
2029:
2004:
2003:Python example
2001:
1999:
1983:
1982:
1960:
1950:
1949:
1948:
1941:
1930:
1923:
1900:
1899:
1879:
1876:
1859:
1856:
1841:
1840:
1839:
1838:
1829:
1810:
1807:getClassObject
1787:
1748:
1747:
1746:
1745:
1732:
1728:
1723:
1721:
1717:
1713:
1709:
1688:
1678:
1651:
1632:
1621:
1481:
1480:
1475:
1470:
1465:
1460:
1455:
1446:
1445:
1440:
1435:
1430:
1425:
1420:
1411:
1410:
1407:
1404:
1401:
1398:
1395:
1387:
1386:
1355:
1354:
1353:
1352:
1324:
1323:
1317:
1312:
1308:
1307:
1300:
1295:
1291:
1290:
1287:
1284:
1257:
1256:
1253:
1246:
1239:
1236:
1227:
1224:standard-class
1220:built-in-class
1213:
1212:
1209:
1175:
1162:
1147:
1146:
1144:
1140:
1136:
1132:
1128:
1124:
1119:
1097:
1095:
1091:
1087:
1083:
1079:
1075:
1070:
1062:
1056:
1047:
1038:
1035:
1019:
1016:
1015:
1014:
976:
973:
958:
957:
956:
918:
917:
916:
890:
889:
865:
862:
861:
860:
859:
858:
849:
838:
833:
830:
829:
828:
804:
801:
800:
799:
798:
797:
779:
778:
777:
776:
775:
774:
773:
772:
751:
750:
749:
748:
747:
746:
732:
731:
730:
729:
728:
727:
716:
715:
714:
713:
712:
711:
699:
698:
697:
696:
695:
694:
683:
682:
681:
680:
673:
667:
664:
661:
654:
653:
652:
651:
650:
649:
648:
647:
625:
624:
623:
622:
621:
620:
594:
593:
592:
591:
590:
589:
553:
552:
551:
550:
533:
532:
493:
490:
487:
486:
483:
482:
479:
478:
475:
474:
471:
470:
468:
467:
465:
464:
447:
439:
437:
436:
430:
420:
418:
417:
411:
401:
399:
398:
393:
385:
375:
373:
372:
366:
356:
354:
353:
347:
337:
335:
334:
328:
318:
316:
315:
309:
299:
297:
296:
291:
285:
275:
273:
272:
266:
254:
252:
251:
239:
238:
226:
225:
218:Mid-importance
214:
208:
207:
205:
188:the discussion
174:
162:
161:
159:Mid‑importance
153:
141:
140:
137:
136:
129:Low-importance
125:
119:
118:
116:
99:the discussion
77:
65:
64:
62:Low‑importance
56:
44:
43:
37:
26:
9:
6:
4:
3:
2:
2572:
2561:
2558:
2556:
2553:
2551:
2548:
2546:
2543:
2541:
2538:
2536:
2533:
2532:
2530:
2523:
2522:
2518:
2514:
2510:
2500:
2498:
2494:
2490:
2486:
2476:
2468:
2464:
2456:
2455:
2450:
2445:
2444:
2433:
2429:
2426:
2422:
2421:
2420:
2413:
2407:
2403:
2399:
2395:
2389:
2384:
2379:
2375:
2371:
2369:
2365:
2361:
2360:
2359:
2357:
2353:
2349:
2344:
2336:
2335:
2331:
2306:
2302:
2296:
2288:
2281:
2273:
2266:
2255:
2248:
2240:
2234:
2226:
2220:
2209:
2203:
2195:
2189:
2185:
2177:
2176:
2172:
2168:
2164:
2059:
2048:
2028:
2027:
2023:
2019:
2015:
2012:
2000:
1996:
1995:
1991:
1987:
1980:
1976:
1972:
1968:
1964:
1961:
1958:
1954:
1951:
1946:
1945:eigenclass-of
1942:
1939:
1935:
1931:
1928:
1927:
1925:
1924:
1922:
1921:
1917:
1913:
1908:
1907:
1903:
1897:
1896:
1895:
1894:
1890:
1886:
1875:
1874:
1870:
1866:
1854:
1853:
1849:
1845:
1836:
1830:
1828:
1825:
1824:
1822:
1818:
1817:Ira R. Forman
1814:
1788:
1786:
1785:
1781:
1777:
1773:
1772:
1767:
1759:
1758:
1753:
1744:
1740:
1736:
1735:50.193.52.113
1730:
1726:
1724:
1719:
1715:
1711:
1707:
1705:
1701:
1700:
1699:
1698:
1696:
1692:
1686:
1685:instance root
1682:
1676:
1672:
1668:
1664:
1660:
1656:
1652:
1638:class is the
1633:
1630:
1622:
1620:
1619:
1615:
1611:
1599:
1591:
1586:
1564:
1529:
1520:
1514:
1513:
1508:
1507:
1502:
1494:
1490:
1489:
1476:
1471:
1466:
1461:
1456:
1454:
1453:
1448:
1447:
1441:
1436:
1431:
1426:
1421:
1419:
1418:
1413:
1412:
1408:
1405:
1402:
1399:
1396:
1394:
1393:
1390:
1385:
1383:
1379:
1375:
1374:
1373:
1371:
1366:
1364:
1360:
1351:
1347:
1343:
1342:50.193.52.113
1338:
1333:
1332:
1331:
1330:
1329:
1318:
1313:
1310:
1309:
1301:
1296:
1293:
1292:
1288:
1285:
1282:
1281:
1261:
1254:
1247:
1240:
1237:
1234:
1233:
1210:
1207:
1203:
1199:
1195:
1191:
1187:
1183:
1182:
1180:
1176:
1173:
1168:
1164:
1163:
1161:
1160:
1156:
1152:
1151:50.193.52.113
1142:
1138:
1134:
1130:
1126:
1122:
1120:
1117:
1113:
1109:
1108:50.193.52.113
1105:
1098:
1093:
1089:
1085:
1081:
1077:
1073:
1071:
1068:
1063:
1060:
1054:
1052:
1048:
1044:
1043:
1042:
1034:
1033:
1029:
1025:
1024:138.246.2.200
1012:
1008:
1004:
1000:
999:
998:
996:
992:
988:
987:71.167.68.142
984:
972:
971:
967:
963:
954:
950:
946:
942:
937:
936:
935:
934:
930:
926:
922:
915:
912:
908:
904:
903:
902:
901:
898:
894:
888:
885:
881:
880:
879:
878:
875:
871:
857:
854:
850:
847:
846:
845:
844:
843:
837:
827:
824:
820:
816:
815:
814:
813:
810:
796:
792:
788:
787:208.80.119.68
783:
782:
781:
780:
771:
767:
763:
762:208.80.119.67
759:
758:
757:
756:
755:
754:
753:
752:
745:
742:
738:
737:
736:
735:
734:
733:
726:
722:
721:
720:
719:
718:
717:
709:
705:
704:
703:
702:
701:
700:
693:
689:
688:
687:
686:
685:
684:
679:
676:
671:
658:
657:
656:
655:
646:
642:
638:
637:208.80.119.67
633:
632:
631:
630:
629:
628:
627:
626:
619:
616:
612:
600:
599:
598:
597:
596:
595:
588:
585:
581:
578:
574:
570:
566:
563:
559:
558:
557:
556:
555:
554:
549:
546:
542:
537:
536:
535:
534:
531:
528:
524:
523:introspection
520:
519:
518:
514:
510:
506:
502:
460:
453:
449:
448:
446:
444:
440:
435:
432:
431:
429:
427:
426:
421:
416:
413:
412:
410:
408:
407:
402:
397:
394:
391:
387:
386:
384:
382:
381:
376:
371:
368:
367:
365:
363:
362:
357:
352:
349:
348:
346:
344:
343:
338:
333:
330:
329:
327:
325:
324:
319:
314:
311:
310:
308:
306:
305:
300:
295:
292:
290:
287:
286:
284:
282:
281:
276:
271:
268:
267:
265:
263:
262:
257:
256:
253:
249:
245:
244:
241:
240:
236:
232:
231:
227:
223:
219:
213:
210:
209:
206:
189:
185:
181:
180:
175:
172:
168:
167:
163:
157:
154:
151:
147:
146:
134:
130:
124:
121:
120:
117:
100:
96:
92:
88:
84:
83:
78:
75:
71:
70:
66:
60:
57:
54:
50:
49:
45:
41:
35:
27:
23:
18:
17:
2506:
2483:— Preceding
2481:
2462:
2440:
2437:
2412:source check
2391:
2385:
2382:
2345:
2342:
2326:
2308:. Retrieved
2304:
2295:
2280:
2265:
2247:
2233:
2219:
2202:
2188:
2162:
2160:
2049:
2034:
2018:Aluan Haddad
2016:
2006:
1998:
1984:
1978:
1966:
1962:
1952:
1944:
1937:
1933:
1909:
1904:
1901:
1881:
1861:
1842:
1834:
1826:
1820:
1812:
1791:Object.class
1769:
1765:
1756:
1755:
1751:
1749:
1710:is equal to
1703:
1694:
1690:
1684:
1680:
1674:
1670:
1666:
1662:
1658:
1654:
1628:
1597:
1587:
1562:
1527:
1521:
1511:
1510:
1505:
1504:
1500:
1492:
1487:
1486:
1484:
1451:
1450:
1416:
1415:
1406:Smalltalk-80
1403:Scala / Java
1388:
1381:
1377:
1376:
1369:
1367:
1362:
1358:
1356:
1337:only because
1336:
1327:
1315:Object class
1311:Smalltalk-80
1298:Object.class
1289:evaluates to
1259:
1205:
1201:
1197:
1193:
1189:
1185:
1178:
1148:
1131:Object.class
1102:— Preceding
1094:Object class
1082:Object class
1078:Object class
1066:
1058:
1050:
1040:
1021:
978:
962:Paul Brannan
959:
920:
919:
911:Piet Delport
891:
884:Piet Delport
874:Piet Delport
867:
841:
835:
806:
724:
723:Ira wrote:
691:
690:Ira wrote:
615:Piet Delport
610:
576:
572:
568:
561:
540:
495:
442:
441:
425:Unreferenced
423:
422:
404:
403:
378:
377:
359:
358:
340:
339:
321:
320:
302:
301:
278:
277:
259:
258:
217:
177:
128:
80:
40:WikiProjects
2156:# TypeError
2069:"Metaclazz"
1965:– The term
1691:"instances"
1627:es but not
1438:ProtoObject
1423:BasicObject
1226:metaclass.
1143:Class.class
1088:. Instead,
1080:. However,
981:—Preceding
909:above.) --
499:—Preceding
30:Start-class
2529:Categories
2449:Report bug
2180:References
1433:Any/Object
1286:Expression
1252:instances.
675:Ira Forman
569:represents
545:Ira Forman
2432:this tool
2425:this tool
2348:Metaclass
1981:is used.
1727:Metaclass
1720:Metaclass
1712:Metaclass
1695:"objects"
1575:Metaclass
1517:Metaclass
1250:Metaclass
1243:Metaclass
1059:precisely
573:represent
562:represent
313:Computing
104:Computing
91:computing
87:computers
59:Computing
2485:unsigned
2438:Cheers.—
2305:Ruby Doc
2301:"Struct"
2167:Hundblue
2165:section.
1986:Hundblue
1844:Hundblue
1803:getClass
1776:Hundblue
1704:fixpoint
1657:and the
1610:Hundblue
1606:class-of
1515:was the
1283:Language
1216:class-of
1181:map is:
1104:unsigned
983:unsigned
897:Kusunose
809:Mikeblas
803:See Also
708:wrote it
660:discuss.
513:contribs
505:Wlievens
501:unsigned
361:Maintain
304:Copyedit
2352:my edit
2323:History
2163:In Ruby
1795:classOf
1629:classes
1571:x class
1569:) then
1544:x class
1542:) then
1260:classes
1206:y.class
1202:x.class
1200:, then
1084:is not
1013:Solberg
1003:Solberg
955:Solberg
945:Solberg
853:Mal4mac
342:Infobox
280:Cleanup
220:on the
131:on the
2141:rescue
2045:Struct
2037:Struct
1975:ABCL/R
1799:Object
1766:.class
1752:.class
1714:, but
1673:map (
1671:.class
1667:.class
1636:Object
1528:.class
1501:strict
1493:.class
1428:object
1400:Python
1384:.class
1370:.class
1363:.class
1359:.class
1321:Object
1179:.class
1141:(i.e.
1129:(i.e.
1127:Object
1074:Object
1051:should
1046:root"?
975:..and?
925:Jorend
921:(sigh)
823:Jorend
741:Jorend
584:Jorend
527:Jorend
323:Expand
93:, and
36:scale.
2310:1 May
2257:(PDF)
2211:(PDF)
2153:class
2129:is_a?
2084:Class
1934:eigen
1832:Class
1762:class
1644:Class
1640:Class
1625:Class
1602:class
1594:class
1583:Class
1567:Class
1552:Class
1540:Class
1524:class
1497:Class
1478:class
1473:Class
1468:Class
1458:Class
1306:class
1304:Class
1276:class
1272:Class
1268:Class
1264:Class
1230:class
1192:, if
1139:Class
1135:Class
1123:Class
1090:Class
1086:Class
1055:class
864:Ruby?
607:final
406:Stubs
380:Photo
237:with:
2517:talk
2493:talk
2312:2015
2171:talk
2035:The
2022:talk
1990:talk
1971:Self
1916:talk
1889:talk
1869:talk
1848:talk
1793:(or
1780:talk
1739:talk
1729:nor
1614:talk
1600:the
1463:type
1409:CLOS
1397:Ruby
1346:talk
1302:the
1294:Ruby
1262:and
1241:The
1155:talk
1112:talk
1028:talk
1007:talk
991:talk
966:talk
949:talk
929:talk
791:talk
766:talk
641:talk
509:talk
2406:RfC
2376:to
2366:to
2147:$ !
2108:new
2093:end
2090:new
2081:new
2072:def
2052:new
2041:new
1938:own
1598:why
1149:--
1067:are
212:Mid
123:Low
2531::
2519:)
2495:)
2419:.
2414:}}
2410:{{
2303:.
2173:)
2120:#
2114:#
2047:.
2024:)
1992:)
1940:.)
1918:)
1891:)
1871:)
1850:)
1782:)
1741:)
1616:)
1604:/
1563:is
1380:=
1348:)
1188:,
1157:)
1114:)
1030:)
1009:)
993:)
968:)
951:)
931:)
821:!
793:)
768:)
643:)
611:to
515:)
511:•
462:}}
456:{{
89:,
2515:(
2491:(
2451:)
2447:(
2434:.
2427:.
2314:.
2289:.
2274:.
2259:.
2241:.
2227:.
2213:.
2196:.
2169:(
2150:.
2144:p
2138:)
2135:M
2132:(
2126:.
2123:A
2117:p
2111:p
2105:.
2102:M
2099:=
2096:A
2087:.
2078:.
2075:M
2066:=
2063:M
2056:M
2020:(
2013:.
1988:(
1947:.
1914:(
1887:(
1867:(
1846:(
1837:.
1778:(
1757:c
1737:(
1612:(
1579:x
1560:x
1556:x
1548:x
1536:x
1532:x
1512:c
1506:c
1488:c
1452:c
1443:T
1417:r
1382:r
1378:c
1344:(
1208:,
1198:y
1194:x
1190:y
1186:x
1153:(
1110:(
1096:.
1026:(
1005:(
989:(
964:(
947:(
927:(
789:(
764:(
639:(
507:(
445::
428::
409::
392:)
383::
364::
345::
326::
307::
283::
264::
224:.
135:.
42::
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.