Jump to content

Тип верха

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

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

[ редактировать ]

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

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

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

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

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

Большинство объектно-ориентированных языков программирования включают универсальный базовый класс :
Имя Языки
ObjectSmalltalk , JavaScript , Ruby (до 1.9.2), [1] и некоторые другие.
java.lang.ObjectЯва . Часто пишется без префикса пакета, например Object. Кроме того, это не супертип примитивных типов; однако, начиная с Java 1.5, автоупаковка позволяет неявное или явное преобразование типа примитивного значения в Object, например, ((Object)42).toString()
System.Object[2] C# , Visual Basic .NET и другие .NET Framework. языки
std::anyC++ начиная с C++17
objectPython с момента унификации типа/класса [3] в версии 2.2 (только объекты нового стиля; в объектах старого стиля в 2.x этот базовый класс отсутствует). Новый модуль набора текста представляет тип Any который совместим с любым типом и наоборот
TObjectОбъектный Паскаль
tLisp , многие диалекты, такие как Common Lisp
Any?Котлин [4]
AnyСкала , [5] Быстрый , [6] Юля , [7] Питон [8]
ANYЭйфелева [9]
UNIVERSALПерл 5
VariantVisual Basic до версии 6, D [10]
interface{}Идти
BasicObjectRuby (версия 1.9.2 и выше)
any и unknown[11] TypeScript unknown был представлен в версии 3.0 [12] )
mixedPHP (начиная с версии 8.0)

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

  • С++ . Указатель на тип void может принимать любой указатель, не являющийся функцией, даже если сам тип void является не универсальным типом, а типом единицы . Начиная с C++17, стандартная библиотека предоставляет верхний тип. std::any.
  • Цель-С . Можно создать новый базовый класс, не указывая родительский класс для класса, хотя это весьма необычно. 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 {}, который не имеет методов, но все равно может быть преобразован обратно к более конкретному типу.

В логике

[ редактировать ]

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

См. также

[ редактировать ]

Примечания

[ редактировать ]
  1. ^ «Класс: BasicObject (Ruby 1.9.2)» . Проверено 7 апреля 2014 г.
  2. ^ Система.Объект
  3. ^ Объединение типа/класса Python
  4. ^ Матилла, Хьюго (27 февраля 2019 г.). «Основы Kotlin: типы. Any, Unit и Nothing» . Середина . Проверено 16 сентября 2019 г.
  5. ^ «Обзор языка программирования Scala» (PDF) . 2006 год . Проверено 7 апреля 2014 г.
  6. ^ «Типы — язык программирования Swift (Swift 5.3)» . docs.swift.org . Проверено 2 ноября 2020 г.
  7. ^ «Типы · Язык Джулии» . Проверено 15 мая 2021 г.
  8. ^ «Любой тип» . 2022 . Проверено 26 октября 2022 г.
  9. ^ «Стандарт ECMA-367. Eiffel: язык анализа, проектирования и программирования» (PDF) . 2006 год . Проверено 10 марта 2016 г.
  10. ^ «std.variant — Язык программирования D» . dlang.org . Проверено 29 октября 2022 г.
  11. ^ «Верхние типы «любой» и «неизвестный» в TypeScript» .
  12. ^ «Неизвестный тип в TypeScript» . 15 мая 2019 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: c0fd7a6564a8e5b8d4e85625c2ad4e3f__1717363620
URL1:https://arc.ask3.ru/arc/aa/c0/3f/c0fd7a6564a8e5b8d4e85625c2ad4e3f.html
Заголовок, (Title) документа по адресу, URL1:
Top type - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)