Mercurial > hg > Papers > 2019 > mitsuki-master
changeset 19:68ea0500773f
update
author | mir3636 |
---|---|
date | Wed, 30 Jan 2019 19:36:41 +0900 |
parents | c38593d39041 |
children | 1c7e6703724a |
files | paper/interface.tex paper/master_paper.pdf |
diffstat | 2 files changed, 9 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/interface.tex Wed Jan 30 17:10:15 2019 +0900 +++ b/paper/interface.tex Wed Jan 30 19:36:41 2019 +0900 @@ -16,14 +16,15 @@ この領域に確保された Data Gear へのアクセスは Interface の情報から行われる。 -ソースコード\ref{notref} は、pushSingleLinkedStack の stub Code Gear を含めたソースコードである。 +ソースコード\ref{pushStack} は、pushSingleLinkedStack のソースコードである。 ノーマルレベルの Code Gear では Stack の push の操作は、 push するデータと次の継続先の Code Gear という引数の集合のように見える。 しかしメタレベルでは Context が持つ構造体である。 -stub Code Gear では +stub Code Gear では Context が確保した 引数格納用の領域に格納した Data Gear を取り出している。 +Interface を導入することでノーマルレベルとメタレベルのズレの調整を解決した。 -\begin{lstlisting}[frame=lrbt,label=notref,caption={pop stub Code Gear}] +\begin{lstlisting}[frame=lrbt,label=pushStack,caption={pushSingleLinkedStack}] __code stackTest1(struct Stack* stack) { Node* node = new Node(); node->color = Red; @@ -46,25 +47,25 @@ } \end{lstlisting} -(もっと細かく書く) - ソースコード\ref{interface}は Stack の Interface である。 \_\_code で記述されているものは Stack が実装するべき push や pop などの Code Gear、 -union Data で記述されているものは、Stack の Code Gear の引数の Data Gear である。 +union Data で記述されているものは、Stack の Code Gear で用いる全ての Data Gear である。 +Interface で引数として用いる Data Gear は全てここで表されている。 \lstinputlisting[label=interface, caption=StackのInterface]{./src/Stack.cbc} 通常 Code Gear、Data Gear に参照するためには Context を通す必要があるが、 Interface を記述することでデータ構造の API と Data Gear を結びつけることが出来る。 +これによりノーマルレベルとメタレベルの分離が可能となった。 \section{Interface の実装} ソースコード\ref{implement}は Stack の実装の例である。 create の関数は 実装の初期化である。 ソースコード\ref{implement} 6〜12行目で実装の Code Gear に代入しているものは Context が 持つ enum で定義された Code Gear の番号である。 -ソースコード \ref{Gears_code} 3行目で stack->pop へと goto しているが、 -stack->pop には Code Gear の番号が入っているため実装した Code Gear へと継続する。 +ソースコード \ref{Gears_code} 3行目で stack\verb|->|pop へと goto しているが、 +stack\verb|->|pop には Code Gear の番号が入っているため実装した Code Gear へと継続する。 このため、ソースコード \ref{Gears_code} では 6行目の popSingleLinkedStack へと継続している。 \lstinputlisting[label=implement, caption=SingleLinkedStackの実装]{./src/stackimpl.cbc}