view paper/interface.tex @ 5:94ac73bc7829

update
author mir3636
date Mon, 21 Jan 2019 14:31:36 +0900
parents 9100f20b8797
children 3d42e57b60f9
line wrap: on
line source

% Todo
% interface の前には何か軽い説明が必要
% interface 用の章を作る
 % なぜ, interface が必要になったのか?
   % Code と Data が全てフラットに展開すると, 記述が煩雑になるので モジュール化して扱いたい
   % java の interface のようなものがほしい
   % どうしてもグローバルな Data Gear にアクセスしたくなっちゃう
   %  ここでいうグローバルな変数は Context
 % interface は Data Gear
 % interface を使うことで Gear OS のモジュール化ができるようになった
 % interface は Meta Data Gear で、引数の Data Gear 群, Code Gear の引数のパターンの集合, Code Gear の引数のパターンは全部 interface に記述されている必要がある。
 % interface 内部の Code Gearは 自由に 引数の Data Gear, 実装のData Gear にアクセス出来る。
 % inteface の実装の際は Code Gear に代入して書く
 % C++ で言うとCode Gearは virtual 
% Impl の説明いれてない
% Interface 抜きのプログラミングも可能だが, 通常な言語だとアセンブラで書いてるような感覚(決まった位置にデータを書き出す)
% Interface はコールフレームの性質を持っている(入出力に使われている変数はInterface で定義する必要がある)
% 図のput の位置を直す
% Context and stub の詳細な説明はここに書く
% stub の説明は スクリプトによる goto の変換後

\chapter{Interface}
Interface は呼び出しの引数になる Data Gear の集合であり、そこで呼び出される Code Gear のエントリである。
呼び出される Code Gear の引数となる Data Gear はここで全て定義される。

Code\ref{interface}は stack の Interface である。
Code Gear、Data Gear に参照するために Context を通す必要があるが、
Interface を記述することでデータ構造の API と Data Gear を結びつけることが出来る。

\lstinputlisting[label=interface, caption=StackのInterface]{./src/Stack.cbc}

Code\ref{implement}は stack の実装の例である。
createImpl は関数呼び出しで呼び出され、初期化と Code Gear のスロットに対応する Code Gear の番号を入れる。

\lstinputlisting[label=implement, caption=SingleLinkedStackの実装]{./src/stackimpl.cbc}