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 In un talk del 2009, Tony Hoare ha definito l'invenzione del puntatore null un "errore" quando ha disegnato il linguaggio ALGOL W:

Bertrand Meyer ha introdotto il termine "void safety".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

Nei linguaggi di programmazione 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.

La null safety basata sugli union types 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.

Nel linguaggio Dart la null safety è implementata dalla versione 2.0, da agosto 2018.

Altri linguaggi che usano tipi null-safe di default includono Kotlin sviluppato da JetBrains, Rust, e Swift prodotto da Apple.

Note

Categoria:Programmazione orientata agli oggetti