# HG changeset patch # User anatofuz # Date 1611801820 -32400 # Node ID db147ba02e227c59473c2ca61f54aa0ce911f186 # Parent e703b90a5a16e955c11d79db01301f54622500b3 ... diff -r e703b90a5a16 -r db147ba02e22 paper/chapter/02-perl.tex --- 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側での自動生成はせずに、 雛形生成されたコンストラクタを変更すれば良い。 あくまで雛形生成スクリプトはプログラマ支援であるため、 いくつかの手動での実装は許容している。 diff -r e703b90a5a16 -r db147ba02e22 paper/master_paper.pdf Binary file paper/master_paper.pdf has changed