In informatica, con i termini future, promise e delay ci si riferisce a particolari costrutti usati nella sincronizzazione dell'esecuzione dei programmi scritti con alcuni linguaggi di programmazione di tipo concorrente. Questo costrutto fa uso di una sorta di segnaposto, un oggetto che prende il posto di un valore che è in attesa di essere restituito da un'operazione asincrona. Su questo oggetto vengono definite delle operazioni da effettuare quando l'operazione asincrona sarà stata completata.
Il concetto di promise fu proposto nel 1976 da Daniel P. Friedman e David Wise,[1]
e da Peter Hibbard che lo chiamò eventual.[2]
Il concetto abbastanza simile di future fu introdotto nel 1977 in una pubblicazione di Henry Baker e Carl Hewitt.[3] Sebbene i due termini vengano spesso usati interscambiabilmente, esistono alcune differenze.[4]
Questo tipo di costrutto è implementabile in diversi linguaggi, come JavaScript,[5] Java,[6] Scala,[4] C# (a partire da .NET 4.5, con le parole chiave async
e await
),[7] Python (da 3.2 con la libreria concurrent.futures
[8] e da 3.5 con async
e await
[9]) e molti altri.
- ^ (EN) Daniel Friedman e David Wise, The Impact of Applicative Programming on Multiprocessing, International Conference on Parallel Processing, 1976, pp. 263–272..
- ^ (EN) Peter Hibbard, Parallel Processing Facilities, New Directions in Algorithmic Languages, (ed.) Stephen A. Schuman, IRIA, 1976., 1976.
- ^ (EN) Henry Baker e Carl Hewitt, The Incremental Garbage Collection of Processes, Proceedings of the Symposium on Artificial Intelligence Programming Languages,, ACM Sigplan Notices 12, 8, August 1977, pp. 55–59. URL consultato il 22 maggio 2017 (archiviato dall'url originale il 4 luglio 2008).
- ^ a b (EN) Philipp Haller, Aleksandar Prokopec, Heather Miller, Viktor Klang, Roland Kuhn, Vojin Jovanovic, Futures and Promises, su Scala Documentation, EPFL. URL consultato il 22 maggio 2017 (archiviato dall'url originale il 19 maggio 2017).
- ^ Andrea Chiarelli, Il pattern Promise per le operazioni asincrone, su html.it, 20 maggio 2014. URL consultato il 22 maggio 2017 (archiviato il 22 maggio 2017).
- ^ (EN) Future (Java Platform SE 8), su docs.oracle.com, Oracle Corporation. URL consultato il 22 maggio 2017.
- ^ (EN) Brandon Bray, Async in 4.5: Worth the Await, Microsoft Developer Network, 3 aprile 2012. URL consultato il 22 maggio 2017.
- ^ (EN) Python 3.2 Release, su python.org. URL consultato il 22 maggio 2017.
- ^ (EN) Python 3.2.0 Release, su python.org. URL consultato il 22 maggio 2017.