La seguridad contra valores nulos (también conocida como seguridad contra valores nulos ) es una garantía dentro de un lenguaje de programación orientado a objetos de que ninguna referencia a objetos tendrá valores nulos o vacíos .
En los lenguajes orientados a objetos, el acceso a los objetos se logra mediante referencias (o, equivalentemente, punteros ). Una llamada típica tiene la forma , donde denota una operación y denota una referencia a algún objeto. Sin embargo, en tiempo de ejecución, una referencia puede ser (o ). En tales casos, la llamada anterior será una llamada void , lo que provocará una excepción en tiempo de ejecución , que a menudo resulta en la terminación anormal del programa.x.f(a,...)fxvoidnull
La seguridad de void es una garantía estática (en tiempo de compilación) de que nunca se producirá una llamada a void.
Historia
En una charla de 2009, Tony Hoare atribuyó la invención del puntero nulo a su diseño del lenguaje ALGOL W y lo calificó de "error":
Lo llamo mi error de mil millones de dólares. Fue la invención de la referencia nula en 1965. En aquel entonces, estaba diseñando el primer sistema de tipos completo para referencias en un lenguaje orientado a objetos (ALGOL W). Mi objetivo era garantizar que todo uso de referencias fuera absolutamente seguro, con comprobaciones realizadas automáticamente por el compilador. Pero no pude resistir la tentación de incluir una referencia nula, simplemente porque era muy fácil de implementar. Esto ha dado lugar a innumerables errores, vulnerabilidades y fallos del sistema, que probablemente han causado daños y perjuicios por valor de mil millones de dólares en los últimos cuarenta años. [ 1 ]
Bertrand Meyer introdujo el término "seguridad de vacío". [ 2 ]
En lenguajes de programación
Un primer intento de garantizar la seguridad frente a los vacíos fue el diseño del lenguaje de programación Self .
El lenguaje Eiffel es seguro contra valores nulos según su estándar ISO - ECMA ; el mecanismo de seguridad contra valores nulos está implementado en EiffelStudio a partir de la versión 6.1 y utiliza una sintaxis moderna a partir de la versión 6.4 .
El lenguaje Spec#, un lenguaje de investigación de Microsoft Research, tiene una noción de "tipo no anulable" que aborda la seguridad de void. El lenguaje F# , un lenguaje funcional de Microsoft Research que se ejecuta en el marco .NET, es seguro frente a void excepto cuando interactúa con otros lenguajes .NET. [ 3 ]
Seguridad nula basada en tipos de unión
Desde 2011, varios lenguajes admiten tipos de unión y tipos de intersección , que pueden utilizarse para detectar posibles punteros nulos en tiempo de compilación, utilizando una clase especial Null de la cual el valor null es su única instancia.
La seguridad contra valores nulos basada en tipos apareció primero en Ceylon , seguida poco después por TypeScript .
El lenguaje C# implementa la comprobación de seguridad de valores nulos en tiempo de compilación desde la versión 8. Sin embargo, para mantener la compatibilidad con versiones anteriores del lenguaje, esta característica es opcional y se puede activar por proyecto o por archivo. [ 4 ]
El lenguaje Dart lo implementó desde su versión 2.0, en agosto de 2018 [ 5 ] [ 6 ].
Otros lenguajes que utilizan tipos seguros contra valores nulos por defecto incluyen Kotlin de JetBrains , [ 7 ] Rust , [ 8 ] y Swift de Apple .
Véase también
Referencias
- ↑ CAR Hoare: Referencias nulas: El error de mil millones de dólares , resumen de una charla en QCon Londres, 9-12 de marzo de 2009, disponible en línea.
- ↑ Bertrand Meyer: Tipos adjuntos y su aplicación a tres problemas abiertos de la programación orientada a objetos , en ECOOP 2005 (Actas de la Conferencia Europea sobre Programación Orientada a Objetos, Edimburgo, 25-29 de julio de 2005) , ed. Andrew Black, Lecture Notes in Computer Science 3586, Springer Verlag, 2005, páginas 1-32, también disponible en línea.
- ↑ Syme, Don. "Cita de la semana: "¿Qué puede hacer Do# que Fa# no pueda?"" . Consultado el 7 de septiembre de 2018 .
- ↑ "Tipos de referencia anulables | Microsoft Docs" . Consultado el 12 de marzo de 2021 .
- ↑ Moore, Kevin (2018-08-07). "Anuncio de Dart 2 Stable y la plataforma web de Dart" . Dart . Recuperado el 2018-08-08 .
- ↑ "Sonido nulo seguridad | Dart" . Consultado el 12 de marzo de 2021 .
- ↑ "Seguridad nula—Kotlin" . Consultado el 12 de marzo de 2021 .
- ↑ "Definiendo un Enum - El lenguaje de programación Rust" . doc.rust-lang.org . Consultado el 26 de junio de 2021 .
- Programación orientada a objetos
- esbozos de informática