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
Binary file paper/master_paper.pdf has changed
--- /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);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/src/unionOrder1.c	Fri Feb 05 22:12:16 2021 +0900
@@ -0,0 +1,8 @@
+union Data {
+  struct A {
+    struct B b;
+  } A;
+  struct B {
+    int i;
+  } B;
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/src/unionOrder2.cc	Fri Feb 05 22:12:16 2021 +0900
@@ -0,0 +1,8 @@
+union Data {
+ struct B {
+    int i;
+  } B;
+  struct A {
+    struct B b;
+  } A;
+};