90 likes | 306 Views
マルチスレッド GUI モデル. 小笠原啓 有限会社 IT プランニング. ゴール. マルチスレッドな GUI ライブラリを OCaml で。 動きのある UI は近頃必須なので、アニメーションを容易にする仕組みを導入。 GUI 部品のイベント、見かけを自由にカスタマイズできるように。. マルチスレッドと GUI. スレッド間情報共有 共有メモリ、メッセージパッシング 描画はマルチスレッド化できない。 副作用は少ないほうがよい。. Concurrent Cell. CML スタイルのメッセージパッシングライブラリ( Ocaml)
E N D
マルチスレッドGUIモデル 小笠原啓 有限会社ITプランニング
ゴール • マルチスレッドなGUIライブラリをOCamlで。 • 動きのあるUIは近頃必須なので、アニメーションを容易にする仕組みを導入。 • GUI部品のイベント、見かけを自由にカスタマイズできるように。 Page 2
マルチスレッドとGUI • スレッド間情報共有 • 共有メモリ、メッセージパッシング • 描画はマルチスレッド化できない。 • 副作用は少ないほうがよい。 Page 3
Concurrent Cell • CMLスタイルのメッセージパッシングライブラリ(Ocaml) • Eventライブラリの上に構築。 • スレッドレスな ivar, mvar, mbox(queue)。 • GCも考慮したbroadcastチャンネル。 • widh_nack, timeout, future, rpcなどの便利関数も実装。 Page 4
Reactive Programming • 動き(ビヘイビア. ‘a behavior)を状態の無限リストで表現。動きを宣言的に記述できる。 • ビヘイビアは合成可能(コンビネーター)。 • over, fusion, insert, replace, loop • イベントが起きたときにビヘイビアを変化させるコンビネーター。 • react : bool event → (‘a behavior → ’a behavior) →‘a behavior → ’a behavior 状態変化をf : ‘a→’aで記述して、streamにする。 時間 離散的なタイムラインとみなせる。 Page 5
柔軟なGUI部品 従来の部品(Model-View-Control) • 内部状態と表示内容とにずれがないよう、保障してくれる代わりに、イベント部分以外の動作を変更できない。 • カスタム部品はゼロから作らなければならない。 新しい設計の部品 • イベントの受信と状態判定とロジックを一体化。(インタラクション) • 子部品とインタラクションの集まりで一つの部品と定義。 Page 6
デモンストレーション Page 7
Related Work eXene Fudget(Gadget) FranTk Future Work CMLスタイルのメッセージパッシングをπ計算でエンコーディング。 モデルチェックでデッドロック回避。 Related and Future Work Page 8