Mercurial > hg > Papers > 2018 > nozomi-master
comparison paper/nozomi-master.tex @ 153:528fca199827
add some source
author | Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 29 Jan 2018 12:11:59 +0900 |
parents | 9c1b9562f441 |
children | 14e0a5a932cf |
comparison
equal
deleted
inserted
replaced
152:9c1b9562f441 | 153:528fca199827 |
---|---|
491 | 491 |
492 | 492 |
493 | 493 |
494 \section{APIの改善} | 494 \section{APIの改善} |
495 \subsection{TAKE/PEEK} | 495 \subsection{TAKE/PEEK} |
496 InputAPIにはAliceと同じくTakeとPeekを用意した。 | |
496 ChristieではInput DG の指定にはAnnotationを使う。 | 497 ChristieではInput DG の指定にはAnnotationを使う。 |
497 Annotationとは、Javaのクラスやメソッド、パッケージに対して付加情報を記述できる機能である。 | 498 Annotationとは、Javaのクラスやメソッド、パッケージに対して付加情報を記述できる機能である。 |
498 先頭に@をつけることで記述でき、オリジナルのAnnotationを定義することもできる。 | 499 先頭に@をつけることで記述でき、オリジナルのAnnotationを定義することもできる。 |
499 | 500 |
500 AliceではInputの受け皿であるReceiverを作り後からkeyをセットしていたが、 | 501 AliceではInputの受け皿であるReceiverを作り後からkeyをセットしていたが、 |
501 ChristieではInputのためのDGを作り、その上にAnnotationでKeyを指定する(\ref{src:take})。 | 502 ChristieではInputのためのDGを作り、その上にAnnotationでKeyを指定する(\ref{src:take})。 |
502 | 503 |
503 \lstinputlisting[label=src:take, caption=TAKEの例]{source/christie/InputDG.java} | 504 \lstinputlisting[label=src:take, caption=Takeの例]{source/christie/InputDG.java} |
504 | 505 |
505 | 506 |
506 Annotationで指定したInputDGは、CGを生成した際にCodeGear.class内で待ち合わせの処理が行われる。 | 507 Annotationで指定したInputDGは、CGを生成した際にCodeGear.class内で待ち合わせの処理が行われる。 |
507 これにはJavaのreflectionAPIを利用している。 | 508 これにはJavaのreflectionAPIを利用している。 |
509 Annotationの指定はRUNTIMEではできないため、動的なkeyの指定も防ぐことができる。 | |
508 | 510 |
509 \ref{src:take}の2行目にあるように、InputDGを宣言する際には必ず型の指定が必要となる。 | 511 \ref{src:take}の2行目にあるように、InputDGを宣言する際には必ず型の指定が必要となる。 |
510 そのため、Christieでは他の部分を辿らなくてもCGを見るだけでインプットされるデータの型が分かる。 | 512 DataGearは様々な型のデータを扱うためにJavaの総称型で受け取るようにしており、<>内に指定した型でデータの型を限定できる。 |
511 また、取得してきたDGが指定と違う型であった場合エラーとなるため、型の整合性を保ちながら信頼性の高いプログラミングが可能となった。 | 513 このように記述することで、Christieでは他の部分を辿らなくてもCGを見るだけでインプットされるデータの型が分かるように可読性を向上させた。 |
512 | 514 また、取得してきたDGが指定と違う型であった場合はエラーとなるため、型の整合性を保ちながら信頼性の高いプログラミングが可能となった。 |
513 %Aliceではkeyと変数名の不一致から可読性が低くなっていた。しかし | 515 |
514 %JavaのメタプログラミングAPIであるjavassistを用いてAnnotationから変数の自動生成も試みたが、javassistでは ため、実現できなかった。 | 516 また、Aliceではkeyと変数名の不一致から可読性が低くなっていた。 |
515 | 517 しかしChristieではkeyと変数名が一致しないとエラーとなるため、自然と読みやすいコードが書けるようになっている。 |
516 %リモートノードに対してTAKEする際は、REMOTETAKEのAnnotationを用いる。 | 518 この部分に関しては、JavaのメタプログラミングAPIであるjavassist\cite{}を用いてAnnotationから変数の自動生成も試みたが、javassistでは変数生成の前に他のどのクラスも生成してはならないという制限があったため、Christieでは実現できなかった。 |
517 %LocalかRemoteかはAnnotationが違うためひと目でわかる | 519 |
518 %例 | 520 |
519 | 521 リモートノードに対してTake/Peekする際は、RemoteTake/RemotePeekのAnnotationを用いる(\ref{src:remotetake})。 |
520 %なお、圧縮を指定する際はAlice同様dgm名の前にcompressedをつける。Localでの圧縮は基本想定していない。しかし、RemoteTakeで間接的にすることは可能である。 | 522 そのため待ち合わせ先がLocalかRemoteかはAnnotationの違いからひと目でわかるようになった。 |
523 | |
524 \lstinputlisting[label=src:remotetake, caption=RemoteTakeの例]{source/christie/RemoteInputDG.java} | |
525 | |
526 なお、圧縮を指定する際はAlice同様DGM名の前にcompressedをつける。 | |
527 LocalからのTAKEではDGM名の指定がないが、それはLocalでの圧縮は基本想定していないためである。 | |
528 しかし、Localでの圧縮をしようと思えばRemoteTakeを用いて間接的にすることは可能である(\ref{src:compresslocal})。 | |
529 | |
530 \lstinputlisting[label=src:compresslocal, caption=Localへの圧縮の指定の例]{source/christie/CompressLocal.java} | |
531 | |
532 | |
521 | 533 |
522 \subsection{PUT/FLIP} | 534 \subsection{PUT/FLIP} |
523 %odsはない。dsmを指定して直接putする。 | 535 OutputAPIにはput/flipを用意した。 |
536 put/flipのメソッドはDGMに用意されている。 | |
537 CodeGear.classにはDGMを取得するメソッドがあり、それを用いて書き込みたいDGMを指定して直接putする。 | |
538 そのためLocal/Remoteの切り替えはDGMの切り替えによって行う。 | |
539 ソースコード\ref{src:put}、\ref{src:remoteput}はLocalとRemoteにputする記述の例である。 | |
540 | |
541 \lstinputlisting[label=src:put, caption=Localへputする例]{source/christie/Put.java} | |
542 \lstinputlisting[label=src:remoteput, caption=Remoteへputする例]{source/christie/RemotePut.java} | |
543 | |
544 flipも同様にDGMに直接DGを渡す(\ref{src:flip})。 | |
545 | |
546 \lstinputlisting[label=src:flip, caption=Remoteへflipする例]{source/christie/Flip.java} | |
547 | |
548 | |
549 ChristieではDGMに対して直接putするため、AliceのODSにあたる部分はない。 | |
550 ODSを経由するより直接DGMに書き込むような記述のほうが直感的であると考えたためである。 | |
551 | |
552 | |
524 | 553 |
525 \subsection{getData()} | 554 \subsection{getData()} |
526 %asClassに相当 | 555 AliceのasClassに相当するのがgetDataである。 |
527 %InputDGで指定した型は内部で保存され、通信先でも保存される。getDataで正しい型でとれる。 | 556 ソースコード\ref{src:getdata}はgetDataを用いてInputDGからデータを取得する例である。 |
557 | |
558 \lstinputlisting[label=src:getdata, caption=getDataの例]{source/christie/GetData.java} | |
559 | |
560 Aliceと違う点は、プログラマが型を指定しなくて良い点である。 | |
561 4.2.1で示したように、InputDGを生成する際には型を指定する。 | |
562 この型は内部で保存され、リモートノードと通信する際も保たれる。 | |
563 このようにgetDataするだけでプログラマが指定しなくとも正しい型で取得できるため、プログラマの負担を減らし信頼性を保証することができる。 | |
564 | |
565 | |
528 | 566 |
529 \section{CodeGearの記述方法} | 567 \section{CodeGearの記述方法} |
530 %以下のコードはLocalDSMにputした | 568 %以下のコードはLocalDSMにputした |
531 | 569 |
532 \lstinputlisting[label=src:StartCodeGear, caption=StartCodeGearの例]{source/christie/StartTest.java} | 570 \lstinputlisting[label=src:StartCodeGear, caption=StartCodeGearの例]{source/christie/StartTest.java} |
533 \lstinputlisting[label=src:TestCodeGear, caption=CodeGearの例]{source/christie/TestCodeGear.java} | 571 \lstinputlisting[label=src:TestCodeGear, caption=CodeGearの例]{source/christie/TestCodeGear.java} |
534 | 572 |
535 %CGを作るときはsetup。AliceではnewすればCGが待ちに入ったが、Annotationの処理を挟むには一度newしておかなければならないため、Christieではnewの後setupをして待ち合わせの処理を行う。 | 573 %CGを作るときはsetup。AliceではnewすればCGが待ちに入ったが、Annotationの処理を挟むには一度newしておかなければならないため、Christieではnewの後setupをして待ち合わせの処理を行う。 |
536 | 574 |
575 | |
576 | |
537 \section{DataGearManagerの複数立ち上げ} | 577 \section{DataGearManagerの複数立ち上げ} |
538 %CGMを2つつくればLocalが2つ作られる。Remoteへの接続と同じようにすれば良い | 578 %CGMを2つつくればLocalが2つ作られる。Remoteへの接続と同じようにすれば良い |
539 | 579 |
540 | 580 |
581 | |
582 | |
541 \section{DataGearの拡張} | 583 \section{DataGearの拡張} |
542 %別のclassに分けている。DataGearを継承したMessagePackDataGearと、それを更に継承したCompressedDataGearを用意した。 | 584 Aliceではデータの多態性を実現するためにDS内に複数のデータ形式を保持していた。 |
543 %そのため、どの形式をもっているかクラスを見るだけでわかるようになった | 585 しかしChristieではデータ形式ごとに別のclassに分けている。 |
586 DataGearを継承したMessagePackDataGearと、それを更に継承したCompressedDataGearを用意した。 | |
587 そのため子クラスは親クラスのデータ形式を保持しながら新しいデータ形式を持つ形になっている。 | |
588 クラスを見るだけで今どの形式を保持しているかわかるようになったため、デバッグがしやすくなった。 | |
589 | |
590 | |
591 | |
544 | 592 |
545 \chapter{Christieの評価} | 593 \chapter{Christieの評価} |
546 \section{Akka} | 594 \section{Akka} |
547 \section{Corba} | 595 \section{Corba} |
548 \section{Erlang} | 596 \section{Erlang} |