Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

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

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

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

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

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

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

  • C ++ . Указатель недействительным типа может принимать любой указатель без функции, даже если пустота типа сам по себе не является универсальным типом , но тип блока .
  • Цель-C . Можно создать новый базовый класс, не указав родительский класс для класса, хотя это очень необычно. Objectобычно используется как базовый класс в исходной версии Objective-C. В библиотеках OpenStep и Cocoa Objective-C NSObjectобычно является универсальным базовым классом. Самый верхний тип указателей на объекты - это id.
  • Свифт . Можно создать новый базовый класс, не указывая родительский класс для класса. Протокол Anyможет принимать любой тип.

Другие языки [ править ]

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

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

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

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

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

В логике [ править ]

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

См. Также [ править ]

  • Однокорневая иерархия

Заметки [ править ]

  1. ^ «Класс: BasicObject (Ruby 1.9.2)» . Проверено 7 апреля 2014 года .
  2. ^ System.Object
  3. ^ Унификация типов / классов Python
  4. ^ Matilla, Hugo (2019-02-27). «Основы Kotlin: типы. Any, Unit и Nothing» . Средний . Проверено 16 сентября 2019 .
  5. ^ «Обзор языка программирования Scala» (PDF) . 2006 . Проверено 7 апреля 2014 года .
  6. ^ «Типы - язык программирования Swift (Swift 5.3)» . docs.swift.org . Проверено 2 октября 2020 .
  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

Ссылки [ править ]

  • Пирс, Бенджамин С. (2002). Типы и языки программирования . MIT Press . ISBN 0-262-16209-1.

Внешние ссылки [ править ]

  • c2.com: лучший тип