Jump to content

Нижний тип

В теории типов , теории в рамках математической логики , нижний тип системы типов — это тип, который является подтипом всех других типов. [1]

Там, где такой тип существует, его часто обозначают символом закрепки (⊥).

Связь с пустым типом

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

Когда нижний тип необитаемый , функция, возвращаемый тип которой — нижний, не может возвращать какое-либо значение, даже единственное значение типа единицы .Поэтому в таком языке нижний тип может быть известен как нулевой , никогда или пустой тип , который в соответствии Карри-Ховарда соответствует ложности.

Однако когда нижний тип обитаем, он отличается от пустого типа.

Приложения в области информатики

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

В системах подтипирования нижний тип является подтипом всех типов. [1] Он двойственен верхнему типу , который охватывает все возможные значения в системе.

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

Если нижний тип является обитаемым, его термины обычно соответствуют условиям ошибки, таким как неопределенное поведение, бесконечная рекурсия или неисправимые ошибки.

В ограниченной количественной оценке с нижней границей [1] Пирс говорит, что «Бот» имеет множество применений:

  1. В языке с исключениями естественным типом конструкции подъема является raise ∈Exception -> Bot , и аналогично для других управляющих структур. Интуитивно понятно, что бот — это тип вычислений, которые не возвращают ответ.
  2. Бот полезен при наборе «листовых узлов» полиморфных структур данных. Например, List(Bot) — хороший тип для nil.
  3. Bot — это естественный тип для значения « нулевого указателя » (указатель, который не указывает ни на какой объект) в таких языках, как Java: в Java нулевой тип является универсальным подтипом ссылочных типов . null — единственное значение нулевого типа; и его можно привести к любому ссылочному типу. [2] Однако нулевой тип не является нижним типом, как описано выше, и не является подтипом int и другие примитивные типы.
  4. Система типов, включающая как Top, так и Bot, кажется естественной целью для вывода типа , позволяя фиксировать ограничения на пропущенный параметр типа с помощью пары границ: мы пишем S<:X<:T, чтобы означать «значение X должен лежать где-то между S и T». В такой схеме полностью неограниченный параметр ограничен снизу Bot и сверху Top.

В языках программирования

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

В наиболее часто используемых языках нет способа обозначить нижний тип. Есть несколько заметных исключений.

В Haskell нижний тип называется Void. [3]

В Common Lisp тип NIL, не содержит значений и является подтипом каждого типа. [4] Тип с именем NIL иногда путают с типом с именем NULL, который имеет одно значение, а именно символ NIL сам.

В Scala нижний тип обозначается как Nothing. Помимо использования для функций, которые просто генерируют исключения или иным образом не возвращаются нормально, он также используется для ковариантных параметризованных типов . Например, список Scala является конструктором ковариантного типа, поэтому List[Nothing] является подтипом List[A] для всех типов A. Итак, Scala Nil, объект для обозначения конца списка любого типа принадлежит типу List[Nothing].

В Rust нижний тип называется типом Never и обозначается !. Он присутствует в сигнатуре типа функций, которые гарантированно никогда не возвращаются, например, путем вызова panic!() или зацикливаться навсегда. Это также тип некоторых ключевых слов потока управления, таких как break и return, которые не создают значения, но, тем не менее, могут использоваться в качестве выражений. [5]

На Цейлоне нижний тип — Nothing. [6] Это сравнимо с Nothing в Scala и представляет собой пересечение всех других типов, а также пустое множество.

В Julia нижний тип — Union{}. [7]

В TypeScript нижний тип — never. [8] [9]

В JavaScript с аннотациями Closure Compiler нижний тип — !Null (буквально, ненулевой член Null тип агрегата ).

В PHP нижний тип — never.

В дополнительных аннотациях статического типа Python общий нижний тип — typing.Never (введено в версии 3.11), [10] пока typing.NoReturn (представленный в версии 3.5) может использоваться в качестве возвращаемого типа невозвращающих функций (и дублироваться как общий нижний тип до введения Never). [11]

В Котлине нижний тип — Nothing. [12]

В D нижний тип noreturn[13]

В Dart , начиная с версии 2.12 с обновлением безопасности Sound Null , Never тип был представлен как нижний тип. До этого нижний тип был Null. [14] [15]

См. также

[ редактировать ]
  1. Перейти обратно: Перейти обратно: а б с Пирс, Бенджамин К. (1997). «Ограниченная количественная оценка с низом» . Технический отчет CSCI Университета Индианы (492): 1.
  2. ^ «Раздел 4.1: Виды типов и значений» . Спецификация языка Java (3-е изд.).
  3. ^ «Данные.Пустота» . Хакадж . Проверено 20 сентября 2023 г.
  4. ^ «Тип НИЛ» . Common Lisp HyperSpec . Проверено 25 октября 2022 г.
  5. ^ «Примитивный тип никогда» . Документация стандартной библиотеки Rust . Проверено 24 сентября 2020 г.
  6. ^ «Глава 3. Типовая система — 3.2.5. Нижний тип» . Цейлонский язык . Красная шляпа, Inc. Проверено 19 февраля 2017 г.
  7. ^ «Основы — язык Julia» , Документация по языку программирования Julia , получено 13 августа 2021 г.
  8. ^ Тип «никогда», Примечания к выпуску TypeScript 2.0 , Microsoft, 06 октября 2016 г. , получено 1 ноября 2019 г.
  9. ^ Тип Never, Примечания к выпуску TypeScript 2.0, исходный код , Microsoft, 06 октября 2016 г. , получено 1 ноября 2019 г.
  10. ^ «Ввод текста — Поддержка подсказок типов — Документация Python 3.12.0a0» . docs.python.org . Проверено 2 марта 2024 г.
  11. ^ typing.NoReturn, typing — Поддержка подсказок по типам, документация Python , Python Software Foundation , получено 2 марта 2024 г.
  12. ^ Ничего , получено 15 мая 2020 г.
  13. ^ «Типы — язык программирования D» . dlang.org . Проверено 20 октября 2022 г.
  14. ^ Понимание нулевой безопасности — верх и низ , получено 13 апреля 2022 г.
  15. ^ Понимание нулевой безопасности — никогда для недостижимого кода , получено 13 апреля 2022 г.

Дальнейшее чтение

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 8308a998df371f5803d44614cf9b4d56__1709401380
URL1:https://arc.ask3.ru/arc/aa/83/56/8308a998df371f5803d44614cf9b4d56.html
Заголовок, (Title) документа по адресу, URL1:
Bottom type - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)