Mercurial > hg > Papers > 2021 > anatofuz-master
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のパースに相当するものである。