changeset 82:3fb7c17d8e91

update
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Fri, 05 Feb 2021 09:53:09 +0900
parents 9974be9e2d1c
children 7f5bb7c5b433
files paper/chapter/04-interface.tex paper/final.pdf paper/master_paper.pdf paper/src/implHeader.h
diffstat 4 files changed, 24 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/paper/chapter/04-interface.tex	Fri Feb 05 09:22:30 2021 +0900
+++ b/paper/chapter/04-interface.tex	Fri Feb 05 09:53:09 2021 +0900
@@ -126,6 +126,19 @@
 
 
 \section{Interfaceの実装のCbCファイルへの構文の導入}
+今までのGearsOSではマクロに似た\texttt{\#interface}構文で使用するInterfce名を指定した。
+しかしInterfaceを実装する場合も、 InterfaceのAPIを利用する際も同じシンタックスであった。
+この2つは意味が異なっている為、 シンタックスを分離したい。
+Implementの型定義ファイルを導入したので、Interfaceの実装をする場合に別のシンタックスを導入する。
+
+
+導入された構文をソースコード\ref{src:implHeader}に示す。
+この例ではStack Interfaceの実装としてSingleLinkedStackを定義する宣言である。
+
+Implementの宣言の構文では、 まず\texttt{\#impl}の後ろに実装したいIntefaceの名前を入れる。
+続く\texttt{for}キーワードの後ろに、 Implementの型名を記述する。
+宣言はgenerate\_stub.plが読み取り、 変換した後のCbCファイルからは該当する行が削除される。
+\lstinputlisting[label=src:implHeader, caption=Intefaceの実装をする際の宣言]{src/implHeader.h}
 
 \section{GearsCbCのInterfaceの実装時の問題}
 
@@ -227,7 +240,8 @@
 コンストラクタのメンバ変数はデフォルトでは変数は0、ポインタの場合はNULLで初期化するように生成する。
 このスクリプトで生成されたコンストラクタを使う場合、 CbCファイルから該当する部分を削除すると、\texttt{generate\_stub.pl}内でも自動的に生成される。
 自動生成機能を作成すると1CbCファイルあたりの記述量が減る利点がある。
-
+generate\_stub.pl内で作製する場合は、 すでにメタ情報を含むコードに書き換えたものを作製する。
+その為厳密には同じコードを生成する訳ではない。
 
 
 明示的にコンストラクタが書かれていた場合は、 Perlスクリプト内での自動生成は実行しないように実装した。
@@ -285,6 +299,13 @@
 
 
 \section{InterfaceのAPIの未実装の検知}
-パースした結果、ヘッダファイルにAPIの定義がなかった場合は11行目の\texttt{unless}に処理が落ち、 エラー終了する。
+InterfaceAPI呼び出し時に引数の数以外に、そもそも実装していないAPIを呼び出してしまうことがある。
+この場合はCbCがPerlスクリプトによって変換された後でエラーが出る。
+内容はCbCコンパイラのコンパイル時にInterfaceの構造体に、APIに対応するフィールドがないエラーである。
+コンパイル時に発覚できるので問題ないが、 これも変換する前に発見したほうがデバッグが容易である。
+
+API呼び出し時の処理は、ソースコード\ref{src:parsedArgs}の処理そのものであるため、この処理の中に未実装のAPIを検知する様にした。
+呼び出し元のInterfaceの情報パースした結果、ヘッダファイルにAPIの定義がなかった場合は11行目の\texttt{unless}に処理が落ち、 エラー終了する。
+これによってInterface呼び出しの問題が、 Perlスクリプトによって変換する前に検知可能になった。
 
 \section{par goto のInterface経由の呼び出しの対応}
\ No newline at end of file
Binary file paper/final.pdf has changed
Binary file paper/master_paper.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/src/implHeader.h	Fri Feb 05 09:53:09 2021 +0900
@@ -0,0 +1,1 @@
+#impl "Stack.h" for "SingleLinkedStack.h"