eoml0001
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* Essen Object Management Library #0001
-(by [[K]], 2017.01.31)
** 基本型
-通常データ:
--intとかdoubleとか文字列型とか、まあなんでも。
--サイズが規定できればよい。型のタイプも記述する。
--可変長でもあってもいい。
-メタデータ:
--通常データと似た扱いを受けるが、多少の追加サポートがあ...
--(dir) (memberTable) (namelessDir)
** ディレクトリ
-Essenにおけるディレクトリは、構造体と配列を融合したよう...
-たとえば以下のようなデータを考える。
(a:1 b:2)
-このデータをシステムは以下のように管理する。
p0: (dir)[p1 p2 p3] // p1がメンバ名情報, p2とp3は値.
p1: (memberTable)[2 p4 p5] // 2はメンバ総数, p4とp5は名前.
p2: (int)[1]
p3: (int)[2]
p4: (string)["a"]
p5: (string)["b"]
-このとき、さらに以下のような記述をしたとする。
(a:3 b:1)
-このデータは次のように管理される。
p6: (dir)[p1 p7 p2]
p7: (int)[3]
--つまり、データは共有される
---ただしデフォルトで自動共有されるためには条件がある
---しかし明示的に共有を指示すれば確実に共有部分は共有される
---自動共有がデフォルトではない最大の理由は、重複排除のた...
---もちろんハッシュ値などを使って高速化するが、それでも何...
-さらに以下のようなケースを考える。
(0:(a:1 b:2) 1:(a:3 b:1))
-このデータは次のように管理される。
p8: (dir)[p9 p0 p6]
p9: (memberTable)[2 p10 p2]
p10: (int)[0]
-ただし、メンバ名が(int)で0,1,2,...の場合に限って簡略表現...
-メンバ名を持たないディレクトリも作れる。
((a:1 b:2) (a:3 b:1)) → (namelessDir) [2 p0 p6]
--まあそれぞれの名前をnulにしても同じことはできる。しかし...
-(註)初期のバージョンのEssenでは双方向リストを使ってこ...
** 配列
-メモリをより節約したいという観点では、ディレクトリのメン...
--でもそんなことをしても大して節約できないのかもしれない。
--ということでまずは検討してみる。効果が大したことなけれ...
-p8の内容を書きかえてみる。
p11: (array) [p9 p1 p2 p3 p7 p2]
--これでどれだけ節約されたのか?
--p0やp6の内容はいらなくなった。それでオブジェクト2つが節...
--微妙だなあ。役に立っていると言えばそうなんだけど、内部...
-よし、悩んだときは作らない!
** サイズの省略
-(memberTable)でサイズを明示する必要ってあるだろうか?デ...
-(namelessDir)にもサイズは不要だろう。
** 双方向リストのサポート
-Essenの式評価アルゴリズムを考えると、要素の挿入や削除が...
-双方向リストのノードは、前後が誰であるかという情報を持っ...
-となれば、値だけを別のオブジェクトに追い出すことによって...
(doublyLinkedList) [p0 p1 p2]
--p0がprev, p1はnext, p2がvalueへのポインタ
終了行:
* Essen Object Management Library #0001
-(by [[K]], 2017.01.31)
** 基本型
-通常データ:
--intとかdoubleとか文字列型とか、まあなんでも。
--サイズが規定できればよい。型のタイプも記述する。
--可変長でもあってもいい。
-メタデータ:
--通常データと似た扱いを受けるが、多少の追加サポートがあ...
--(dir) (memberTable) (namelessDir)
** ディレクトリ
-Essenにおけるディレクトリは、構造体と配列を融合したよう...
-たとえば以下のようなデータを考える。
(a:1 b:2)
-このデータをシステムは以下のように管理する。
p0: (dir)[p1 p2 p3] // p1がメンバ名情報, p2とp3は値.
p1: (memberTable)[2 p4 p5] // 2はメンバ総数, p4とp5は名前.
p2: (int)[1]
p3: (int)[2]
p4: (string)["a"]
p5: (string)["b"]
-このとき、さらに以下のような記述をしたとする。
(a:3 b:1)
-このデータは次のように管理される。
p6: (dir)[p1 p7 p2]
p7: (int)[3]
--つまり、データは共有される
---ただしデフォルトで自動共有されるためには条件がある
---しかし明示的に共有を指示すれば確実に共有部分は共有される
---自動共有がデフォルトではない最大の理由は、重複排除のた...
---もちろんハッシュ値などを使って高速化するが、それでも何...
-さらに以下のようなケースを考える。
(0:(a:1 b:2) 1:(a:3 b:1))
-このデータは次のように管理される。
p8: (dir)[p9 p0 p6]
p9: (memberTable)[2 p10 p2]
p10: (int)[0]
-ただし、メンバ名が(int)で0,1,2,...の場合に限って簡略表現...
-メンバ名を持たないディレクトリも作れる。
((a:1 b:2) (a:3 b:1)) → (namelessDir) [2 p0 p6]
--まあそれぞれの名前をnulにしても同じことはできる。しかし...
-(註)初期のバージョンのEssenでは双方向リストを使ってこ...
** 配列
-メモリをより節約したいという観点では、ディレクトリのメン...
--でもそんなことをしても大して節約できないのかもしれない。
--ということでまずは検討してみる。効果が大したことなけれ...
-p8の内容を書きかえてみる。
p11: (array) [p9 p1 p2 p3 p7 p2]
--これでどれだけ節約されたのか?
--p0やp6の内容はいらなくなった。それでオブジェクト2つが節...
--微妙だなあ。役に立っていると言えばそうなんだけど、内部...
-よし、悩んだときは作らない!
** サイズの省略
-(memberTable)でサイズを明示する必要ってあるだろうか?デ...
-(namelessDir)にもサイズは不要だろう。
** 双方向リストのサポート
-Essenの式評価アルゴリズムを考えると、要素の挿入や削除が...
-双方向リストのノードは、前後が誰であるかという情報を持っ...
-となれば、値だけを別のオブジェクトに追い出すことによって...
(doublyLinkedList) [p0 p1 p2]
--p0がprev, p1はnext, p2がvalueへのポインタ
ページ名: