📝決定性データフローモデル(Detarministic Dataflow)
決定性データフロープログラミング. 関数型パラダイムをべースにしている.
ref. データフロープログラミング - Wikipedia
スレッド処理, 時間経過をともなうのにも関わらず, 実行結果はつねに一定! これが, Deterministic と名づけられた所以.
Deerministic is not Obsarbable.
アイデア自体は 70 年代に提示されたアイデアのに, 今まで忘れ去れれていた.
- MultiCore, ManyCore Processing (マルチコア, メニーコア)
- Destributed Computing
- Concurrent Deployment
- BigData Computing
以上のようなキーワードとともに, 21 世紀の今こそ注目をあびるべき, 次世代プログラミングパラダイム!
(とピーターバンロイさんがいっていた. ガウディ本, Chapter 4)
- 関数型プログラミングを一般化した. 関数型に並行性を加えたもの.
- 並行性は透過. 途中でスレッドをいくら追加しても, 削除しても, 待たせても, 実行順序によって結果が変わらない!
Detarministic Dataflowの基礎概念
NonDeterminitic
非決定性. プログラムの実行結果が外部のシステムに委ねられること.
Nondeterminism は managed されることが必須! しかし, 制御がとても難しい. だからこそ, Determinism が重要なのだと.
example
X になにが設定されるかは, システムが決める. プログラマが決めることはできない.
declare X = {NewCell 0}
therad X:=1 end
therad X:=2 end
Scheduler
どのスレッドを実行するかを決める, システムの一部をスケジューラという.
🔖決定性(Deterministic)
決定性. プログラムの実行結果をシステムに依存せずにプログラムだけで制御できること.
我々ひとりひとりがスレッドだとしたら, 誰とどう関わろうとも結局は神のお導き的な決定論.
Concurrency Transparency
並行透過性.
複数のユーザーが 1 つのリソースを共有して使用するとき, それらユーザーに競合状態を気づかせてはならない.
concurrency for dummies
並行性のためのダミースレッド.
並行透過性のためには, いくらスレッドを動的に追加しようとも, 削除しようとも, 最終的に得られる結果はかわらない (Deterministic!)
それは, スレッドの各処理を incremental に動作させることで可能となる
ForCollect
手続き型の for 文と 宣言型の不定性を共存させる for 文.
Cell と higher-order-programming をつなげる概念.
Map や Filter の一般化と言える.
proc {ForCollect Xs P Ys}
Acc={NewCell Ys}
proc {C X} R2 in @Acc=X|R2 Acc:=R2 end
in
for X in Xs do {P C X} end @Acc=nil
end
- List に適用すれば, リスト内包表記.
- Stream に適用すれば, 並行エージェント.
List Complehention: リスト内包表記
ForCollect をリストに適用したもの.
python や haskell は言語で実装されている.
データフロープログラミングTopics
Tensorflowとデータフロー
あまり調べてないが, Googleのディープラーニングライブラリで有名なTensorflowはデータフロープログラミングのパラダイムで作成されているらしい.
たしかに, ディープラーニングとなると計算にとても時間がかかり, また互いの計算結果が影響しあっているので, コンピュータリソースを最適に配分するためのデータフロー的な考え方は相性がとてもよさそう.
そうかんがえるとBigqueryもかな?
References
Peter Van RoyさんのedXでの講義がとてもわかりやすい.
- 10.1 motivation - YouTube
- 10.2 dataflow - YouTube
- 10.4nondeterminism - YouTube
- Peter van Roy - KEYNOTE Why time is evil in distributed systems | Code BEAM STO 19 - YouTube
🔗Related
up: 📁プログラミングパラダイム