私たちが必要としているのは、高度な並行アルゴリズムのための自然な抽象化です。アクター (Erlang を考えてみてください) はこの方向で長い道のりを歩んでいますが、万能のソリューションではありません。fork/join や map/reduce などのより具体的な抽象化は、一般的な問題にさらに簡単に適用できます。
これらすべての同時実行の抽象化の秘訣は、関数型のプログラミングが必要なことです。並行性は、共有された変更可能な状態とうまく噛み合いません。彼らが言うように、「ロックは有害と見なされます」。ほとんどの開発者は厳密に命令型のバックグラウンドを持っているため、共有なしの継続渡しアプローチに切り替えることは、多くの場合非常に困難です。
ちなみに、並行性の抽象化に関しては、Clojure にはこの方向で非常に興味深い機能がいくつかあります。ある種のアクターがあるだけでなく、グローバルなアトミック参照メカニズムとともに、トランザクション メモリ モデル (たとえばデータベース) も定義します。これら 2 つの機能により、ロックや競合状態を心配することなく、同時操作で「変更可能な」状態を共有できます。
結局は教育に尽きる。並行性の抽象化に必要な理論的作業の多くはすでに行われているので、それを受け入れる必要があります。残念ながら、Erlang と Haskell が証明しているように、最高のアイデアが非常に限られた人口統計に追いやられていることがあります。Scala や Clojure のような取り組みが、より高度な抽象化を、サポートの行き届いた既存のプラットフォーム (JVM) に忍び込ませることで、メインストリームに持ち込むことに成功することを願っています。