Нижний тип - Bottom type
В теория типов, теория внутри математическая логика, то нижний тип - это тип, не имеющий значений. Его еще называют нуль или же пустой тип, и иногда обозначается вверх галс (⊥) символ.
Функция с типом возврата bottom не может возвращать никакого значения, даже нулевого размера. тип единицы. Следовательно, функция, тип возврата которой является нижним типом, не может вернуться. в Переписка Карри – Ховарда, нижний тип соответствует лжи.
Приложения для информатики
В системах подтипов нижний тип является подтипом всех типов.[1] (Однако обратное неверно - a подтип всех типов не обязательно является нижним типом.) Он используется для представления возвращаемого типа функции, которая не возвращает значение: например, та, которая зацикливается бесконечно, сигнализирует об исключении или завершается.
Поскольку нижний тип используется для обозначения отсутствия нормального возврата, он обычно не имеет значений. Это контрастирует с верхний тип, который охватывает все возможные значения в системе, и тип единицы, который имеет ровно одно значение.
Нижний тип часто используется для следующих целей:
- Чтобы сигнализировать, что функция или вычисление расходится; другими словами, не возвращает результат вызывающей стороне. (Это не обязательно означает, что программа не может завершиться; подпрограмма может завершиться без возврата к вызывающей стороне или выйти с помощью других средств, таких как продолжение.)
- В сочетании с Переписка Карри – Ховарда интерпретация дна как "ложность", это дает вычислительную интерпретацию неконструктивная логика с точки зрения поток управления операторы.[2]
- Как указание на ошибку; это использование в основном встречается в теоретических языках, где различение ошибок не важно. В производственных языках программирования обычно используются другие методы, например типы опционов (включая помеченные указатели ) или же Обработка исключений.
В Ограниченная количественная оценка с нижним пределом,[1] Пирс говорит, что «Бот» имеет множество применений:
- На языке с исключения, естественным типом конструкции повышения является поднять ∈ исключение -> Бот, и аналогично для других структур управления. Интуитивно понятно, что Бот - это тип вычислений, которые не возвращают ответа.
- Бот полезен при вводе «листовых узлов» полиморфных структур данных. Например, List (Bot) - хороший тип для nil.
- Бот - естественный тип для "нулевой указатель "значение (указатель, который не указывает на какой-либо объект) языков, таких как Java: в Ява, то нулевой тип универсальный подтип ссылочных типов.
ноль
- единственное значение нулевого типа; и его можно привести к любому ссылочному типу.[3] Однако нулевой тип не удовлетворяет всем свойствам нижнего типа, как описано выше, поскольку нижние типы не могут иметь никаких возможных значений, а нулевой тип имеет значениеноль
. - Система типов, включающая как 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]
Смотрите также
Рекомендации
- ^ а б Пирс, Бенджамин С. (1997). «Ограниченная количественная оценка с дном». CiteSeerX 10.1.1.17.9230. Цитировать журнал требует
| журнал =
(помощь) - ^ Гриффин, Тимоти Г. (1990). «Понятие управления формулами как типами». Конф. Рекорд 17-го ежегодного симпозиума ACM. по принципам языков программирования, POPL '90, Сан-Франциско, Калифорния, США, 17-19 января 1990 г.. С. 47–57.
- ^ «Раздел 4.1. Виды типов и значений». Спецификация языка Java (3-е изд.).
- ^ «Примитивный тип никогда». Документация стандартной библиотеки Rust. Получено 2020-09-24.
- ^ «Глава 3. Система типов - 3.2.5. Тип нижний». Цейлонский язык. Red Hat, Inc. Получено 2017-02-19.
- ^ Примечания к выпуску TypeScript 2.0, Microsoft, 2016-10-06, получено 2019-11-01
- ^ Never type, примечания к выпуску TypeScript 2.0, исходный код, Microsoft, 2016-10-06, получено 2019-11-01
- ^ typing.NoReturn, typing - Supprot для подсказок типов, документация Python, Python Software Foundation, получено 2020-02-25
- ^ Ничего, получено 2020-05-15