Knowledge

Talk:Metaclass

Source đź“ť

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::

Index


content assessment
WikiProjects
WikiProject icon
Computing
WikiProject icon
WikiProject Computing
computers
computing
information technology
the discussion
Low
project's importance scale
WikiProject icon
Computer science
WikiProject icon
WikiProject Computer science
Computer science
the discussion
Mid
project's importance scale
WikiProject Computer science

Article requests
Requested articles/Applied arts and sciences/Computer science, computing, and Internet
Cleanup
Computer science articles needing attention
Computer science articles needing expert attention
Copyedit
Computing

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.

↑