Mercurial > hg > Papers > 2021 > anatofuz-master
changeset 69:9950430ccc47
...
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 03 Feb 2021 21:29:14 +0900 (2021-02-03) |
parents | bb057c720016 |
children | 26c9cd7b9b21 |
files | paper/chapter/03-gears.tex paper/chapter/05-perl.tex paper/drawio/stubCodeGear.drawio paper/drawio/stubCodeGear.pdf paper/master_paper.pdf paper/src/meta.cbc |
diffstat | 6 files changed, 36 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/chapter/03-gears.tex Wed Feb 03 18:50:12 2021 +0900 +++ b/paper/chapter/03-gears.tex Wed Feb 03 21:29:14 2021 +0900 @@ -35,7 +35,36 @@ contextの操作をしてしまうと、メタレベルとノーマルレベルの分離をした意味がなくなってしまう為である。 ContextはGearsOSの計算で使用されるすべてのDataGearとCodeGearを持つ。 +GearsOSではCodeGearの入力は、 メタレベルから見るとContextのみである。 +実際にCodeGearを実行する際は、Contextから計算に必要なDataGearを取得する必要がある。 +これはStubCodeGearと呼ばれるMetaCodeGearが実行する。 + + +\begin{figure}[h] + \begin{center} + \includegraphics[width=160mm]{drawio/stubCodeGear.pdf} + \end{center} + \caption{Contextを参照したCodeGearのデータアクセス} + \label{fig:stubCodeGear} + \end{figure} + +次のCodeGearに継続する際、ノーマルレベルから見ると次のCodeGearを直接指定しているように見える。 +実はCodeGearは直接次のCodeGearのアドレスを参照するのではなく、 特定のMetaCodeGearに一度継続する。 +CodeGearの処理が実行した後に継続されるCodeGearは\texttt{\_\_code meta}と定義されているMetaCodeGearである。 +\texttt{\_\_code meta}の定義をソースコード\ref{src:meta}に示す。 +\texttt{\_\_code meta}はContextに格納されているCodeGearのリストから番号でCodeGearのアドレスを取得し継続する。 +継続する先のCodeGearは、呼び出し先のCodeGearの直前に実行されるStubCodeGearである。 +\lstinputlisting[label=src:meta, caption=\_\_code meta]{src/meta.cbc} + + + +CodeGearからCodeGearへの継続は、関数型プログラミングの継続先に渡すDataとCodeの組のClosureとなっている。 +シンタックスでは継続の際に引数\texttt{(...)}を渡す。 +これは処理系では特に使用していないキーワードであるが、 このClosureを持ち歩いていることを意識するために導入されている。 + + 各CodeGear、DataGearはContextはそれぞれ配列形式でContextにデータを格納する場所が用意されている。 +CodeGearが保存されている配列は\texttt{context->code}であり、 DataGearが保存されている配列は\texttt{context->data}である。 CodeGearは配列の中にStubCodeGearへの関数ポインタが格納されている。 DataGearはInterfaceを利用したgoto時の値の保存場所として配列を利用している。 これらの配列の添え字はenumの番号である。 @@ -58,9 +87,6 @@ OSが持たなければならない割り込みのフラグなどはKContextに置かれている。 GearsOSのメタレベルのプログラミングでは、 今処理をしているContextが誰のContextであるかを強く意識する必要がある。 -GearsOSではCodeGearの入力は、 メタレベルから見るとContextのみである。 -実際にCodeGearを実行する際は、Contextから計算に必要なDataGearを取得する必要がある。 -これはStubCodeGearと呼ばれるMetaCodeGearが実行する。 \section{TaskManager} TaskManagerは性質上シングルトンである。
--- a/paper/chapter/05-perl.tex Wed Feb 03 18:50:12 2021 +0900 +++ b/paper/chapter/05-perl.tex Wed Feb 03 21:29:14 2021 +0900 @@ -35,7 +35,7 @@ 本研究では様々なメタレベルのコードを、トランスコンパイラで生成することを検討した。 -\section{Perlによるトランスコンパイラ用のライブラリ作製} +\section{トランスコンパイラ用のPerlライブラリ作製} 従来のPerlトランスコンパイラはgenerate\_stub.plとgenerate\_context.plの2種類のスクリプトで構築されていた。 これらのスクリプトはそれぞれ独立した処理を行っていた。 @@ -76,6 +76,8 @@ \end{itemize} \end{itemize} +これらはgenerate\_stub.plおよびgenerate\_context.plおよび、本研究で作製したPerlのツールセットからも呼び出される。 + \section{context.hの自動生成} GearsOSのContextの定義はcontext.hにある。 ContextはGearsOSの計算で使用されるすべてのCodeGear、 DataGearの情報を持っている。
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/drawio/stubCodeGear.drawio Wed Feb 03 21:29:14 2021 +0900 @@ -0,0 +1,1 @@ +<mxfile host="Electron" modified="2021-02-03T12:23:23.286Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/14.1.8 Chrome/87.0.4280.88 Electron/11.1.1 Safari/537.36" etag="Fi7O-gwPVag0ZrmkZ6FI" version="14.1.8" type="device"><diagram id="sop9PUUD2st_0YMJAb5H" name="ページ1">5VrbcqM4EP0aVc08OIW482hiJ/Mwu5uqbNXO7MuWYjSYGYxYLMb2fv22QFxksEPiS+JxXoIaJEun+xx1C5Bxu1jfZySd/8YCGiNdC9bImCAd/kwP/gnLprS4nl0awiwKShNuDI/Rf1QaNWnNo4AulQc5YzGPUtU4Y0lCZ1yxkSxjK/WxbyxWfzUlIe0YHmck7lr/igI+l6vQncb+iUbhvPplbMsFL0j1sFzJck4CtmqZjCkybjPGeHm1WN/SWIBX4VL2u9txt55YRhM+pMP39MuIetEfD/h3Mv77zximQ0dYL4f5SeJcrljOlm8qCDKWJwEVo2jI8FfziNPHlMzE3RU4HWxzvoihheFyyTP2o4YKFul/Ywm/I4soFhHwicx+3NNEmqW7sQttOQ+acbreuUJc4wYBR9mC8mwDj1QdHAm1jDVPNleN42pvzFtOMzVpJDJYwnroBk+4kJC+AF67AyYNILxkk2V8zkKWkHjaWH0V7uaZz4ylEuTvlPONBI/knKkuoOuIfxHdbyzZ+tq6M1nLkYvGpmoksNxWJ9H82r7XdCtaVb+BzlWjwqzdLdDY72wAj+XZjO4BWUYsJ1lI+Z7nzP7gyWhMePRTnUdfJMiuDyyCGdZBZ9tq0FmupQ5Rzkv22oqnehqvD7E+Atsxl05Qgs/+N2fVjdGycM8YHsBuui48Ut2Hq1D8T+ia34Ki31OS/bPk+VM18lN20LgfHouxtGrsj0catxoGcCzXXpm3ORjHsH3Q58VsO4x3RHtX844gZpZjKXGl2101qwWvrWZYs3bH8EFqpu+Xs4Qlx9Wvlno1WvasfnmuqyjYjafVhh0qVrQeaBYBTjSTxq5mvWgnO4q0mQOlDXsHattBcWGeR4J+LXq7W9sG7qG33UvvUyUr+Lz0xq+jt6YbKr2xfbH0tobSW39LelsdejeMvETqjbCpcg9rzo3VZZ9xVvY5HZRDBtTRbbIQ2CVPy7RP7AAGrkJL4igE7CYzgENEuy/AiqCiHcsbiygIykqDggKTp2IoQYlU5KjFuiwfWRMxFrB3Kd003GtH8JHtqS4y9a489qmjcSr39NTF71AcX1S7vQcFxMZACXxTBaxm2SKnUhuV9czFHpt4g+TQ7aGbfapSA3dzSsbnNNsqR38ZyB397SHv7kD4BtrlNqTBj5Bj1f80yRdoaiAXI9cvLnTkegWLyoano6kDJuR7aGqh8RR544/XsveNDDU4nJ5jTNwTGdbJ9j6tA/359j596OanVgX1TvieNz/3IjY/t6MLE8JJb/5/QQKsnq4Z2sDTtZPJr25eQIKpcsx5jmTvtvDG3kUwz7sG5tk9ic95mYc7MOutxGcGGECiMapL8SKHmUEiCqlCkclYk2tJTUxddR42+/JWvc99p6vMu8WZIdwXJWkuDp8DIhJXLWydIB/6nqlMXSErhdzUvUOeLS58SFKdawkEwxvwdso7a5LaPaY0RRiwnJ86Dlx5Ae6XFltGhlvWMVDBOK3Kxka+i8a46uVda9AYfR9oaGcNmm7Na4mgKdynobHZorqNPF84TtatE2FxXeT7jfevxY+u6kfLGvju6nR7QLdGkdv2tfik/rBpz/vEvuOkV7gEms1Xa+VnLM23f8b0fw==</diagram></mxfile> \ No newline at end of file