Нижний тип - Bottom type

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

Функция с типом возврата bottom не может возвращать никакого значения, даже нулевого размера. тип единицы. Следовательно, функция, тип возврата которой является нижним типом, не может вернуться. в Переписка Карри – Ховарда, нижний тип соответствует лжи.

Приложения для информатики

В системах подтипов нижний тип является подтипом всех типов.[1] (Однако обратное неверно - a подтип всех типов не обязательно является нижним типом.) Он используется для представления возвращаемого типа функции, которая не возвращает значение: например, та, которая зацикливается бесконечно, сигнализирует об исключении или завершается.

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

Нижний тип часто используется для следующих целей:

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

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

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

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

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

Начиная с Haskell2010, Haskell поддерживает пустые типы данных. Таким образом, это позволяет определение данные пустые (без конструкторов). Тип Пустой не совсем пуст, так как он содержит программы без завершения и неопределенный постоянный. В неопределенный Константа часто используется, когда вы хотите, чтобы что-то имело пустой тип, потому что неопределенный соответствует любому типу (это своего рода «подтип» всех типов) и пытается оценить неопределенный вызовет прерывание программы, поэтому она никогда не вернет ответ.

В Common Lisp символ Ноль, среди прочего, это также имя типа, не имеющего значений. Это дополнение Т который является верхним типом. Тип с именем Ноль иногда путают с типом с именем НОЛЬ, имеющий одно значение, а именно символ Ноль сам.

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

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

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

В Машинопись, нижний тип никогда.[6][7]

В Python, нижний тип набор. Нет возврата.[8]

В Котлин, нижний тип Ничего.[9]

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

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

  1. ^ а б Пирс, Бенджамин С. (1997). «Ограниченная количественная оценка с дном». CiteSeerX  10.1.1.17.9230. Цитировать журнал требует | журнал = (помощь)
  2. ^ Гриффин, Тимоти Г. (1990). «Понятие управления формулами как типами». Конф. Рекорд 17-го ежегодного симпозиума ACM. по принципам языков программирования, POPL '90, Сан-Франциско, Калифорния, США, 17-19 января 1990 г.. С. 47–57.
  3. ^ «Раздел 4.1. Виды типов и значений». Спецификация языка Java (3-е изд.).
  4. ^ «Примитивный тип никогда». Документация стандартной библиотеки Rust. Получено 2020-09-24.
  5. ^ «Глава 3. Система типов - 3.2.5. Тип нижний». Цейлонский язык. Red Hat, Inc. Получено 2017-02-19.
  6. ^ Примечания к выпуску TypeScript 2.0, Microsoft, 2016-10-06, получено 2019-11-01
  7. ^ Never type, примечания к выпуску TypeScript 2.0, исходный код, Microsoft, 2016-10-06, получено 2019-11-01
  8. ^ typing.NoReturn, typing - Supprot для подсказок типов, документация Python, Python Software Foundation, получено 2020-02-25
  9. ^ Ничего, получено 2020-05-15

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