Верхний тип - Википедия - Top type

В математическая логика и Информатика, немного теории типов и системы типов включать верхний тип что обычно обозначается верх или символ ⊤. Верхний тип иногда также называют универсальный тип, или же универсальный супертип как и все другие типы в интересующей системе типов подтипы его, и в большинстве случаев он содержит все возможные объекты системы типов. Это в отличие от нижний тип, или универсальный подтип, который является супертипом любого другого типа, и в большинстве случаев это тип, который вообще не содержит членов.

Поддержка языков программирования

Несколько набранных языки программирования обеспечить явную поддержку верхнего типа.

В статически типизированный языков, при обсуждении верхнего типа используются два разных, часто путающих понятия.

  1. А универсальный базовый класс или другой элемент в верхней части время выполнения иерархия классов (часто актуально в объектно-ориентированного программирования ) или же иерархия типов; часто можно создавать объекты с этим типом (во время выполнения), или его можно найти, когда программно исследует иерархию типов на языках, которые его поддерживают
  2. А (время компиляции ) статический тип в коде, переменным которого может быть присвоено любое значение (или его подмножество, как любое значение указателя объекта), аналогично динамическая типизация

Первое понятие часто подразумевает второе, т.е. если универсальный базовый класс существует, то переменная, которая может указывать на объект этого класса, также может указывать на объект любого класса. Однако в некоторых языках есть типы во втором отношении выше (например, пустота * в C ++, я бы в Objective-C, интерфейс {} в Go), статические типы, переменные которых могут принимать любое значение объекта, но которые не отражают типы реального времени выполнения, которые объект может иметь в системе типов, поэтому в первую очередь не являются верхними типами.

В языках с динамической типизацией второй концепции не существует (в любом случае любое значение может быть присвоено любой переменной), поэтому обсуждается только первая (иерархия классов). В этой статье делается попытка придерживаться первой концепции при обсуждении основных типов, но также упоминается вторая концепция в языках, где это важно.

Наиболее объектно-ориентированного программирования языки включают универсальный базовый класс:
ИмяЯзыки
ОбъектБолтовня, JavaScript, Рубин (до 1.9.2),[1] и некоторые другие.
java.lang.ObjectЯва. Часто пишется без префикса пакета, как Объект. Кроме того, это нет супертип примитивных типов; однако, начиная с Java 1.5, автобокс позволяет неявный или явный преобразование типов примитивного значения до Объект, например, ((Объект) 42) .toString ()
System.Object[2]C #, Visual Basic .NET, и другие .NET Framework языки
объектPython поскольку унификация типа / класса[3] в версии 2.2 (только объекты нового стиля; объекты старого стиля в 2.x не имеют этого в качестве базового класса)
TObjectObject Pascal
тЛисп, многие диалекты, такие как Common Lisp
Любой?Котлин[4]
ЛюбойScala[5], Быстрый[6]
ЛЮБОЙЭйфель[7]
УНИВЕРСАЛЬНЫЙPerl 5
ВариантVisual Basic до версии 6
интерфейс{}Идти
BasicObjectРубин (версия 1.9.2 и выше)
любой и неизвестный[8]Машинописьнеизвестный был представлен в версии 3.0[9])

Следующие объектно-ориентированные языки не имеют универсального базового класса:

  • C ++. В указатель на недействительность type может принимать любой нефункциональный указатель, даже если тип пустоты сам по себе не универсальный тип, а тип единицы.
  • Цель-C. Можно создать новый базовый класс, не указав родительский класс для класса, хотя это очень необычно. Объект обычно используется как базовый класс в исходной версии Objective-C. в OpenStep и Какао Библиотеки Objective-C, NSObject условно универсальный базовый класс. Самый верхний тип указателей на объекты - я бы.
  • Быстрый. Можно создать новый базовый класс, не указывая родительский класс для класса. Протокол Любой может принять любой тип.
  • PHP - это еще один объектно-ориентированный язык без универсального базового класса.

Другие языки

Языки, которые не являются объектно-ориентированными, обычно не имеют универсального супертипа или поддержки полиморфизма подтипа.

Пока Haskell умышленно отсутствует подтипирование, у него есть несколько других форм полиморфизма, включая параметрический полиморфизм. Параметр класса наиболее общего типа - это неограниченный параметр а (без тип класс ограничение). В Ржавчина, <T: ?Sized> - самый общий параметр (<T> нет, поскольку это подразумевает Размер черта по умолчанию).

Верхний тип используется как общий типа, тем более на языках без параметрический полиморфизм. Например, прежде чем вводить дженерики в Java 5 классы коллекций в библиотеке Java (за исключением массивов Java) содержали ссылки типа Объект. Таким образом, любой тип, не являющийся внутренним, может быть вставлен в коллекцию. Верхний тип также часто используется для хранения объектов неизвестного типа.

Верхний тип также можно рассматривать как подразумеваемый тип нестатически типизированных языков. Языки с набором текста во время выполнения часто предоставляют понижение (или же уточнение типа), чтобы позволить обнаруживать более конкретный тип объекта во время выполнения. В C ++ при понижении пустота * не может быть сделано в безопасный Таким образом, во время выполнения языка обнаруживаются неудачные преобразования.

На языках с система структурного типа, пустая структура служит верхним типом. Например, объекты в OCaml структурно типизированы; тип пустого объекта (тип объектов без методов), < >, является верхним типом типов объектов. Любой объект OCaml может быть явно преобразован в этот тип, хотя результат был бы бесполезен. Идти также использует структурную типизацию; и все типы реализуют пустой интерфейс: интерфейс {}, который не имеет методов, но может быть возвращен к более конкретному типу.

В логике

Понятие верх также находится в пропозициональное исчисление, соответствующий формуле, которая верна во всех возможных интерпретациях. Аналогичное значение имеет в исчисление предикатов. В логика описания, top используется для обозначения набора всех концепций. Это интуитивно похоже на использование верхнего типа в языках программирования. Например, в Язык веб-онтологий (OWL), поддерживающий различную логику описания, верхний соответствует классу сова: вещь, где все классы являются подклассами сова: вещь. (нижний тип или пустой набор соответствует сова: ничего).

Смотрите также

Примечания

  1. ^ «Класс: BasicObject (Ruby 1.9.2)». Получено 7 апреля, 2014.
  2. ^ System.Object
  3. ^ Унификация типов / классов Python
  4. ^ Матилла, Хьюго (27.02.2019). «Основы Kotlin: типы. Любое, Единица и Ничего». Середина. Получено 2019-09-16.
  5. ^ «Обзор языка программирования Scala» (PDF). 2006. Получено 7 апреля, 2014.
  6. ^ "Типы - язык программирования Swift (Swift 5.3)". docs.swift.org. Получено 2020-10-02.
  7. ^ «Стандарт ECMA-367. Eiffel: язык анализа, проектирования и программирования» (PDF). 2006. Получено 10 марта, 2016.
  8. ^ https://2ality.com/2020/06/any-unknown-typescript.html
  9. ^ https://mariusschulz.com/blog/the-unknown-type-in-typescript

Рекомендации

внешняя ссылка