comparison Prepaper/pre.tex @ 22:b96b3244307b

update paper & slide
author e165727 <e165727@ie.u-ryukyu.ac.jp>
date Sun, 16 Feb 2020 18:20:36 +0900
parents e234acddcfab
children 27f7561b1135
comparison
equal deleted inserted replaced
21:32db366529dd 22:b96b3244307b
35 We use VR technologies in computer music game which competes with the musical performance of instruments. HMD (Head Mount Display) and LeapMotion (Hands Tracking Device) are used with UnrealEngine4 (UE4). In this game, bare hands work well in HMD reality without annoying controller in hands. We have solved interferences between hands and HMD visual using transparent display of hands.This game is implememted on UE4 BluePrints which is a visual programming language with wires and boxes. The effectiveness of convination of VR and LeapMotion in music game is confirmed. 35 We use VR technologies in computer music game which competes with the musical performance of instruments. HMD (Head Mount Display) and LeapMotion (Hands Tracking Device) are used with UnrealEngine4 (UE4). In this game, bare hands work well in HMD reality without annoying controller in hands. We have solved interferences between hands and HMD visual using transparent display of hands.This game is implememted on UE4 BluePrints which is a visual programming language with wires and boxes. The effectiveness of convination of VR and LeapMotion in music game is confirmed.
36 36
37 \end{onecolabstract}] \thispagestyle{fancy} 37 \end{onecolabstract}] \thispagestyle{fancy}
38 38
39 \section{スクリプト言語の高速実行} 39 \section{スクリプト言語の高速実行}
40 現在多くのスクリプト言語はインタプリタ型言語であり, 実行時にインタプリタの立ち上げ, モジュールを読み込み, スクリプトの解釈, スクリプトの実行 といったような処理を担っている.
41 これらの処理の中にはOS上で事前に行うことで, より起動時間, 及び処理時間の短縮が予想される.
40 42
41 スクリプト言語RakuはMoarVMというVM上で動作するが,起動時間がPerl5やPython,Rubyなどの主要なスクリプト言語に比べて非常に低速である.この問題を解決するために,Rakuプログラムの,サーバーを用いた実行手法の提案を行う. 43 現在開発の進んでいる言語に スクリプト言語 Raku がある.
42 ここでいうサーバーとは転送したスクリプトを実行する環境のことである. 44 Raku は任意の VM が選択できるようになっており, 主に利用されている VM に C で書かれた MoarVM が存在する.
45 MoarVM は JIT コンパイルなどをサポートしているが, 全体的な起動時間及び処理速度が Perl5 や Python , Ruby などの他のスクリプト言語と比較し非常に低速である.
46 %Raku は MoarVM に基づくJIT コンパイラを持っており,コンパイルされた結果はプロセッサが実行可能な機械語に相当する.
43 47
44 またサーバーでは,サーバーに投げられたRakuをコンパイラで実行する際に,そのスクリプトが次に実行するスクリプトに影響を与えないことを保証する必要がある. 48 %Raku のような言語に JITコンパイラを持ち, 起動時間が遅い PyPy などの言語がある.
45 この問題を解決するために,サーバーのコンテナ化を行う. 49 本研究では, スクリプト言語 Raku の起動時間及び, 処理速度の改善を図り, 研究をするにあたり得られた, OS上でscript言語を実行する場合の利点と欠点について述べ, 今後の展望について記載する.
46 50
51 また, その手法として同一ホスト内で終了せずに実行を続けるサーバープロセスを立ち上げ, このサーバープロセス上で立ち上げておいたコンパイラに実行するファイル名を転送し,サーバー上でコンパイルを行う手法を提案する.
52 著者らは, この提案手法に沿って『Abyss サーバー』を実装している.
47 \section{Raku} 53 \section{Raku}
48 Rakuは元はPerl5の後継言語のPerl6として開発されていたが,現在は名称が変更されRakuとなっている. 54 Rakuは元はPerl5の後継言語のPerl6として開発されていたが,現在は名称が変更されRakuとなっている.
49 Rakuの現在の主流な実装はRakudoである.RakudoはMoarVM,とNQPと呼ばれるRakuのサブセット,NQPとRaku自身で記述されたRakuという構成である. 55 Rakuの現在の主流な実装はRakudoである.RakudoはMoarVM,とNQPと呼ばれるRakuのサブセット,NQPとRaku自身で記述されたRakuという構成である.
50 MoarVMはNQPとByte Codeを解釈する. 56 MoarVMはNQPとByte Codeを解釈する.
51 57
85 91
86 \section{Abyssサーバー} 92 \section{Abyssサーバー}
87 ここではAbyssサーバーについて説明する.AbyssサーバーはRakuで書かれている. クライアント側から投げられたRakuを実行するためのサーバーである. 93 ここではAbyssサーバーについて説明する.AbyssサーバーはRakuで書かれている. クライアント側から投げられたRakuを実行するためのサーバーである.
88 図1はAbyssサーバーを用いたスクリプト言語実行手順である. AbyssサーバーはユーザーがRakuを実行する際,クライアント側から転送されてきたファイルを事前に起動してあるサーバー側が処理し,その実行結果を返す構造となっている. 94 図1はAbyssサーバーを用いたスクリプト言語実行手順である. AbyssサーバーはユーザーがRakuを実行する際,クライアント側から転送されてきたファイルを事前に起動してあるサーバー側が処理し,その実行結果を返す構造となっている.
89 95
90 この手法を用いることで,サーバー上で事前にRakudoを起動したRakudoを再利用し,投げられたRakuスクリプトの実行を行うためRakudoの起動時間を短縮できると推測できる. 96 この手法を用いることで,サーバー上で事前に起動したRakudoを再利用し,投げられたRakuスクリプトの実行を行うためRakudoの起動時間を短縮できると推測できる.
91 97
92 98
93 \begin{figure}[H] 99 \begin{figure}[H]
94 \begin{center} 100 \begin{center}
95 \includegraphics[width=80mm]{images/abyss.pdf} 101 \includegraphics[width=80mm]{images/abyss.pdf}
101 Code1はAbyss サーバーのソースコードである. 107 Code1はAbyss サーバーのソースコードである.
102 Abyssサーバーは起動すると,まず自身にファイルを転送するためのソケットを生成し,その後ファイルを受け取るための待機ループに入る. 108 Abyssサーバーは起動すると,まず自身にファイルを転送するためのソケットを生成し,その後ファイルを受け取るための待機ループに入る.
103 109
104 ファイルパスを受け取るとファイルパスをバッファーに変換し読み込む,その後読み込んだバッファーを文字列にデコードし,ファイルパスの文字列を読み込み,ファイルの中身を式として評価するEVALFILEを用いて,プログラムを実行する. 110 ファイルパスを受け取るとファイルパスをバッファーに変換し読み込む,その後読み込んだバッファーを文字列にデコードし,ファイルパスの文字列を読み込み,ファイルの中身を式として評価するEVALFILEを用いて,プログラムを実行する.
105 Code1の2行目にあるMONKEY−SEE−NO−EVALはRaku上でEVALFILEを使用可能にするpragmaである. 111 Code1の2行目にあるMONKEY−SEE−NO−EVALはRaku上でEVALFILEを使用可能にするpragmaである.
106 現状のRakuのEVALFILEでは,出力がサーバー側に返っているので,クライアント側から出力を見るためにクライアント側に返す必要がある.
107 112
108 \lstinputlisting[label=codeseg, caption=Abyssサーバーのsource code]{code/abyss.p6} 113 \lstinputlisting[label=codeseg, caption=Abyssサーバーのsource code]{code/abyss.p6}
109 \lstinputlisting[label=codeseg, caption=クライアント側のsource code]{code/client.p6} 114 \lstinputlisting[label=codeseg, caption=クライアント側のsource code]{code/client.p6}
110 %通常、自分でプロセス立ち上げてPerl6を実行する際は, 115 %通常、自分でプロセス立ち上げてPerl6を実行する際は,
111 %\section{問題点} 116 %\section{問題点}
112 117
113 \section{まとめ} 118 \section{まとめ}
114 中間予稿までにPerl6スクリプトを投げて実行するサーバーの実装、および「自分でプロセス立ち上げてPerl6実行する手法」と「既にあるサーバーに投げてPerl6スクリプトを実行する手法」の差を測るために時間の計測を行った。 119 Perl6スクリプトを投げて実行するサーバーの実装, および「自分でプロセス立ち上げてPerl6実行する手法」と「既にあるサーバーに投げてPerl6スクリプトを実行する手法」の差を測るために時間の計測を行った.
115 120
116 今回実装したサーバーでは,別のスクリプトを実行する前にサーバーのコンテナ化をできていないので次回以降の課題とする. 121
117 今回の実装ではTCPソケットを用いたがTCPソケットを用いるとサーバーを立ち上げた際に外部からファイルを転送される可能性があるので,Unix domain socketの実装を行い,それを用いたクライアント・サーバーを作成することで安全性が高まると考えた 122 \section{今後の課題}
118 Rakuには現状Unix domainソケットの実装がないので、Unix domainソケットを実装し、自分以外が実行できないようにすることが今後の課題に挙げられる. 123
119 また今回例題として用いたものはスクリプト言語Rakuであったが,その他のスクリプト言語にも応用が利くかどうか検討する必要はある 124 また今回例題として用いたものはスクリプト言語Rakuであったが,その他のスクリプト言語にも応用が利くかどうか検討する必要はある
120 125
121 今回用いたRakuのEVALFILE自体にクライアント側に出力を返す実装追加することも今後の課題に挙げられる. 126 今回用いたRakuのEVALFILE自体にクライアント側に出力を返す実装追加することも今後の課題に挙げられる.
122 127
123 %またPerl6の機能としてevalfiel があるが現状出力がサーバー上に返ってしまい 128 %またPerl6の機能としてevalfiel があるが現状出力がサーバー上に返ってしまい