In
mathematical logic
Mathematical logic is the study of Logic#Formal logic, formal logic within mathematics. Major subareas include model theory, proof theory, set theory, and recursion theory (also known as computability theory). Research in mathematical logic com ...
and
computer science
Computer science is the study of computation, information, and automation. Computer science spans Theoretical computer science, theoretical disciplines (such as algorithms, theory of computation, and information theory) to Applied science, ...
, some
type theories and
type system
In computer programming, a type system is a logical system comprising a set of rules that assigns a property called a ''type'' (for example, integer, floating point, string) to every '' term'' (a word, phrase, or other set of symbols). Usu ...
s 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 language
A programming language is a system of notation for writing computer programs.
Programming languages are described in terms of their Syntax (programming languages), syntax (form) and semantics (computer science), semantics (meaning), usually def ...
s 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
Class, Classes, or The Class may refer to:
Common uses not otherwise categorized
* Class (biology), a taxonomic rank
* Class (knowledge representation), a collection of individuals or objects
* Class (philosophy), an analytical concept used d ...
'' or other item at the top of a
runtime ''class hierarchy'' (often relevant in
object-oriented programming
Object-oriented programming (OOP) is a programming paradigm based on the concept of '' objects''. Objects can contain data (called fields, attributes or properties) and have actions they can perform (called procedures or methods and impl ...
) or ''type hierarchy''; it is often possible to create objects with this (runtime) type, or it could be found when one examines the type hierarchy programmatically, in languages that support it
# A (
compile time
In computer science, compile time (or compile-time) describes the time window during which a language's statements are converted into binary instructions for the processor to execute. The term is used as an adjective to describe concepts relat ...
) ''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
In computer programming, a type system is a logical system comprising a set of rules that assigns a property called a ''type'' (for example, integer, floating point, string) to every '' term'' (a word, phrase, or other set of symbols). Usu ...
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
Objective-C is a high-level general-purpose, object-oriented programming language that adds Smalltalk-style message passing (messaging) to the C programming language. Originally developed by Brad Cox and Tom Love in the early 1980s, it was ...
,
interface
in
Go), static types which variables can accept any object value, but which do not reflect real runtime 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.
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 is not the universal type but the
unit type
In the area of mathematical logic and computer science known as type theory, a unit type is a type that allows only one value (and thus can hold no information). The carrier (underlying set) associated with a unit type can be any singleton set. ...
. Since C++17, the
standard library
In computer programming, a standard library is the library (computing), library made available across Programming language implementation, implementations of a programming language. Often, a standard library is specified by its associated program ...
provides the top type
std::any
.
*
Objective-C
Objective-C is a high-level general-purpose, object-oriented programming language that adds Smalltalk-style message passing (messaging) to the C programming language. Originally developed by Brad Cox and Tom Love in the early 1980s, it was ...
. 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 runtimes. In the
OpenStep
OpenStep is an object-oriented application programming interface (API) specification developed by NeXT. It provides a framework for building graphical user interfaces (GUIs) and developing software applications. OpenStep was designed to be plat ...
and
Cocoa Objective-C
libraries
A library is a collection of Book, books, and possibly other Document, materials and Media (communication), media, that is accessible for use by its members and members of allied institutions. Libraries provide physical (hard copies) or electron ...
,
NSObject
is conventionally the universal base class. The top type for pointers to objects is
id
.
*
Swift
Swift or SWIFT most commonly refers to:
* SWIFT, an international organization facilitating transactions between banks
** SWIFT code
* Swift (programming language)
* Swift (bird), a family of birds
It may also refer to:
Organizations
* SWIF ...
. 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
Haskell () is a general-purpose, statically typed, purely functional programming language with type inference and lazy evaluation. Designed for teaching, research, and industrial applications, Haskell pioneered several programming language ...
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
In computer science, a type class is a type system construct that supports ad hoc polymorphism. This is achieved by adding constraints to type variables in parametrically polymorphic types. Such a constraint typically involves a type class T a ...
constraint). In
Rust
Rust is an iron oxide, a usually reddish-brown oxide formed by the reaction of iron and oxygen in the catalytic presence of water or air moisture. Rust consists of hydrous iron(III) oxides (Fe2O3·nH2O) and iron(III) oxide-hydroxide (FeO(OH) ...
,
is the most generic parameter (
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 runtime typing often provide
downcasting (or ''type refinement'') to allow discovering a more specific type for an object at runtime. In C++, downcasting from
void *
cannot be done in a ''safe'' way, where failed downcasts are detected by the language runtime.
In languages with a
structural type system
A structural type system (or property-based type system) is a major class of type systems in which type compatibility and equivalence are determined by the type's actual structure or definition and not by other characteristics such as its name ...
, the empty structure serves as a top type. For example, objects in
OCaml
OCaml ( , formerly Objective Caml) is a General-purpose programming language, general-purpose, High-level programming language, high-level, Comparison of multi-paradigm programming languages, multi-paradigm programming language which extends the ...
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
The propositional calculus is a branch of logic. It is also called propositional logic, statement logic, sentential calculus, sentential logic, or sometimes zeroth-order logic. Sometimes, it is called ''first-order'' propositional logic to contra ...
, linking 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
The Web Ontology Language (OWL) is a family of Knowledge representation and reasoning, knowledge representation languages for authoring Ontology (information science), ontologies. Ontologies are a formal way to describe Taxonomy, taxonomies and ...
(OWL), which supports several 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
*
Singly rooted hierarchy
Notes
References
*
External links
c2.com: Top type
{{Data types
Data types
Type theory