Future
出典: フリー百科事典『ウィキペディア(Wikipedia)』
futureは、通常まだ計算されていない値、すなわち未知の値の代用品として使用されるプログラミング言語の構文の一種。プログラミング言語によってはpromiseと呼ばれる(E言語やAlice)。
目次 |
[編集] 概要
カール・ヒューイットは、2つの点で future の方が promise よりも適した用語であるとしている。第一に promise(約束)は必ずしも将来の時点のことを意味しないため、future(未来)よりも曖昧である。第二に promise は単なる言語表現だが、future は現物(actuals)に対する先物(futures)という意味もある(つまり、実際の物に対する代用品)。
future という構文が最初に紹介されたのは1977年、Henry Baker とカール・ヒューイットの論文でのことであった。future(promise)の使用により、分散システムにおける遅延を劇的に減少させることができる。例えばアクターモデルのようにメッセージのパイプライン化が可能であり、これをE言語やAliceでは promise pipelining と呼ぶ[1]。
[編集] パイプライン化
一般的なRPCで次のような式を考える。
- t3 := (x.a()).c(y.b())
これは、次のように展開できる。
- t1 := x.a(); t2 := y.b(); t3 := t1.c(t2)
これを解釈すると、t1 および t2 の値が定まらないと t3 の値は計算できない。future を使うとこの式が次のように表される。
- t3 := future (future x.a()).c(future y.b())
これを展開すると次のようになる。
- t1 := future x.a(); t2 := future y.b(); t3 := future t1.c(t2)
このようにすると t3 は即座に計算される。ただし、t3 から情報を得ようとすると待たされる。
[編集] 実装
future構文は MultiLisp や Act1 といったプログラミング言語で実装された。並行論理プログラミング言語における論理変数もよく似ている。これは当初 Prolog with Freeze や IC Prolog で使われ、Concurrent Prolog、Flat Concurrent Prolog、Parlog、Vulcan、Janus、Mozart/Oz、Flow Java、Alice といった言語で真の並行性プリミティブとなった。Concurrent ML のような単一代入規則型データフロー言語の I-var は並行論理変数とよく似ている。
future による遅延最小化のようなパイプライン化技法はまずアクターモデルで生み出され、1988年にバーバラ・リスコフが再発明し、1989年ごろにはザナドゥ計画でも再発明されている。
future/promise/並行論理変数/I-var をサポートする言語:
- Act1
- Alice
- Io [1]
- Oz(その実装としてMozart Programming Systemがある)
- MultiLisp
promise pipilining をサポートする言語:
[編集] 参考文献
- 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.
- ^ Steve Dekorte (2005). "Io, The Programming Language"
[編集] 外部リンク
カテゴリ: 分散処理 | 並行計算 | プログラミング言語の構文