changeset 54:2cbaf041b085

update
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Mon, 01 Feb 2021 21:44:30 +0900
parents 1a4d4e64f0b8
children 76eee6847726
files paper/chapter/04-interface.tex paper/master_paper.pdf
diffstat 2 files changed, 13 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/paper/chapter/04-interface.tex	Mon Feb 01 21:16:47 2021 +0900
+++ b/paper/chapter/04-interface.tex	Mon Feb 01 21:44:30 2021 +0900
@@ -28,8 +28,21 @@
 \end{lstlisting}
 
 GearsOSのInterfaceは入力と出力のAPIを定義するものであるので、 golangのInterfaceのように、関数のAPIを並べて記述するほうが簡潔であると考えた。
+改良したInterfaceの構文でStackを定義したものをソースコード\ref{src:stack}に示す。
 \lstinputlisting[label=src:stack, caption=変更後のStack Interface]{src/stack.h}
 
+
+従来のInterfaceでは\texttt{<Type, Impl>}という記述があった。
+これはジェネリクスの機能を意識して導入された構文である。
+\texttt{Impl}キーワードは実装自身の型を示す型変換として使われていた。
+しかし基本Interfaceの定義を行う際にGearsOSのシステム上、CodeGearの第一引数は\texttt{Impl}型のポインタが来る。
+これはオブジェクト指向言語で言う\texttt{self}に相当するものであり、 自分自身のインスタンスを示すポインタである。
+Implキーワードは共通して使用されるために、 宣言部分からは取り外し、デフォルトの型キーワードとして定義した。
+\texttt{Type}キーワードは型変数としての利用を意識して導入されていたが、現在までのGearsOSの例題では導入されていなかった。
+ジェネリクスとしての型変数の利用の場合は\texttt{T}などの1文字変数がよく使われる。
+変更後の構文ではのちのジェネリクス導入のことを踏まえて、\texttt{Type}キーワードは削除した。
+
+
 構文を変更するには、 GearsOSのビルドシステム上でInterfaceを利用している箇所を修正する必要がある。
 Interfaceはgenerate\_stub.plで読み込まれ、 CodeGearと入出力のDataGearの数え上げが行われる。
 この処理はInterfaceのパースに相当するものである。
Binary file paper/master_paper.pdf has changed