# HG changeset patch # User Nozomi Teruya # Date 1517972306 -32400 # Node ID 62595752c948697baa6c610a562b7e58eb107b04 # Parent b62fc3a499f913d6f3f3ea83b71eb3864bb8ffa5 honban diff -r b62fc3a499f9 -r 62595752c948 presen/sample.html --- a/presen/sample.html Wed Feb 07 10:07:30 2018 +0900 +++ b/presen/sample.html Wed Feb 07 11:58:26 2018 +0900 @@ -87,7 +87,7 @@ @@ -313,25 +313,15 @@
-

複数のTopology Managerへの対応

- - - -
-
-

Aliceの問題点 - LocalDSMを複数立ち上げられない

@@ -339,19 +329,23 @@

Aliceの問題点 - APIシンタックスの分離

-
    +
    • setKeyは記述場所が決まっておらず、待ち合わせを行っているCSの外からも呼べる
        -
      • どのkeyを待っているのか不明なCSが生まれてしまう
      • -
      -
    • -
    • setKeyではkeyを動的に指定することができる -
        -
      • どんな処理を行っているかわかりづらい
      • -
      • 対応するput箇所も修正しなければならない
      • +
      • createしたときにどのkeyを待つのかが不明
      • +
      • setKeyしたときにtakeかpeekかがわからない
    +
    class TestCG extends CodeSegment{
    +    private Receiver input1 = ids.create(CommandType.TAKE);
    +
    +    void run() {
    +        CodeSegment cg = new TestCG();
    +        cg.input1.setKey("hoge");
    +    }
    +}
    +
@@ -360,7 +354,8 @@

Aliceの問題点 - APIシンタックスの分離

class TestCG extends CodeSegment{
     private Receiver input1;
@@ -379,18 +374,11 @@
 
-

Aliceの問題点 - APIシンタックスの分離

-

opt

- - -
-
-

Aliceの問題点 - 型が推測できない

    -
  • Input DSをReceiver型でcreateするため、どの型のデータを待っているのかわからない
  • -
  • しかしReceiverからデータを取り出すにはasClass()で型を指定する必要がある
  • -
  • 型をDSをputした箇所までコードをたどる必要がある
  • +
  • Input DSをReceiver型でcreateするため、任意の型を格納できる
  • +
  • Receiverからデータを取り出すにはasClass()で型を指定する必要がある
  • +
  • 格納した型と取り出した型の不一致は実行時に検出される
@@ -403,7 +391,8 @@
  • Local DSMを複数立ち上げられないため、Topology Managerの拡張やテストが困難
  • インプットAPIが分離しているためCSでどんな処理が行われているかわかりづらい
  • -
  • setKeyの記述順序や型を気にしてプログラミングをしなくてはならない
  • +
  • setKeyの記述順序によって挙動が変わる
  • +
  • 型を気にしてプログラミングをしなくてはならない
  • これらを踏まえフレームワークChristieを設計する
  • @@ -549,14 +538,7 @@
    -

    Christie - アノテーションを用いたインプット記述

    -

    opt

    - - -
    -
    - -

    Christie - アノテーションによるシンタックスの分離阻止

    +

    Christie - アノテーションによるシンタックスの分離阻止

    • アノテーションは必ずフィールドに付けなければならない
        @@ -574,7 +556,7 @@
    -

    Christie - 型を指定しないデータ取り出し

    +

    Christie - 型を指定しないデータ取り出し

    • InputDGを宣言する際には必ず型の指定が必要となるため、CG内で型を把握できる
    • DataGearはJavaの総称型を用いて<>内に指定した型を受け取る
    • @@ -587,7 +569,7 @@
    -

    Christie - 型を指定しないデータ取り出し

    +

    Christie - 型を指定しないデータ取り出し

    • reflectionAPIを使えばアノテーションのついているフィールドの情報もとれる
    • 型を判断できる
    • @@ -609,7 +591,7 @@
    -

    Christie - まとめ

    +

    Christie - まとめ

    • CodeGearManagerというDGMの管理機構を作ったことでLocalDGM複数立ち上げが可能になり、NAT越えなどの機能拡張やテストをしやすくなった
    • アノテーションを用いたことでDG生成とkey指定の分離問題を解決し、処理の見通しを良くした
    • @@ -676,7 +658,7 @@
    -

    Christieと他フレームワークの比較 - 設計思想

    +

    Christieと他フレームワークの比較 - 設計思想

    • AkkaやHazelcastはロケーション透過性が高く、分散プログラムの煩雑な処理を抽象度を高めることで隠している
    • Christieでは分散性を明示的に意識しながら記述できるためチューニングしやすい
    • @@ -687,7 +669,7 @@
    -

    Christieと他フレームワークの比較 - 記述性

    +

    Christieと他フレームワークの比較 - 記述性

    • アノテーションを使ったインプットの指定はAkkaやHazelcastにはない
    • 複数のインプットを待ち合わせして処理を行いたい場合 @@ -764,6 +746,32 @@
    + +
    +
    + +

    複数のTopology Managerへの対応

    +
      +
    • この機能を実現するにはノードに割り当てられたnodeNameの衝突を避けなければならない
    • +
    • 通常のLocal DSMとは別にTopology ManagerごとのLocal DSMを作成しnodeNameを管理
    • +
    • Tpology Manager/Nodeの働きはそのままに、指定するLocal DSMを変えるだけでTopology Managerの複数対応が可能
      +opt
    • +
    + + +
    +
    + +

    Aliceの問題点 - APIシンタックスの分離

    +

    opt

    + + +
    +
    + +

    Christie - アノテーションを用いたインプット記述

    +

    opt

    +