fbpx
Wikipedia

Top type

In mathematical logic and computer science, some type theories and type systems include a top type that is commonly denoted with top or the symbol ⊤. The top type is sometimes called also universal type, or universal supertype as all other types in the type system of interest are subtypes of it, and in most cases, it contains every possible object of the type system. It is in contrast with the bottom type, or the universal subtype, which every other type is supertype of and it is often that the type contains no members at all.

Support in programming languages

Several typed programming languages provide explicit support for the top type.

In statically-typed languages, there are two different, often confused, concepts when discussing the top type.

  1. A universal base class or other item at the top of a run time class hierarchy (often relevant in object-oriented programming) or type hierarchy; it is often possible to create objects with this (run time) type, or it could be found when one examines the type hierarchy programmatically, in languages that support it
  2. A (compile time) static type in the code whose variables can be assigned any value (or a subset thereof, like any object pointer value), similar to dynamic typing

The first concept often implies the second, i.e., if a universal base class exists, then a variable that can point to an object of this class can also point to an object of any class. However, several languages have types in the second regard above (e.g., void * in C++, id in Objective-C, interface {} in Go), static types which variables can accept any object value, but which do not reflect real run time types that an object can have in the type system, so are not top types in the first regard.

In dynamically-typed languages, the second concept does not exist (any value can be assigned to any variable anyway), so only the first (class hierarchy) is discussed. This article tries to stay with the first concept when discussing top types, but also mention the second concept in languages where it is significant.

Most object-oriented programming languages include a universal base class:
Name Languages
Object Smalltalk, JavaScript, Ruby (pre-1.9.2),[1] and some others.
java.lang.Object Java. Often written without the package prefix, as Object. Also, it is not a supertype of the primitive types; however, since Java 1.5, autoboxing allows implicit or explicit type conversion of a primitive value to Object, e.g., ((Object)42).toString()
System.Object[2] C#, Visual Basic .NET, and other .NET Framework languages
std::any C++ since C++17
object Python since the type/class unification[3] in version 2.2 (new-style objects only; old-style objects in 2.x lack this as a base class). A new typing module introduces type Any which is compatible with any type and vise-versa
TObject Object Pascal
t Lisp, many dialects such as Common Lisp
Any? Kotlin[4]
Any Scala,[5] Swift,[6] Julia,[7] Python[8]
ANY Eiffel[9]
UNIVERSAL Perl 5
Variant Visual Basic up to version 6, D[10]
interface{} Go
BasicObject Ruby (version 1.9.2 and beyond)
any and unknown[11] TypeScript (with unknown having been introduced in version 3.0[12])
mixed PHP (as of version 8.0)

The following object-oriented languages have no universal base class:

  • C++. The pointer to void type can accept any non-function pointer, even though the void type itself is not the universal type but the unit type. Since C++17, the standard library provides the top type std::any.
  • Objective-C. It is possible to create a new base class by not specifying a parent class for a class, although this is highly unusual. Object is conventionally used as the base class in the original Objective-C run times. In the OpenStep and Cocoa Objective-C libraries, NSObject is conventionally the universal base class. The top type for pointers to objects is id.
  • Swift. It is possible to create a new base class by not specifying a parent class for a class. The protocol Any can accept any type.

Other languages

Languages that are not object-oriented usually have no universal supertype, or subtype polymorphism support.

While Haskell purposefully lacks subtyping, it has several other forms of polymorphism including parametric polymorphism. The most generic type class parameter is an unconstrained parameter a (without a type class constraint). In Rust, <T: ?Sized> is the most generic parameter (<T> is not, as it implies the Sized trait by default).

The top type is used as a generic type, more so in languages without parametric polymorphism. For example, before introducing generics in Java 5, collection classes in the Java library (excluding Java arrays) held references of type Object. In this way, any non-intrinsic type could be inserted into a collection. The top type is also often used to hold objects of unknown type.

The top type may also be seen as the implied type of non-statically typed languages. Languages with run time typing often provide downcasting (or type refinement) to allow discovering a more specific type for an object at run time. In C++, downcasting from void * cannot be done in a safe way, where failed downcasts are detected by the language run time.

In languages with a structural type system, the empty structure serves as a top type. For example, objects in OCaml are structurally typed; the empty object type (the type of objects with no methods), < >, is the top type of object types. Any OCaml object can be explicitly upcasted to this type, although the result would be of no use. Go also uses structural typing; and all types implement the empty interface: interface {}, which has no methods, but may still be downcast back to a more specific type.

In logic

The notion of top is also found in propositional calculus, corresponding to a formula which is true in every possible interpretation. It has a similar meaning in predicate calculus. In description logic, top is used to refer to the set of all concepts. This is intuitively like the use of the top type in programming languages. For example, in the Web Ontology Language (OWL), which supports various description logics, top corresponds to the class owl:Thing, where all classes are subclasses of owl:Thing. (the bottom type or empty set corresponds to owl:Nothing).

See also

Notes

  1. ^ "Class: BasicObject (Ruby 1.9.2)". Retrieved April 7, 2014.
  2. ^ System.Object
  3. ^ Python type/class unification
  4. ^ Matilla, Hugo (2019-02-27). "Kotlin basics: types. Any, Unit and Nothing". Medium. Retrieved September 16, 2019.
  5. ^ "An Overview of the Scala Programming Language" (PDF). 2006. Retrieved April 7, 2014.
  6. ^ "Types — The Swift Programming Language (Swift 5.3)". docs.swift.org. Retrieved November 2, 2020.
  7. ^ "Types · The Julia Language". Retrieved May 15, 2021.
  8. ^ "The Any type". 2022. Retrieved October 26, 2022.
  9. ^ "Standard ECMA-367. Eiffel: Analysis, Design and Programming Language" (PDF). 2006. Retrieved March 10, 2016.
  10. ^ "std.variant - D Programming Language". dlang.org. Retrieved 2022-10-29.
  11. ^ "The top types 'any' and 'unknown' in TypeScript".
  12. ^ "The unknown Type in TypeScript". 15 May 2019.

References

External links

  • c2.com: Top type

type, mathematical, logic, computer, science, some, type, theories, type, systems, include, type, that, commonly, denoted, with, symbol, type, sometimes, called, also, universal, type, universal, supertype, other, types, type, system, interest, subtypes, most,. In mathematical logic and computer science some type theories and type systems include a top type that is commonly denoted with top or the symbol The top type is sometimes called also universal type or universal supertype as all other types in the type system of interest are subtypes of it and in most cases it contains every possible object of the type system It is in contrast with the bottom type or the universal subtype which every other type is supertype of and it is often that the type contains no members at all Contents 1 Support in programming languages 1 1 Other languages 2 In logic 3 See also 4 Notes 5 References 6 External linksSupport in programming languages EditSeveral typed programming languages provide explicit support for the top type In statically typed languages there are two different often confused concepts when discussing the top type A universal base class or other item at the top of a run time class hierarchy often relevant in object oriented programming or type hierarchy it is often possible to create objects with this run time type or it could be found when one examines the type hierarchy programmatically in languages that support it A compile time static type in the code whose variables can be assigned any value or a subset thereof like any object pointer value similar to dynamic typingThe first concept often implies the second i e if a universal base class exists then a variable that can point to an object of this class can also point to an object of any class However several languages have types in the second regard above e g void in C id in Objective C interface in Go static types which variables can accept any object value but which do not reflect real run time types that an object can have in the type system so are not top types in the first regard In dynamically typed languages the second concept does not exist any value can be assigned to any variable anyway so only the first class hierarchy is discussed This article tries to stay with the first concept when discussing top types but also mention the second concept in languages where it is significant Most object oriented programming languages include a universal base class Name LanguagesObject Smalltalk JavaScript Ruby pre 1 9 2 1 and some others java lang Object Java Often written without the package prefix as Object Also it is not a supertype of the primitive types however since Java 1 5 autoboxing allows implicit or explicit type conversion of a primitive value to Object e g Object 42 toString System Object 2 C Visual Basic NET and other NET Framework languagesstd any C since C 17object Python since the type class unification 3 in version 2 2 new style objects only old style objects in 2 x lack this as a base class A new typing module introduces type Any which is compatible with any type and vise versaTObject Object Pascalt Lisp many dialects such as Common LispAny Kotlin 4 Any Scala 5 Swift 6 Julia 7 Python 8 ANY Eiffel 9 UNIVERSAL Perl 5 a href Variant type html class mw redirect title Variant type Variant a Visual Basic up to version 6 D 10 interface GoBasicObject Ruby version 1 9 2 and beyond any and unknown 11 TypeScript with unknown having been introduced in version 3 0 12 mixed PHP as of version 8 0 The following object oriented languages have no universal base class C The pointer to void type can accept any non function pointer even though the void type itself is not the universal type but the unit type Since C 17 the standard library provides the top type std any Objective C It is possible to create a new base class by not specifying a parent class for a class although this is highly unusual Object is conventionally used as the base class in the original Objective C run times In the OpenStep and Cocoa Objective C libraries NSObject is conventionally the universal base class The top type for pointers to objects is id Swift It is possible to create a new base class by not specifying a parent class for a class The protocol Any can accept any type Other languages Edit Languages that are not object oriented usually have no universal supertype or subtype polymorphism support While Haskell purposefully lacks subtyping it has several other forms of polymorphism including parametric polymorphism The most generic type class parameter is an unconstrained parameter a without a type class constraint In Rust lt T Sized gt is the most generic parameter lt T gt is not as it implies the Sized trait by default The top type is used as a generic type more so in languages without parametric polymorphism For example before introducing generics in Java 5 collection classes in the Java library excluding Java arrays held references of type Object In this way any non intrinsic type could be inserted into a collection The top type is also often used to hold objects of unknown type The top type may also be seen as the implied type of non statically typed languages Languages with run time typing often provide downcasting or type refinement to allow discovering a more specific type for an object at run time In C downcasting from void cannot be done in a safe way where failed downcasts are detected by the language run time In languages with a structural type system the empty structure serves as a top type For example objects in OCaml are structurally typed the empty object type the type of objects with no methods lt gt is the top type of object types Any OCaml object can be explicitly upcasted to this type although the result would be of no use Go also uses structural typing and all types implement the empty interface interface which has no methods but may still be downcast back to a more specific type In logic EditThe notion of top is also found in propositional calculus corresponding to a formula which is true in every possible interpretation It has a similar meaning in predicate calculus In description logic top is used to refer to the set of all concepts This is intuitively like the use of the top type in programming languages For example in the Web Ontology Language OWL which supports various description logics top corresponds to the class owl Thing where all classes are subclasses of owl Thing the bottom type or empty set corresponds to owl Nothing See also EditSingly rooted hierarchyNotes Edit Class BasicObject Ruby 1 9 2 Retrieved April 7 2014 System Object Python type class unification Matilla Hugo 2019 02 27 Kotlin basics types Any Unit and Nothing Medium Retrieved September 16 2019 An Overview of the Scala Programming Language PDF 2006 Retrieved April 7 2014 Types The Swift Programming Language Swift 5 3 docs swift org Retrieved November 2 2020 Types The Julia Language Retrieved May 15 2021 The Any type 2022 Retrieved October 26 2022 Standard ECMA 367 Eiffel Analysis Design and Programming Language PDF 2006 Retrieved March 10 2016 std variant D Programming Language dlang org Retrieved 2022 10 29 The top types any and unknown in TypeScript The unknown Type in TypeScript 15 May 2019 References EditPierce Benjamin C 2002 Types and Programming Languages MIT Press ISBN 0 262 16209 1 External links Editc2 com Top type Retrieved from https en wikipedia org w index php title Top type amp oldid 1126177316, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.