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側での自動生成はせずに、 雛形生成されたコンストラクタを変更すれば良い。
 あくまで雛形生成スクリプトはプログラマ支援であるため、 いくつかの手動での実装は許容している。
Binary file paper/master_paper.pdf has changed