stringtranslate.com

Seguridad del vacío

La seguridad nula (también conocida como seguridad nula ) es una garantía dentro de un lenguaje de programación orientado a objetos de que ninguna referencia de objeto 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:

xf(a, ...)

donde f denota una operación y x denota una referencia a algún objeto. Sin embargo, en el momento de la ejecución, una referencia puede ser nula (o void ). En tales casos, la llamada anterior será una llamada void , lo que dará lugar a una excepción en tiempo de ejecución , que a menudo da como resultado la finalización anormal del programa.

La seguridad de vacío es una garantía estática (en tiempo de compilación) de que nunca surgirá una llamada de vacío.

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 ese momento, estaba diseñando el primer sistema de tipos integral para referencias en un lenguaje orientado a objetos (ALGOL W). Mi objetivo era asegurar que todo uso de referencias fuera absolutamente seguro, con comprobaciones realizadas automáticamente por el compilador. Pero no pude resistir la tentación de poner una referencia nula, simplemente porque era muy fácil de implementar. Esto ha llevado a innumerables errores, vulnerabilidades y fallas del sistema, que probablemente han causado mil millones de dólares de dolor y daños en los últimos cuarenta años. [1]

Bertrand Meyer introdujo el término "seguridad en el vacío". [2]

En lenguajes de programación

Un primer intento de garantizar la seguridad del vacío fue el diseño del lenguaje de programación Self .

El lenguaje Eiffel es seguro contra vacíos según su estándar ISO - ECMA ; el mecanismo de seguridad contra vacíos se implementa 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 nulo" que aborda la seguridad frente a los nulos. El lenguaje F# , un lenguaje funcional de Microsoft Research que se ejecuta en el marco .NET, es seguro frente a los nulos, excepto cuando interopera 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 usarse para detectar posibles punteros nulos en tiempo de compilación, utilizando una clase especial Null cuyo valor null es su instancia única.

La seguridad nula basada en tipos apareció primero en Ceylon , seguida pronto 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, la función se habilita por proyecto o por archivo. [4]

El lenguaje Dart de Google lo implementa desde su versión 2.0, en agosto de 2018 [5] [6]

Otros lenguajes que utilizan tipos seguros para valores nulos de forma predeterminada incluyen Kotlin de JetBrains , [7] Rust [8] y Swift de Apple .

Véase también

Referencias

  1. ^ CAR Hoare: Null References: The Billion Dollar Mistake , resumen de una charla en QCon Londres, 9-12 de marzo de 2009, disponible en línea
  2. ^ Bertrand Meyer: Attached Types and their Application to Three Open Problems of Object-Oriented Programming , 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
  3. ^ Syme, Don. "Cita de la semana: "¿Qué puede hacer C# que F# no puede?"" . Consultado el 7 de septiembre de 2018 .
  4. ^ "Tipos de referencia que aceptan valores NULL | Microsoft Docs" . Consultado el 12 de marzo de 2021 .
  5. ^ Moore, Kevin (7 de agosto de 2018). "Anuncio de Dart 2 Stable y la plataforma web Dart". Dart . Consultado el 8 de agosto de 2018 .
  6. ^ "Seguridad de sonido nulo | Dart" . Consultado el 12 de marzo de 2021 .
  7. ^ "Seguridad nula: Kotlin" . Consultado el 12 de marzo de 2021 .
  8. ^ "Definición de una enumeración: el lenguaje de programación Rust". doc.rust-lang.org . Consultado el 26 de junio de 2021 .