Mercurial > hg > Papers > 2021 > anatofuz-master
changeset 105:20bb97e54d33
update
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 06 Feb 2021 12:39:12 +0900 |
parents | 46494d9aafb9 |
children | 0512c7f88417 |
files | paper/chapter/04-interface.tex paper/chapter/05-perl.tex paper/drawio/geneConst1.drawio paper/drawio/geneConst1.pdf paper/master_paper.pdf |
diffstat | 5 files changed, 25 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/chapter/04-interface.tex Sat Feb 06 12:11:33 2021 +0900 +++ b/paper/chapter/04-interface.tex Sat Feb 06 12:39:12 2021 +0900 @@ -224,6 +224,8 @@ \lstinputlisting[label=src:implHeader, caption=Intefaceの実装をする際の宣言]{src/implHeader.h} +\section{内部データ構造に利用するDataGearの使用構文の導入} + \section{Interface APIに対応したCodeGearの名前の自動変換} \label{sec:autoCodeGearName} InterfaceのAPIに対応したCodeGearを実装する際、今までは暗黙にInterface名とImplの型名をつなげた名前で定義していた。 例えばStack InterfaceのAPIであるpopをSingleLinkedStackが実装した場合、CodeGearの名前はpopSingleLinkedStackにしていた。 @@ -383,7 +385,7 @@ あくまで雛形生成スクリプトはプログラマ支援であるため、 いくつかの手動での実装は許容している。 -\section{Interfaceの引数の検知} +\section{Interfaceの引数の数の確認} GearsOSのノーマルレベルでは、 InterfaceのAPIの呼び出しは\texttt{interface->method(arg)}の呼び出し方であった。 \texttt{arg}は引数であり、これはInterfaceで定義したAPIの引数の一致している必要がある。 Interfaceの定義の引数は、Implの実装自身が第一引数でくる制約があった。 @@ -427,8 +429,8 @@ ただし引数で渡す際に、例えばint型の値の加算処理などを行っていると、その処理の結果がint型になっているかどうかをPerlレベルでチェックする必要が出てしまう。 \section{InterfaceのAPIにないものを呼び出した場合の検知} -InterfaceAPI呼び出し時に、そもそも実装していないAPIを呼び出してしまうことがある。 -これもCbCファイルの返還前に処理を行いたい。 +InterfaceAPI呼び出し時に、そもそもInterfaceファイルに定義していないAPIを呼び出してしまうことがある。 +これもCbCファイルの変換前に処理を行いたい。 API呼び出し時の処理は、ソースコード\ref{src:parsedArgs}の処理そのものであるため、この処理の中に未実装のAPIを検知する様にした。 呼び出し元のInterfaceの情報パースした結果、ヘッダファイルにAPIの定義がなかった場合は11行目の\texttt{unless}に処理が落ち、 エラー終了する。
--- a/paper/chapter/05-perl.tex Sat Feb 06 12:11:33 2021 +0900 +++ b/paper/chapter/05-perl.tex Sat Feb 06 12:39:12 2021 +0900 @@ -108,12 +108,23 @@ Contextの初期化ルーチンを作製するgenerate\_context.plは、その特性上すべてのCbCファイルをロードしていた。 したがってcontext.hを作製する場合はこのスクリプトで行うと現状のCMakeに手をつけずに変更ができる。 +context.hを作製するため、generate\_context.plの処理は図\ref{fig:generate_context_2}の処理を実行することになる。 + +\begin{figure}[h] + \begin{center} + \includegraphics[width=100mm]{drawio/generate_context.pdf} + \end{center} + \caption{generate\_context.plを使ったcontext.hとファイル生成} + \label{fig:generate_context_2} + \end{figure} + \subsection{context.hの生成処理} generate\_context.plでcontext.hを作製したい。 この為には、プロジェクトで使用しているDataGearを特定する必要がある。 generate\_context.plの時点でCbCファイルはメタ情報を含む表現に変換されている。 Interfaceの使用と、実装を示す\texttt{\#interface}や\texttt{\#impl}構文はこの時点では落とされている為、別の情報から使用しているDataGrarを取得する必要がある。 +取得からcontext.hの作製までの流れを図\ref{fig:generate_context_3}に示す。 DataGearはGearsOSのメタレベルでは構造体で表現されていた。 また、DataGearは各CodeGearの引数の形で受け渡されている。 @@ -124,15 +135,16 @@ ヘッダファイルがあった場合、 Gears::InterfaceのAPIを利用して、 InterfaceもしくはImplのファイルとして利用可能であるかを確認する。 Interface、Implファイルでなかった場合は、ただの構造体であるのでcontext.hに含む情報からは除外する。 +\begin{figure}[htbp] + \begin{center} + \includegraphics[width=130mm]{drawio/geneConst1.pdf} + \end{center} + \caption{DataGearの収集とcontext.h生成の処理イメージ} + \label{fig:generate_context_3} + \end{figure} -\begin{figure}[h] - \begin{center} - \includegraphics[width=100mm]{drawio/generate_context.pdf} - \end{center} - \caption{generate\_context.plを使ったcontext.hとファイル生成} - \label{fig:generate_context_2} - \end{figure} + \subsection{context.hのテンプレートファイル}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/drawio/geneConst1.drawio Sat Feb 06 12:39:12 2021 +0900 @@ -0,0 +1,1 @@ +<mxfile host="Electron" modified="2021-02-06T03:35:47.182Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/14.1.8 Chrome/87.0.4280.88 Electron/11.1.1 Safari/537.36" etag="kj_7Gp0a_tQr2vqDYzPt" version="14.1.8" type="device"><diagram id="GUjd4v6yzUQa2QOk8NSy" name="ページ1">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</diagram></mxfile> \ No newline at end of file