Mercurial > hg > Papers > 2021 > anatofuz-master
changeset 12:db147ba02e22
...
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 28 Jan 2021 11:43:40 +0900 |
parents | e703b90a5a16 |
children | 95dfc1e2622a |
files | paper/chapter/02-perl.tex paper/master_paper.pdf |
diffstat | 2 files changed, 26 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/chapter/02-perl.tex Tue Jan 26 22:31:52 2021 +0900 +++ b/paper/chapter/02-perl.tex Thu Jan 28 11:43:40 2021 +0900 @@ -26,6 +26,22 @@ その為GearsOSの拡張部分を、等価な純粋なCbCの記述に変換する必要がある。 現在のGearsOSでは、 CMakeによるコンパイル時にPerlで記述された\texttt{generate\_stub.pl}と\texttt{generate\_context.pl}の2種類のスクリプトで変換される。 +\begin{itemize} + \item \texttt{generate\_stub.pl} + \begin{itemize} + \item 各CbCファイルごとに呼び出されるスクリプト + \item 対応するメタ計算を導入したCbCファイル(拡張子はc)に変換する + \end{itemize} + \item \texttt{generate\_context.pl} + \begin{itemize} + \item 生成したCbCファイルを解析し、使われているCodeGear、DataGearを確定する + \item これらの情報をもとにContext及びContext関係の初期化ルーチン、APIを作成する + \end{itemize} +\end{itemize} + +これらのPerlスクリプトはプログラマが自分で動かすことはない。 +GearsOSでプログラミングする際は、ビルドしたいプロジェクトをCMakeLists.txtに記述し、 移行はCMakeのビルドに移譲する。 +CMakeはMakefileやNinja fileを生成し実際にビルドを行うのはmakeやninja-buildとなっている。 \section{GearsCbCのInterfaceの実装時の問題} @@ -111,9 +127,15 @@ その場合は別のDataGearの初期化もコンストラクタ内で行う必要があるが、 自動生成コマンドではそこまでの解析は行わない。 -コンストラクタはデフォルトでは変数は0、またはNULLで初期化される。 -このスクリプトで生成されたコンストラクタは\texttt{generate\_stub.pl}内でも自動的に生成することが可能である。 -しかし明示的にコンストラクタが書かれていた場合は、 Perlスクリプト内での自動生成は実行しないようになっている。 +コンストラクタのメンバ変数はデフォルトでは変数は0、ポインタの場合はNULLで初期化するように生成する。 +このスクリプトで生成されたコンストラクタを使う場合、 CbCファイルから該当する部分を削除すると、\texttt{generate\_stub.pl}内でも自動的に生成される。 +自動生成機能を作成すると1CbCファイルあたりの記述量が減る利点がある。 + +明示的にコンストラクタが書かれていた場合は、 Perlスクリプト内での自動生成は実行しないように実装した。 これはオブジェクト指向言語のオーバーライドに相当する機能と言える。 -いくつかのInterfaceでは入力にContext以外のものを要求しており、こういった引数のAPIを変更する際もオーバーライドする必要がある。 +現状のGearsOSで使われているコンストラクタは、 基本は\texttt{struct Context*}型の変数のみを引数で要求している。 +しかしオブジェクトを識別するためにIDを実装側に埋め込みたい場合など、 コンストラクタ経由で値を代入したいケースが存在する。 +この場合はコンストラクタの引数を増やす必要や、 受け取った値をインスタンスのメンバに書き込む必要がある。 +具体的にどの値を書き込めば良いのかまではPerlスクリプトでは判定することができない。 +このような細かな調整をする場合は、 generate\_stub.pl側での自動生成はせずに、 雛形生成されたコンストラクタを変更すれば良い。 あくまで雛形生成スクリプトはプログラマ支援であるため、 いくつかの手動での実装は許容している。