Mercurial > hg > Papers > 2018 > mitsuki-sigos
changeset 58:0e42707ddeb2
add
author | mir3636 |
---|---|
date | Sun, 22 Apr 2018 18:52:38 +0900 |
parents | 6c55961dcf0b |
children | aa9be79a7569 |
files | Paper/sigos.pdf Paper/sigos.tex Paper/src/varargnext.cbc |
diffstat | 3 files changed, 11 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/Paper/sigos.tex Sun Apr 22 18:38:16 2018 +0900 +++ b/Paper/sigos.tex Sun Apr 22 18:52:38 2018 +0900 @@ -163,17 +163,11 @@ ノーマルレベルでは Context を直接見ることはできない。 Code Gear の継続は関数型プログラミングからみると継続先の Context を含む Closure となっている。 -これを記述するために継続に不定長引数を追加する構文をスクプリトの変換機能として用意した図。\ref{fig:varargnext} +これを記述するために継続に不定長引数を追加する構文をスクプリトの変換機能として用意した図。\ref{varargnext} メタ計算側ではこれらの Context を常に持ち歩いているので goto 文で引数を用いることはなく、 行き先は Code Gear の番号のみで指定される。 -\begin{figure}[ht] - \begin{center} -% \includegraphics[width=70mm]{./pic/MetaGear.pdf} - \end{center} - \caption{不定長引数を持つ継続} - \label{fig:varargnext} -\end{figure} +\lstinputlisting[label=varargnext, caption=不定長引数を持つ継続]{./src/varargnext.cbc} これにより Interface 間の呼び出しを C++ のメソッド呼び出しのように記述することができる。 Interface の実装は、Context 内に格納されているので、オブジェクトごとに実装を変える多様性を実現できている。
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Paper/src/varargnext.cbc Sun Apr 22 18:52:38 2018 +0900 @@ -0,0 +1,9 @@ +__code popSingleLinkedStack(struct SingleLinkedStack* stack, __code next(union Data* data, ...)) { + if (stack->top) { + data = stack->top->data; + stack->top = stack->top->next; + } else { + data = NULL; + } + goto next(data, ...); +}