Mercurial > hg > Papers > 2021 > anatofuz-master
changeset 97:45bd5338dc82
update
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 05 Feb 2021 22:12:16 +0900 |
parents | 608fc88aeca6 |
children | a74c49fd0359 |
files | paper/chapter/05-perl.tex paper/chapter/conclusion.tex paper/master_paper.pdf paper/src/nonreplaceMcMeta.cbc paper/src/replaceMcMeta.cbc paper/src/unionOrder1.c paper/src/unionOrder2.cc |
diffstat | 7 files changed, 57 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/chapter/05-perl.tex Fri Feb 05 21:32:51 2021 +0900 +++ b/paper/chapter/05-perl.tex Fri Feb 05 22:12:16 2021 +0900 @@ -192,7 +192,12 @@ これらの処理はPerlのクロージャの形で表現しており、 トランスパイラ側では共通のAPIで呼び出すことが可能である。 各Gode Gearが\texttt{goto文}を呼び出したタイミングでreplaceMetaを呼び出し、 ルールにしたがってgoto文を書き換える。 変換するCodeGearがルールになかった場合は、 デフォルト設定が呼び出される。 +ソースコード\ref{src:noreplaceMeta}に、meta.pmの設定を書かなかった場合の変換結果を示す。 +ソースコード\ref{src:replaceMcMeta}では、meta.pmの設定を置いた場合の変換結果である。 +継続先がmetaからmcMetaに切り替わっていることが解る。 +\lstinputlisting[label=src:noreplaceMeta, caption=通常のthinkingPhilsImplのメタレベルのコード]{src/nonreplaceMcMeta.cbc} +\lstinputlisting[label=src:replaceMcMeta, caption=meta.pmによってmcMetaへと継続が切り替わったthinkingPhilsImpl]{src/replaceMcMeta.cbc} \section{コンパイルタイムでのコンストラクタの自動生成}
--- a/paper/chapter/conclusion.tex Fri Feb 05 21:32:51 2021 +0900 +++ b/paper/chapter/conclusion.tex Fri Feb 05 22:12:16 2021 +0900 @@ -2,3 +2,31 @@ \section{今後の課題} +\subsection{context.h定義時の依存関係の解決} + +context.hの自動生成機能を実装したが、 union Data型の定義時にならべるDataGearに対応する構造体の順序が問題になる。 +ソースコード\ref{src:unionOrder1}では、構造体Aはメンバとして構造体Bを参照している。 +\lstinputlisting[label=src:unionOrder1, caption=エラーが出るunionの定義]{src/unionOrder1.c} +ポインタではなく値そのものを使う場合、 C言語では使用する型の定義は、使う前に書かなければならない。 +そのため本来はソースコード\ref{src:unionOrder2}の様に定義する必要がある。 +\lstinputlisting[label=src:unionOrder2, caption=構造体の定義順を考慮したunionの定義]{src/unionOrder2.cc} +現在のGearsOSではDataGearの構造体の相互参照は基本はポインタで行われている。 +その為コンパイル時に致命的なエラーは存在していないが、 実装の手法によってはDataGearそのものを内包したいケースがある。 +この場合はcontext.hで定義する構造体の依存関係を調査し、適切に出力する必要がある。 + +\subsection{xv6上での完全な動作} + +\subsection{Perlトランスパイラが提供する機能のGearsOS組み込み} +今のGearsOSはコンパイル時にPerlスクリプトによってメタ計算が変換されている。 +使用するDataGearの種類を探し、context.hの作製やCodeGearに一意にふる番号の作製などは、本来はOS自体が持つべき機能である。 +例えば使用するべきDataGearの種類を探し、context.hを作製するのは、 現状のOSのリンカとローダーに近い役割をしている。 +これらの機能自体をCbC、GearsOSで記述し、GearsOSのコア機能に組み込みたい。 + +GearsOS自身でプログラム可能となると、GearsOSのモデル検査機能が使えるようになる。 +これは、OSの動作の信頼性の保証につながる。 +さらにGearsOSの機能として組み込むと、GearsOSの中で新たにGearsOSのプログラムを作ることも可能となる。 +これはGearsOSの拡張性の強化につながる。 + +GearsOSにPerlスクリプトの機能を組み込む場合は、CodeGear、DataGearをさらにGearsOSの中から扱うAPIが必要である。 +Perlスクリプトが提供している機能は、それ自身が巨大なメタ計算であるので、 MetaCodeGearのさらなる充実が必要となる。 +例えばダイナミックにMetaCodeGearを生成するAPIなどがあれば、PerlインタプリタをGearsOSのビルドシステムから落とすことが可能ではないかと考える。 \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/nonreplaceMcMeta.cbc Fri Feb 05 22:12:16 2021 +0900 @@ -0,0 +1,4 @@ +__code thinkingPhilsImpl(struct Context *context,struct PhilsImpl* phils, struct Fork* fork, enum Code next) { + printf("%d: thinking\n", phils->self); + goto meta(context, C_pickup_lforkPhilsImpl); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/replaceMcMeta.cbc Fri Feb 05 22:12:16 2021 +0900 @@ -0,0 +1,4 @@ +__code thinkingPhilsImpl(struct Context *context,struct PhilsImpl* phils, struct Fork* fork, enum Code next) { + printf("%d: thinking\n", phils->self); + goto mcMeta(context, C_pickup_lforkPhilsImpl); +}