Future (programming) |
In computer science, a future (also known as a promise in the E programming language) is a proxy for a result that is not yet known, usually because the computation of its value has not yet completed. Carl Hewitt has argued that the term future is to be preferred over promise on two grounds. First, promises can be about any time not just the future so the term promise is more vague than future . Second, a promise is just a linguistic expression whereas a future, as in the commodities market, is an actual claim and proxy for the goods.
The future construct was introduced in 1977 in a paper by Henry Baker (computer scientist) and Carl Hewitt. The use of futures (promises) can dramatically reduce latency in distributed computing. E.g. , it enables pipelining of messages, called promise pipelining [http://www.erights.org/elib/distrib/pipeline.html] [http://c2.com/cgi/wikiPromisePipelining].
= Implementations =
The future construct became more better known by its inclusion in programming lannguages such as MultiLisp and Actor model. The use of logic variables for communication in concurrent logic programming languages is quite similar. These started with Prolog with Freeze and IC Prolog , and became a true concurrency primitive with Concurrent Prolog, Flat Concurrent Prolog, Parlog, Vulcan, Janus, Mozart/Oz, Flow Java, and Alice. The single assignment I-var from data flow languages, included in Reppy s Concurrent ML , is much like the concurrent logic variable.
The pipelining technique (using promises/futures to overcome latency) was invented independently twice in the 1980s. It was invented at Project Xanadu (circa 1989) and by Barbara Liskov in 1988.
Languages supporting promises/futures/concurrent logic variables/I-vars include:
Languages supporting promise pipelining include:
=Reference=
*Henry Baker and Carl Hewitt The Incremental Garbage Collection of Processes Proceeding of the Symposium on Artificial Intelligence Programming Languages. SIGPLAN Notices 12, August 1977. *Henry Lieberman. Thinking About Lots of Things at Once without Getting Confused: Parallelism in Act 1 MIT AI memo 626. May 1981. *Henry Lieberman. A Preview of Act 1 MIT AI memo 625. June 1981.
=External references=
|
|