stringtranslate.com

Tipo de fondo

En la teoría de tipos , una teoría dentro de la lógica matemática , el tipo base de un sistema de tipos es el tipo que es un subtipo de todos los demás tipos. [1]

Cuando existe dicho tipo, a menudo se representa con el símbolo de tachuela hacia arriba (⊥).

Relación con el tipo vacío

Cuando el tipo bottom está deshabitado , una función cuyo tipo de retorno es bottom no puede devolver ningún valor, ni siquiera el valor único de un tipo de unidad . En un lenguaje de este tipo, el tipo bottom puede, por lo tanto, conocerse como el tipo cero , nunca o vacío que, en la correspondencia de Curry–Howard , corresponde a la falsedad.

Sin embargo, cuando el tipo inferior está habitado, entonces es diferente del tipo vacío.

Aplicaciones de la informática

En los sistemas de subtipificación, el tipo inferior es un subtipo de todos los tipos. [1] Es dual al tipo superior , que abarca todos los valores posibles en un sistema.

Si un sistema de tipos es sólido , el tipo inferior está deshabitado y un término de tipo inferior representa una contradicción lógica. En tales sistemas, normalmente no se hace distinción entre el tipo inferior y el tipo vacío , y los términos pueden usarse indistintamente.

Si el tipo inferior está habitado, sus términos normalmente corresponden a condiciones de error, como comportamiento indefinido, recursión infinita o errores irrecuperables.

En Cuantificación limitada con Bottom , [1] Pierce dice que "Bot" tiene muchos usos:

  1. En un lenguaje con excepciones , un tipo natural para la construcción raise es raise ∈ exception -> Bot y lo mismo ocurre con otras estructuras de control. Intuitivamente, Bot es el tipo de cálculo que no devuelve una respuesta.
  2. Bot es útil para tipificar los "nodos de hoja" de estructuras de datos polimórficas. Por ejemplo, List(Bot) es un buen tipo para nil.
  3. Bot es un tipo natural para el valor de " puntero nulo " (un puntero que no apunta a ningún objeto) de lenguajes como Java: en Java , el tipo nulo es el subtipo universal de los tipos de referencia . nulles el único valor del tipo nulo; y se puede convertir a cualquier tipo de referencia. [2] Sin embargo, el tipo nulo no es un tipo inferior como se describió anteriormente, no es un subtipo de inty otros tipos primitivos.
  4. Un sistema de tipos que incluya tanto Top como Bot parece ser un objetivo natural para la inferencia de tipos , permitiendo que las restricciones sobre un parámetro de tipo omitido sean capturadas por un par de límites: escribimos S<:X<:T para significar "el valor de X debe estar en algún lugar entre S y T". En un esquema de este tipo, un parámetro completamente libre de restricciones está limitado por debajo por Bot y por encima por Top.

En lenguajes de programación

La mayoría de los lenguajes más utilizados no tienen una forma de indicar el tipo de base. Hay algunas excepciones notables.

En Haskell , el tipo inferior se llama Void. [3]

En Common Lisp , el tipo NIL, no contiene valores y es un subtipo de cada tipo. [4] El tipo nombrado NILa veces se confunde con el tipo nombrado NULL, que tiene un valor, es decir, el símbolo NILmismo.

En Scala , el tipo inferior se denota como Nothing. Además de su uso para funciones que simplemente lanzan excepciones o que no retornan normalmente, también se usa para tipos parametrizados covariantes . Por ejemplo, List de Scala es un constructor de tipo covariante, por lo que es un subtipo de para todos los tipos A. Por lo tanto , , el objeto para marcar el final de una lista de cualquier tipo, pertenece al tipo .List[Nothing]List[A]NilList[Nothing]

En Rust , el tipo inferior se denomina tipo never y se denota por !. Está presente en la firma de tipo de funciones que se garantiza que nunca volverán, por ejemplo, al llamarlas panic!()o realizar un bucle indefinidamente. También es el tipo de ciertas palabras clave de flujo de control, como breakand return, que no producen un valor pero que, no obstante, se pueden usar como expresiones. [5]

En Ceilán , el tipo inferior es Nothing. [6] Es comparable a Nothingen Scala y representa la intersección de todos los demás tipos, así como un conjunto vacío.

En Julia , el tipo inferior es Union{}. [7]

En TypeScript , el tipo inferior es never. [8] [9]

En JavaScript con anotaciones del compilador de cierre , el tipo inferior es !Null(literalmente, un miembro no nulo del Null tipo de unidad ).

En PHP , el tipo inferior es never.

En las anotaciones de tipo estático opcionales de Pythontyping.Never , el tipo inferior general es (introducido en la versión 3.11), [10] mientras que typing.NoReturn(introducido en la versión 3.5) se puede utilizar como el tipo de retorno de funciones que no retornan específicamente (y se duplicó como el tipo inferior general antes de la introducción de Never). [11]

En Kotlin , el tipo inferior es Nothing. [12]

En D , el tipo inferior es noreturn. [13]

En Dart , desde la versión 2.12 con la actualización de seguridad de nulidad de sonido, el Nevertipo se introdujo como el tipo inferior. Antes de eso, el tipo inferior solía ser Null. [14] [15]

Véase también

Referencias

  1. ^ abc Pierce, Benjamin C. (1997). "Cuantificación limitada con base". Informe técnico del CSCI de la Universidad de Indiana (492): 1.
  2. ^ "Sección 4.1: Los tipos y valores". Especificación del lenguaje Java (3.ª ed.).
  3. ^ "Data.Void". Hackage . Consultado el 20 de septiembre de 2023 .
  4. ^ "Tipo NIL". Common Lisp HyperSpec . Consultado el 25 de octubre de 2022 .
  5. ^ "Tipo primitivo nunca". Documentación de la biblioteca estándar de Rust . Consultado el 24 de septiembre de 2020 .
  6. ^ "Capítulo 3. Sistema de tipos — 3.2.5. El tipo de base". The Ceylon Language . Red Hat, Inc . Consultado el 19 de febrero de 2017 .
  7. ^ "Aspectos básicos: el lenguaje Julia", Documentación del lenguaje de programación Julia , consultado el 13 de agosto de 2021
  8. ^ The never type, Notas de la versión de TypeScript 2.0, Microsoft, 2016-10-06 , consultado el 2019-11-01
  9. ^ The never type, notas de la versión de TypeScript 2.0, código fuente, Microsoft, 2016-10-06 , consultado el 2019-11-01
  10. ^ "Tipo de escritura: compatibilidad con sugerencias de tipo de escritura: documentación de Python 3.12.0a0". docs.python.org . Consultado el 2 de marzo de 2024 .
  11. ^ Typing.NoReturn, Typing — Soporte para sugerencias de tipos, documentación de Python, Python Software Foundation , consultado el 2 de marzo de 2024
  12. ^ Nada , recuperado el 15 de mayo de 2020
  13. ^ "Tipos - Lenguaje de programación D". dlang.org . Consultado el 20 de octubre de 2022 .
  14. ^ Comprensión de la seguridad nula: parte superior e inferior , consultado el 13 de abril de 2022
  15. ^ Entendiendo la seguridad nula - nunca para código inalcanzable , recuperado el 13 de abril de 2022

Lectura adicional