# HG changeset patch
# User mir3636
# Date 1516341996 -32400
# Node ID 8edb996bce462539aecb9b989dea2a6e23afd723
# Parent bb495c751e408ebcba1ea25905e1db0b9dbad9bc
fix
diff -r bb495c751e40 -r 8edb996bce46 Slide/fig/MetaGear.pdf
Binary file Slide/fig/MetaGear.pdf has changed
diff -r bb495c751e40 -r 8edb996bce46 Slide/fig/gears_structure.pdf
Binary file Slide/fig/gears_structure.pdf has changed
diff -r bb495c751e40 -r 8edb996bce46 Slide/prosym.html
--- a/Slide/prosym.html Fri Jan 19 07:45:21 2018 +0900
+++ b/Slide/prosym.html Fri Jan 19 15:06:36 2018 +0900
@@ -86,7 +86,7 @@
@@ -221,16 +221,9 @@
Gears OS の構成図
-
+
-
-
@@ -240,8 +233,34 @@
Context とは使用される Code Gear と Data Gear を全て格納した Meta Data Gear である。
Gears OSは必要なCode Gear、Data Gearに参照したい場合、このContext を通す必要がある。
+
+
+
-
+
+
+
+
+
context の定義
+
+
/* context define */
+struct Context {
+ int codeNum; //実行可能な code の数
+ __code (**code) (struct Context*); //実行可能な code Gear のリスト
+ void* heapStart; //Data Gear の Allocate用のヒープ
+ void* heap;
+ long heapLimit;
+ int dataNum; //Data Gear の数
+ union Data **data; //Data Gear のリスト
+};
+
+
+
@@ -276,6 +295,10 @@
Interface
+
+
Stack* createSingleLinkedStack(struct Context* context) {
struct Stack* stack = new Stack();
struct SingleLinkedStack* singleLinkedStack = new SingleLinkedStack();
@@ -290,6 +313,16 @@
stack->clear = C_clearSingleLinkedStack;
return stack;
}
+
+__code pushSingleLinkedStack(struct
+ SingleLinkedStack* stack,union Data* data, __code next(...)) {
+ Element* element = new Element();
+ element->next = stack->top;
+ element->data = data;
+ stack->top = element;
+ goto next(...);
+}
+
-Context、stub Code Gear の自動生成
-
- - Gears OS ではノーマルレベルの計算の他に Context や stub などのメタ計算を記述する必要がある。
- - 現在の CbC で Gears OS を記述すると、このメタ計算の記述も行わなくてはならず、これには多くの労力を要する。
- - この記述を助けるために Context を生成する generate_context と stub Code Gear を生成する generate_stub を perl スクリプトで作成した。
-
-
-
-
-
-
-
+
stub Code Gear
- Code Gear が必要とする Data Gear を取り出す際に Context を通す必要がある。
- - しかし、メタであるContext をノーマルレベルの Code Gear から直接アクセスするのはよろしくない。
+ - しかし、Meta Data Gear である Context をノーマルレベルの Code Gear から直接アクセスするのはよろしくない。
- そこで Context から必要なデータを取り出して Code Gear に接続する、メタレベルの stub Code Gear を定義し、これを介して間接的に必要な Data Gear にアクセスする。
@@ -338,6 +360,17 @@
+
Context、stub Code Gear の自動生成
+
+ - Gears OS ではノーマルレベルの計算の他に Context や stub などのメタ計算を記述する必要がある。
+ - 現在の CbC で Gears OS を記述すると、このメタ計算の記述も行わなくてはならず、これには多くの労力を要する。
+ - この記述を助けるために Context を生成する generate_context と stub Code Gear を生成する generate_stub を perl スクリプトで作成した。
+
+
+
+
+
+
stub Code Gear の生成
- stub Code Gear は Code Gear 間の継続に挟まれ、Code Gear が必要な Data Gear を Context から取り出す処理を行うものである。
@@ -363,7 +396,7 @@
-
Context の生成
+
Context の生成
- Context は Meta Data Gear に相当し、Code Gear や Data Gear を管理している。
diff -r bb495c751e40 -r 8edb996bce46 Slide/prosym.md
--- a/Slide/prosym.md Fri Jan 19 07:45:21 2018 +0900
+++ b/Slide/prosym.md Fri Jan 19 15:06:36 2018 +0900
@@ -84,9 +84,31 @@
# Gears OS の構成図
-
+
+
+
+# Context
+- Context とは使用される Code Gear と Data Gear を全て格納した Meta Data Gear である。
+- Gears OSは必要なCode Gear、Data Gearに参照したい場合、このContext を通す必要がある。
+
+
+# context の定義
+
+```contexr
+/* context define */
+struct Context {
+ int codeNum; //実行可能な code の数
+ __code (**code) (struct Context*); //実行可能な code Gear のリスト
+ void* heapStart; //Data Gear の Allocate用のヒープ
+ void* heap;
+ long heapLimit;
+ int dataNum; //Data Gear の数
+ union Data **data; //Data Gear のリスト
+};
+```
+
-# Context
-- Context とは使用される Code Gear と Data Gear を全て格納した Meta Data Gear である。
-- Gears OSは必要なCode Gear、Data Gearに参照したい場合、このContext を通す必要がある。
-
-
-
# Interface
- Code Gear と Data Gear は Interface と呼ばれるまとまりとして記述される。
- Interface は使用される Data Gear の定義と、それに対する Code Gear の集合である。
@@ -124,6 +140,8 @@
# Interface
+- impliment の例
+
```impl
Stack* createSingleLinkedStack(struct Context* context) {
struct Stack* stack = new Stack();
@@ -139,6 +157,16 @@
stack->clear = C_clearSingleLinkedStack;
return stack;
}
+
+__code pushSingleLinkedStack(struct
+ SingleLinkedStack* stack,union Data* data, __code next(...)) {
+ Element* element = new Element();
+ element->next = stack->top;
+ element->data = data;
+ stack->top = element;
+ goto next(...);
+}
+
```
-# Context、stub Code Gear の自動生成
-- Gears OS ではノーマルレベルの計算の他に Context や stub などのメタ計算を記述する必要がある。
-- 現在の CbC で Gears OS を記述すると、このメタ計算の記述も行わなくてはならず、これには多くの労力を要する。
-- この記述を助けるために Context を生成する generate_context と stub Code Gear を生成する generate_stub を perl スクリプトで作成した。
-
-# Meta の生成
+# stub Code Gear
- Code Gear が必要とする Data Gear を取り出す際に Context を通す必要がある。
-- しかし、メタであるContext をノーマルレベルの Code Gear から直接アクセスするのはよろしくない。
+- しかし、Meta Data Gear である Context をノーマルレベルの Code Gear から直接アクセスするのはよろしくない。
- そこで Context から必要なデータを取り出して Code Gear に接続する、メタレベルの stub Code Gear を定義し、これを介して間接的に必要な Data Gear にアクセスする。
```stub
@@ -172,6 +195,12 @@
}
```
+# Context、stub Code Gear の自動生成
+- Gears OS ではノーマルレベルの計算の他に Context や stub などのメタ計算を記述する必要がある。
+- 現在の CbC で Gears OS を記述すると、このメタ計算の記述も行わなくてはならず、これには多くの労力を要する。
+- この記述を助けるために Context を生成する generate_context と stub Code Gear を生成する generate_stub を perl スクリプトで作成した。
+
+
# stub Code Gear の生成
- stub Code Gear は Code Gear 間の継続に挟まれ、Code Gear が必要な Data Gear を Context から取り出す処理を行うものである。
- stub Code Gear は Code Gear 毎に記述する必要があり、そのCode Gear の引数を見て取り出す Data Gear を選択する。