Articulo de referencia

Tipo de singularidad

En informática , un tipo único garantiza que un objeto se utilice de forma monohilo , con una sola referencia como máximo. Si un valor tiene un tipo único, una función aplicada ...

En informática , un tipo único garantiza que un objeto se utilice de forma monohilo , con una sola referencia como máximo. Si un valor tiene un tipo único, una función aplicada a él puede optimizarse para actualizar el valor directamente en el código objeto . Estas actualizaciones directas mejoran la eficiencia de los lenguajes funcionales , manteniendo la transparencia referencial . Los tipos únicos también pueden utilizarse para integrar la programación funcional e imperativa.

Introducción

La tipificación de unicidad se explica mejor con un ejemplo. Consideremos una función readLineque lee la siguiente línea de texto de un archivo determinado:

La función readLine(File f) devuelve una cadena de caracteres. línea de retorno donde Cadena línea = doImperativeReadLineSystemCall(f) fin fin 

Ahora doImperativeReadLineSystemCalllee la siguiente línea del archivo usando una llamada al sistema a nivel del sistema operativo que tiene el efecto secundario de cambiar la posición actual en el archivo. Pero esto viola la transparencia referencial porque llamarla varias veces con el mismo argumento devolverá resultados diferentes cada vez a medida que se mueve la posición actual en el archivo. Esto a su vez hace que viole la transparencia referencial porque llama a .readLinedoImperativeReadLineSystemCall

Sin embargo, utilizando la tipificación de unicidad, podemos construir una nueva versión que readLinesea referencialmente transparente aunque esté construida sobre una función que no sea referencialmente transparente:

La función readLine2(archivo único f) devuelve (archivo único, cadena). devolver (diferenteF, línea) donde Cadena línea = doImperativeReadLineSystemCall(f) Archivo diferenteF = nuevoArchivoDesdeArchivoExistente(f) fin fin 

La uniquedeclaración especifica que el tipo de fes único; es decir, que fnunca más podrá ser referenciado por quien llama a readLine2después de readLine2que regrese, y esta restricción es impuesta por el sistema de tipos . Y dado que readLine2no devuelve fa sí mismo, sino un nuevo objeto de archivo diferente differentF, esto significa que es imposible que readLine2se vuelva a llamar con fcomo argumento, preservando así la transparencia referencial al tiempo que se permiten efectos secundarios.

Lenguajes de programación

Los tipos de unicidad se implementan en lenguajes de programación funcional como Clean , Mercury , SAC e Idris . En ocasiones, se utilizan para realizar operaciones de entrada/salida en lenguajes funcionales en lugar de mónadas .

Se ha desarrollado una extensión de compilador para el lenguaje de programación Scala que utiliza anotaciones para manejar la unicidad en el contexto del paso de mensajes entre actores. [ 1 ]

Relación con la tipificación lineal

Un tipo único es muy similar a un tipo lineal , hasta el punto de que los términos se usan a menudo indistintamente, pero de hecho existe una distinción: la tipificación lineal real permite convertir un valor no lineal a una forma lineal, manteniendo al mismo tiempo múltiples referencias al mismo. La unicidad garantiza que un valor no tenga otras referencias, mientras que la linealidad garantiza que no se puedan hacer más referencias a un valor. [ 2 ]

La linealidad y la unicidad pueden considerarse particularmente distintas en relación con las modalidades de no linealidad y no unicidad, pero también pueden unificarse en un único sistema de tipos. [ 3 ]

Véase también

Referencias

  1. Haller, P.; Odersky, M. ( 2010), "Capacidades para la unicidad y el préstamo", ECOOP 2010—Programación orientada a objetos (PDF) , págs. 354–378 
  2. Wadler, Philip (17–19 de junio de 1991). ¿Tiene utilidad la lógica lineal? Simposio ACM SIGPLAN sobre evaluación parcial y manipulación de programas basada en semántica (PEPM '91). págs. 255–273 . CiteSeerX 10.1.1.26.4202 . doi : 10.1145/115865.115894 . ISBN   0-89791-433-3.
  3. Marshall, Daniel; Vollmer, Michael; Orchard, Dominic (7 de abril de 2022). Linealidad y unicidad: una Entente Cordiale . ESOP'22. doi : 10.1007/978-3-030-99336-8_13 .
  • Bibliografía sobre lógica lineal
  • Tipografía única simplificada
Obtenido de " https://en.wikipedia.org/w/index.php?title=Uniqueness_type&oldid=1293988701 "