Void safety
Void safety (anche nota come null safety) è una garanzia che viene posta nei linguaggi orientati agli oggetti per garantire che nessun riferimento a oggetto abbia un puntatore nullo (o void).
Nei linguaggi orientati agli oggetti, l'accesso agli oggetti è ottenuto tramite riferimenti (o, in modo equivalente, puntatori). Una chiamata tipica è qualcosa nella forma:
x.f(a, ...)
dove f denota un'operazione e x denota un riferimento a qualche oggetto. Durante l'esecuzione, tuttavia, un riferimento può essere void o null ("nullo" in italiano). In questi casi, la chiamata diventa una void call (chiamata "vuota" o "null"), portando a un'eccezione a run-time, causando spesso una terminazione inattesa del programma.
Void (o null) safety è una garanzia (a compile-time) che permette di verificare che una chiamata nulla (o void) non venga mai effettuata.
Storia
[modifica | modifica wikitesto]In un talk del 2009, Tony Hoare ha definito l'invenzione del puntatore null un "errore" quando ha disegnato il linguaggio ALGOL W:
[1]»
Bertrand Meyer ha introdotto il termine "void safety".[2]
Nei linguaggi di programmazione
[modifica | modifica wikitesto]Un tentativo iniziale per garantire la void safety è stato fatto durante il design del linguaggio di programmazione Self.
Il linguaggio Eiffel è void-safe secondo i suoi standard ISO-ECMA; il meccanismo di void-safety è implementato in EiffelStudio dalla versione 6.1 e utilizzando una sintassi moderna dalla versione 6.4.
Il linguaggio Spec#, un linguaggio di ricerca creato da Microsoft Research, ha la nozione di "non-nullable type" per rispondere alla void safety. Il linguaggio F#, un linguaggio funzionale creato da Microsoft Research che gira sul framework .NET, è void-safe ad eccezione quando deve interfacciarsi con altri linguaggi .NET.[3]
La null safety basata sugli union types
[modifica | modifica wikitesto]Dal 2011 vari linguaggi supportano gli union type e gli intersection type, che possono essere utilizzati per trovare possibili puntatori nulli a compile-time, utilizzando una classe speciale Null dove il valore null è la sua unica istanza.
La null safety basata sui tipi è apparsa per la prima volta nel linguaggio di programmazione Ceylon, seguita subito dopo da TypeScript.
Il linguaggio C# implementa i controlli di null-safety a compile-time dalla versione 8. Tuttavia, per rimanere compatibile con le versioni precedenti del linguaggio, è possibile attivare la funzionalità su uno specifico progetto o anche solo su un file.[4]
Nel linguaggio Dart la null safety è implementata dalla versione 2.0, da agosto 2018.[5][6]
Altri linguaggi che usano tipi null-safe di default includono Kotlin sviluppato da JetBrains,[7] Rust,[8] e Swift prodotto da Apple.
Note
[modifica | modifica wikitesto]- ^ C.A.R. Hoare: Null References: The Billion Dollar Mistake, abstract of a talk at QCon London, 9–12 March 2009, available online
- ^ Bertrand Meyer: Attached Types and their Application to Three Open Problems of Object-Oriented Programming, in ECOOP 2005 (Proceedings of European Conference on Object-Oriented Programming, Edinburgh, 25–29 July 2005), ed. Andrew Black, Lecture Notes in Computer Science 3586, Springer Verlag, 2005, pages 1-32, also available online
- ^ Don Syme, Quote of the Week: "What can C# do that F# cannot?", su blogs.msdn.microsoft.com. URL consultato il 7 settembre 2018.
- ^ Nullable reference types | Microsoft Docs, su docs.microsoft.com. URL consultato il 12 marzo 2021.
- ^ Kevin Moore, Announcing Dart 2 Stable and the Dart Web Platform, su Dart, 7 agosto 2018. URL consultato l'8 agosto 2018.
- ^ Sound null safety | Dart, su dart.dev. URL consultato il 12 marzo 2021.
- ^ Null safety—Kotlin, su kotlinlang.org. URL consultato il 12 marzo 2021.
- ^ Defining an Enum - The Rust Programming Language, su doc.rust-lang.org. URL consultato il 26 giugno 2021.