# HG changeset patch
# User Daichi TOMA
# Date 1391489433 -32400
# Node ID 6fbc1771d2be00e6c5f7088d1e70f4a2d47c53bd
# Parent fcf49a1241af41ca445c0c1b9d35363028215b10
fix
diff -r fcf49a1241af -r 6fbc1771d2be paper/images/jungle.graffle
--- a/paper/images/jungle.graffle Tue Feb 04 10:01:03 2014 +0900
+++ b/paper/images/jungle.graffle Tue Feb 04 13:50:33 2014 +0900
@@ -121,8 +121,8 @@
3198
Points
- {393.16676129438565, 190.48826232931489}
- {395.41148871176597, 195.19331499751848}
+ {392.868465885842, 190.6653737405594}
+ {394.85370451835564, 195.44906871798034}
Style
@@ -156,8 +156,8 @@
3199
Points
- {385.38123890897356, 173.13732030339335}
- {388.09226779795256, 178.16116159337969}
+ {385.09847544577173, 173.32841223286351}
+ {387.53693930401136, 178.45931453356621}
Style
@@ -191,8 +191,8 @@
3200
Points
- {377.58403030661538, 190.36449828893686}
- {380.13493876403339, 195.27993527094597}
+ {377.29521598444688, 190.55181596636166}
+ {379.57699899004655, 195.56482770149145}
Style
@@ -226,8 +226,8 @@
3201
Points
- {371.5885442817243, 190.42644245787722}
- {369.19305568507207, 195.23554326832524}
+ {371.8825826948123, 190.60910684379755}
+ {369.75186862634303, 195.50627897420193}
Style
@@ -261,8 +261,8 @@
3202
Points
- {379.20656869884817, 173.19928066945013}
- {376.65566024007637, 178.11471861739057}
+ {379.49538258517617, 173.38659811417014}
+ {377.21359918353176, 178.39961084541042}
Style
@@ -500,8 +500,8 @@
3184
Points
- {302.93370582396807, 142.4774454038498}
- {305.19481672826561, 147.18038435764862}
+ {302.62020429860547, 142.66441234788482}
+ {304.60681848277289, 147.44742572104019}
Style
@@ -535,8 +535,8 @@
3185
Points
- {295.14521674670488, 125.12723152828863}
- {297.87128802900122, 130.14775314111927}
+ {294.84968292979653, 125.32764713692139}
+ {297.28919880446153, 130.45793303590912}
Style
@@ -570,8 +570,8 @@
3186
Points
- {287.34900735009649, 142.35410078785719}
- {289.91548031109056, 147.26658668842964}
+ {287.04658804989316, 142.55098344379445}
+ {289.329528647019, 147.563351762575}
Style
@@ -605,8 +605,8 @@
3187
Points
- {281.32257155831468, 142.41579763564354}
- {278.91106570196342, 147.22235159561038}
+ {281.63103302918319, 142.60820818145294}
+ {279.49905285167807, 147.50471474659156}
Style
@@ -640,8 +640,8 @@
3188
Points
- {288.94159131719738, 125.1888829342785}
- {286.37511802636209, 130.10136968333916}
+ {289.2440104909719, 125.38576556958429}
+ {286.96106948716618, 130.3981348364093}
Style
@@ -815,31 +815,307 @@
Graphics
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 3175
+
+ ID
+ 3170
+ Points
+
+ {212.23439211271383, 122.73711816473245}
+ {214.11745264987962, 127.58123680609825}
+
+ Style
+
+ stroke
+
+ HeadArrow
+ 0
+ HeadScale
+ 0.5
+ Legacy
+
+ TailArrow
+ 0
+
+
+ Tail
+
+ ID
+ 3178
+
+
+
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 3178
+
+ ID
+ 3171
+ Points
+
+ {204.47162482201404, 105.40645793925545}
+ {206.80398155198597, 110.60971472354436}
+
+ Style
+
+ stroke
+
+ HeadArrow
+ 0
+ HeadScale
+ 0.5
+ Legacy
+
+ TailArrow
+ 0
+
+
+ Tail
+
+ ID
+ 3180
+
+
+
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 3176
+
+ ID
+ 3172
+ Points
+
+ {196.66563925534189, 122.62807370661915}
+ {198.84236617332857, 127.70957268959035}
+
+ Style
+
+ stroke
+
+ HeadArrow
+ 0
+ HeadScale
+ 0.5
+ Legacy
+
+ TailArrow
+ 0
+
+
+ Tail
+
+ ID
+ 3179
+
+
+
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 3177
+
+ ID
+ 3173
+ Points
+
+ {191.51458653752655, 122.68326656368441}
+ {189.48762338842479, 127.64494318708981}
+
+ Style
+
+ stroke
+
+ HeadArrow
+ 0
+ HeadScale
+ 0.5
+ Legacy
+
+ TailArrow
+ 0
+
+
+ Tail
+
+ ID
+ 3179
+
+
+
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 3179
+
+ ID
+ 3174
+ Points
+
+ {199.12495920560838, 105.46285587394276}
+ {196.94823187247084, 110.54435578984261}
+
+ Style
+
+ stroke
+
+ HeadArrow
+ 0
+ HeadScale
+ 0.5
+ Legacy
+
+ TailArrow
+ 0
+
+
+ Tail
+
+ ID
+ 3180
+
+
+
Bounds
- {{166.25, 215}, {71, 14}}
+ {{211.38675213675191, 127.33043478260851}, {10.86324786324781, 12.669565217391387}}
Class
ShapedGraphic
- FitText
- YES
- Flow
- Resize
ID
- 3168
+ 3175
Shape
- Rectangle
+ Circle
Style
- fill
-
- Draws
- NO
-
shadow
Draws
NO
- stroke
+
+ Text
+
+ VerticalPad
+ 0
+
+
+
+ Bounds
+ {{196.3183760683757, 127.33043478260851}, {10.86324786324781, 12.669565217391387}}
+ Class
+ ShapedGraphic
+ ID
+ 3176
+ Shape
+ Circle
+ Style
+
+ shadow
+
+ Draws
+ NO
+
+
+ Text
+
+ VerticalPad
+ 0
+
+
+
+ Bounds
+ {{181.24999999999972, 127.33043478260851}, {10.86324786324781, 12.669565217391387}}
+ Class
+ ShapedGraphic
+ ID
+ 3177
+ Shape
+ Circle
+ Style
+
+ shadow
+
+ Draws
+ NO
+
+
+ Text
+
+ VerticalPad
+ 0
+
+
+
+ Bounds
+ {{204.37820512820485, 110.16521739130434}, {10.86324786324781, 12.669565217391387}}
+ Class
+ ShapedGraphic
+ ID
+ 3178
+ Shape
+ Circle
+ Style
+
+ shadow
+
+ Draws
+ NO
+
+
+ Text
+
+ VerticalPad
+ 0
+
+
+
+ Bounds
+ {{188.608974358974, 110.16521739130434}, {10.86324786324781, 12.669565217391387}}
+ Class
+ ShapedGraphic
+ ID
+ 3179
+ Shape
+ Circle
+ Style
+
+ shadow
+
+ Draws
+ NO
+
+
+ Text
+
+ VerticalPad
+ 0
+
+
+
+ Bounds
+ {{196.3183760683757, 93}, {10.86324786324781, 12.669565217391387}}
+ Class
+ ShapedGraphic
+ ID
+ 3180
+ Shape
+ Circle
+ Style
+
+ shadow
Draws
NO
@@ -847,346 +1123,13 @@
Text
- Pad
- 0
- Text
- {\rtf1\ansi\ansicpg1252\cocoartf1265
-\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
-{\colortbl;\red255\green255\blue255;}
-\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
-
-\f0\fs24 \cf0 tree_name_2}
VerticalPad
0
- Wrap
- NO
-
-
- Class
- Group
- Graphics
-
-
- Class
- LineGraphic
- Head
-
- ID
- 3175
-
- ID
- 3170
- Points
-
- {212.73393936395377, 190.44488176814721}
- {215.04484978355103, 195.14309346074478}
-
- Style
-
- stroke
-
- HeadArrow
- 0
- HeadScale
- 0.5
- Legacy
-
- TailArrow
- 0
-
-
- Tail
-
- ID
- 3178
-
-
-
- Class
- LineGraphic
- Head
-
- ID
- 3178
-
- ID
- 3171
- Points
-
- {204.90878671983529, 173.11737714131692}
- {207.6496246107962, 178.13485872801172}
-
- Style
-
- stroke
-
- HeadArrow
- 0
- HeadScale
- 0.5
- Legacy
-
- TailArrow
- 0
-
-
- Tail
-
- ID
- 3180
-
-
-
- Class
- LineGraphic
- Head
-
- ID
- 3176
-
- ID
- 3172
- Points
-
- {197.12314061467654, 190.33719966007203}
- {199.71508157627881, 195.24538106014856}
-
- Style
-
- stroke
-
- HeadArrow
- 0
- HeadScale
- 0.5
- Legacy
-
- TailArrow
- 0
-
-
- Tail
-
- ID
- 3179
-
-
-
- Class
- LineGraphic
- Head
-
- ID
- 3177
-
- ID
- 3173
- Points
-
- {192.0349009612307, 190.9320564350065}
- {190.35890515460727, 196.30679541241619}
-
- Style
-
- stroke
-
- HeadArrow
- 0
- HeadScale
- 0.5
- Legacy
-
- TailArrow
- 0
-
-
- Tail
-
- ID
- 3179
-
-
-
- Class
- LineGraphic
- Head
-
- ID
- 3179
-
- ID
- 3174
- Points
-
- {199.61878100549134, 173.71291188053729}
- {197.78424119887492, 179.20316514455661}
-
- Style
-
- stroke
-
- HeadArrow
- 0
- HeadScale
- 0.5
- Legacy
-
- TailArrow
- 0
-
-
- Tail
-
- ID
- 3180
-
-
-
- Bounds
- {{211.38675213675191, 195.33043478260851}, {10.86324786324781, 12.669565217391387}}
- Class
- ShapedGraphic
- ID
- 3175
- Shape
- Circle
- Style
-
- shadow
-
- Draws
- NO
-
-
- Text
-
- VerticalPad
- 0
-
-
-
- Bounds
- {{196.3183760683757, 195.33043478260851}, {10.86324786324781, 12.669565217391387}}
- Class
- ShapedGraphic
- ID
- 3176
- Shape
- Circle
- Style
-
- shadow
-
- Draws
- NO
-
-
- Text
-
- VerticalPad
- 0
-
-
-
- Bounds
- {{181.24999999999972, 195.33043478260851}, {10.86324786324781, 12.669565217391387}}
- Class
- ShapedGraphic
- ID
- 3177
- Shape
- Circle
- Style
-
- shadow
-
- Draws
- NO
-
-
- Text
-
- VerticalPad
- 0
-
-
-
- Bounds
- {{204.37820512820485, 178.16521739130434}, {10.86324786324781, 12.669565217391387}}
- Class
- ShapedGraphic
- ID
- 3178
- Shape
- Circle
- Style
-
- shadow
-
- Draws
- NO
-
-
- Text
-
- VerticalPad
- 0
-
-
-
- Bounds
- {{188.608974358974, 178.16521739130434}, {10.86324786324781, 12.669565217391387}}
- Class
- ShapedGraphic
- ID
- 3179
- Shape
- Circle
- Style
-
- shadow
-
- Draws
- NO
-
-
- Text
-
- VerticalPad
- 0
-
-
-
- Bounds
- {{196.3183760683757, 161}, {10.86324786324781, 12.669565217391387}}
- Class
- ShapedGraphic
- ID
- 3180
- Shape
- Circle
- Style
-
- shadow
-
- Draws
- NO
-
-
- Text
-
- VerticalPad
- 0
-
-
-
- ID
- 3169
ID
- 3167
+ 3169
Class
@@ -1194,382 +1137,325 @@
Graphics
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 3161
+
+ ID
+ 3156
+ Points
+
+ {120.9960036843806, 107.73109022469576}
+ {122.887626095363, 112.56935994276094}
+
+ Style
+
+ stroke
+
+ HeadArrow
+ 0
+ HeadScale
+ 0.5
+ Legacy
+
+ TailArrow
+ 0
+
+
+ Tail
+
+ ID
+ 3164
+
+
+
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 3164
+
+ ID
+ 3157
+ Points
+
+ {113.23896506767106, 90.396058444237866}
+ {115.5853366182148, 95.58853254636476}
+
+ Style
+
+ stroke
+
+ HeadArrow
+ 0
+ HeadScale
+ 0.5
+ Legacy
+
+ TailArrow
+ 0
+
+
+ Tail
+
+ ID
+ 3166
+
+
+
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 3162
+
+ ID
+ 3158
+ Points
+
+ {105.43135313053675, 107.61907248914966}
+ {107.62039419092794, 112.69144828400718}
+
+ Style
+
+ stroke
+
+ HeadArrow
+ 0
+ HeadScale
+ 0.5
+ Legacy
+
+ TailArrow
+ 0
+
+
+ Tail
+
+ ID
+ 3165
+
+
+
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 3163
+
+ ID
+ 3159
+ Points
+
+ {100.21433824604047, 107.65558966808754}
+ {98.148799158926337, 112.5908876751856}
+
+ Style
+
+ stroke
+
+ HeadArrow
+ 0
+ HeadScale
+ 0.5
+ Legacy
+
+ TailArrow
+ 0
+
+
+ Tail
+
+ ID
+ 3165
+
+
+
+ Class
+ LineGraphic
+ Head
+
+ ID
+ 3165
+
+ ID
+ 3160
+ Points
+
+ {107.82663198363507, 90.434957440718676}
+ {105.61167204009291, 95.489122381282726}
+
+ Style
+
+ stroke
+
+ HeadArrow
+ 0
+ HeadScale
+ 0.5
+ Legacy
+
+ TailArrow
+ 0
+
+
+ Tail
+
+ ID
+ 3166
+
+
+
Bounds
- {{76, 167}, {71, 14}}
+ {{120.13675213675191, 112.33043478260851}, {10.86324786324781, 12.669565217391387}}
Class
ShapedGraphic
- FitText
- YES
- Flow
- Resize
ID
- 3154
+ 3161
Shape
- Rectangle
+ Circle
Style
- fill
-
- Draws
- NO
-
shadow
Draws
NO
- stroke
-
- Draws
- NO
-
Text
- Pad
+ VerticalPad
0
- Text
- {\rtf1\ansi\ansicpg1252\cocoartf1265
-\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
-{\colortbl;\red255\green255\blue255;}
-\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
-
-\f0\fs24 \cf0 tree_name_1}
+
+
+
+ Bounds
+ {{105.0683760683757, 112.33043478260851}, {10.86324786324781, 12.669565217391387}}
+ Class
+ ShapedGraphic
+ ID
+ 3162
+ Shape
+ Circle
+ Style
+
+ shadow
+
+ Draws
+ NO
+
+
+ Text
+
+ VerticalPad
+ 0
+
+
+
+ Bounds
+ {{89.999999999999716, 112.33043478260851}, {10.86324786324781, 12.669565217391387}}
+ Class
+ ShapedGraphic
+ ID
+ 3163
+ Shape
+ Circle
+ Style
+
+ shadow
+
+ Draws
+ NO
+
+
+ Text
+
VerticalPad
0
- Wrap
- NO
+
+
+ Bounds
+ {{113.12820512820485, 95.165217391304338}, {10.86324786324781, 12.669565217391387}}
+ Class
+ ShapedGraphic
+ ID
+ 3164
+ Shape
+ Circle
+ Style
+
+ shadow
+
+ Draws
+ NO
+
+
+ Text
+
+ VerticalPad
+ 0
+
+ Bounds
+ {{97.358974358973995, 95.165217391304338}, {10.86324786324781, 12.669565217391387}}
Class
- Group
- Graphics
-
-
- Class
- LineGraphic
- Head
-
- ID
- 3161
-
- ID
- 3156
- Points
-
- {122.26077883859962, 142.58396497817034}
- {124.36353291478935, 147.32047739235713}
-
- Style
-
- stroke
-
- HeadArrow
- 0
- HeadScale
- 0.5
- Legacy
-
- TailArrow
- 0
-
-
- Tail
-
- ID
- 3164
-
-
-
- Class
- LineGraphic
- Head
-
- ID
- 3164
-
- ID
- 3157
- Points
-
- {114.47266492565952, 125.24747546196562}
- {117.02398150594422, 130.32209762353656}
-
- Style
-
- stroke
-
- HeadArrow
- 0
- HeadScale
- 0.5
- Legacy
-
- TailArrow
- 0
-
-
- Tail
-
- ID
- 3166
-
-
-
- Class
- LineGraphic
- Head
-
- ID
- 3162
-
- ID
- 3158
- Points
-
- {106.67529249692554, 142.47049585741689}
- {109.07156792496966, 147.43010387582825}
-
- Style
-
- stroke
-
- HeadArrow
- 0
- HeadScale
- 0.5
- Legacy
-
- TailArrow
- 0
-
-
- Tail
-
- ID
- 3165
-
-
-
- Class
- LineGraphic
- Head
-
- ID
- 3163
-
- ID
- 3159
- Points
-
- {101.37792574374052, 142.74325440008917}
- {99.43429487644292, 147.77277321324544}
-
- Style
-
- stroke
-
- HeadArrow
- 0
- HeadScale
- 0.5
- Legacy
-
- TailArrow
- 0
-
-
- Tail
-
- ID
- 3165
-
-
+ ShapedGraphic
+ ID
+ 3165
+ Shape
+ Circle
+ Style
+
+ shadow
- Class
- LineGraphic
- Head
-
- ID
- 3165
-
- ID
- 3160
- Points
-
- {108.97801186231995, 125.52023637262263}
- {106.87943125594957, 130.66723651772267}
-
- Style
-
- stroke
-
- HeadArrow
- 0
- HeadScale
- 0.5
- Legacy
-
- TailArrow
- 0
-
-
- Tail
-
- ID
- 3166
-
+ Draws
+ NO
-
- Bounds
- {{121.13675213675191, 147.33043478260851}, {10.86324786324781, 12.669565217391387}}
- Class
- ShapedGraphic
- ID
- 3161
- Shape
- Circle
- Style
-
- shadow
-
- Draws
- NO
-
-
- Text
-
- VerticalPad
- 0
-
-
-
- Bounds
- {{106.0683760683757, 147.33043478260851}, {10.86324786324781, 12.669565217391387}}
- Class
- ShapedGraphic
- ID
- 3162
- Shape
- Circle
- Style
-
- shadow
-
- Draws
- NO
-
-
- Text
-
- VerticalPad
- 0
-
-
+
+ Text
+
+ VerticalPad
+ 0
+
+
+
+ Bounds
+ {{105.0683760683757, 78}, {10.86324786324781, 12.669565217391387}}
+ Class
+ ShapedGraphic
+ ID
+ 3166
+ Shape
+ Circle
+ Style
+
+ shadow
- Bounds
- {{90.999999999999716, 147.33043478260851}, {10.86324786324781, 12.669565217391387}}
- Class
- ShapedGraphic
- ID
- 3163
- Shape
- Circle
- Style
-
- shadow
-
- Draws
- NO
-
-
- Text
-
- VerticalPad
- 0
-
-
-
- Bounds
- {{114.12820512820485, 130.16521739130434}, {10.86324786324781, 12.669565217391387}}
- Class
- ShapedGraphic
- ID
- 3164
- Shape
- Circle
- Style
-
- shadow
-
- Draws
- NO
-
-
- Text
-
- VerticalPad
- 0
-
+ Draws
+ NO
-
- Bounds
- {{98.358974358973995, 130.16521739130434}, {10.86324786324781, 12.669565217391387}}
- Class
- ShapedGraphic
- ID
- 3165
- Shape
- Circle
- Style
-
- shadow
-
- Draws
- NO
-
-
- Text
-
- VerticalPad
- 0
-
-
-
- Bounds
- {{106.0683760683757, 113}, {10.86324786324781, 12.669565217391387}}
- Class
- ShapedGraphic
- ID
- 3166
- Shape
- Circle
- Style
-
- shadow
-
- Draws
- NO
-
-
- Text
-
- VerticalPad
- 0
-
-
-
- ID
- 3155
+
+ Text
+
+ VerticalPad
+ 0
+
ID
- 3153
+ 3155
Bounds
- {{60, 81.25}, {365, 167.75}}
+ {{58, 197}, {365, 167.75}}
Class
ShapedGraphic
ID
@@ -1647,7 +1533,7 @@
MasterSheets
ModificationDate
- 2014-02-02 09:45:07 +0000
+ 2014-02-04 03:58:40 +0000
Modifier
Daichi TOMA
NotesVisible
@@ -1723,7 +1609,7 @@
ExpandedCanvases
Frame
- {{953, 442}, {1031, 976}}
+ {{1073, 394}, {1031, 976}}
ListView
OutlineWidth
diff -r fcf49a1241af -r 6fbc1771d2be slides/master.html
--- a/slides/master.html Tue Feb 04 10:01:03 2014 +0900
+++ b/slides/master.html Tue Feb 04 13:50:33 2014 +0900
@@ -101,16 +101,17 @@
実行時型エラーがない
- Haskellは、評価の際に型に起因するエラーが起きない
+ Haskellは、実行時に型に起因するエラーが起きない
- [1,2,3]のリストに文字'a'を追加することはできない
+ [1,2,3]のリストに文字'a'を追加することや、['a','b','c']のリストに 1 を追加することはできない
コンパイル時にエラーになる
abc = 'a' : [1,2,3]
+cde = 1 : ['a','b','c']
@@ -130,11 +131,20 @@
getChildren node path = elems (children (getNode node path))
+ getChildren は、Node と Path を受け取って Node のリストを返すことがわかる
*Jungle> :type getChildren
getChildren :: Node -> Path -> [Node]
+
+ 他の型の情報を利用して推論できる
+
+
+getNode :: Node -> Path -> Node
+elems :: Map k a -> [a]
+children :: Node -> Map Int Node
+
@@ -142,17 +152,52 @@
モナド
- 文脈を保ったまま関数を繋いでいくことができる
+ モナドを使うことで文脈を保ったまま関数を繋いでいくことができる
+
+
+ Maybe モナドを用いて説明する
+
+
+ Maybe 型は、失敗する可能性を扱うデータ型である
data Maybe a = Nothing | Just a
+
+
+
+
+ モナド - 型クラス
+
+
+ Maybe 型は、モナド型クラスのインスタンスである。
+
+
+ 型クラスは、オブジェクト指向のクラスとは異なる。
+
+
+ 型の振る舞いを定義するもので、今回は Maybe 型はモナドとして振る舞えるという意味になる。
+
instance Monad Maybe where
return x = Just x
Nothing >>= f = Nothing
Just x >>= f = f x
+
+ モナドとして振る舞うためには2つの関数を定義する。
+
+ return と、>>= (bind)である。
+
+
+
+
+
+ モナド - 関数を繋ぐ
+
+
+ 失敗するかもしれないという文脈を保ったまま関数を繋ぐ
+
up 4 = Nothing
up n = Just (n + 1)
@@ -163,6 +208,12 @@
return 3 >>= down >>= down >>= up >>= up
+
+instance Monad Maybe where
+ return x = Just x
+ Nothing >>= f = Nothing
+ Just x >>= f = f x
+
@@ -184,46 +235,24 @@
-
- マルチコアプロセッサ
-
-
- 現在、CPU はマルチコア化が進んでいる。
-
-
- マルチコアプロセッサで線形に性能向上をするためには、処理全体で高い並列度を保つ必要性(アムダール則)
-
-
- 並列度が 80 % の場合、どんなにコア数を増やしても性能向上は5倍まで
-
-
-
-
-
- 並列データベース
+ 非破壊的木構造
データベースを線形に性能向上させたければ、各コアからデータに同時にアクセスできるようにし並列度を高める
- 非破壊的木構造という手法を使う
-
-
+ 非破壊的木構造という手法を用いる。
-
-
- 非破壊的木構造
-
+ 非破壊的木構造は、元となる木構造を書き換えずに編集できる。
+
- 元となる木構造を書き換えずに編集できる
-
-
既にあるデータを変更しないので、データの競合状態が発生しない。並列に読み書きできる
+
-
+
@@ -235,7 +264,7 @@
どの木構造が最新なのかを表す情報
- 状態を持つのはここだけで、並列度を高めるにはここの設計が重要
+ 状態を持つのはここだけで、並列度を高めるにはルートノードの設計が重要
@@ -250,10 +279,7 @@
できるだけルートノードに触る範囲を狭くする
- ルートノードが必要ない時はさわらない
-
-
- ルートノードを更新する関数と、編集する関数を綺麗に切り分ける
+ ルートノードを更新する関数と、編集する関数を切り分ける
@@ -310,22 +336,15 @@
Jungle の実装
- Jungle は Tree と String の連想配列を持っている(状態変数)
-
-
- Tree は、ルートノードの情報と、木の名前(ルートノードの情報は状態変数)
+ Jungle は複数の Tree を持っている。
+ Tree には名前がついており、最新のルートノードを持っている。
-
- Node は、子と子の場所の連想配列と、キーと値の連想配列を持ってる。
-
-
-
-
+
-
+
状態を扱う関数
@@ -337,33 +356,68 @@
updateRootNodeWith :: (Node -> Node) -> Jungle -> String -> IO ()
- すべて IO が返ってくる
- IO が付いているものは全て何かしらの状態の変更を行う関数である。
+ IO が付いているものは何かしらの状態の変更を行う関数である。
+
+
+ この関数の型の -> で繋がっているものは複数の引数を取ることを表している。
+
+
+ 実際にはHaskellの関数はカリー化されているため、全ての関数は一度に一つの引数だけを取る。
+ 複数の引数を取るようにみえる関数は、実際には1つの引数を取り、その次の引数を受け取る関数を返す。
+
+
+ createJungle は Jungle の作成
+ createTree は、Jungle と 木の名前を受け取って、木を作成する
+ getRootNode は、Jungle と 木の名前を受け取って、ルートノードを返す
+ updateRootNode は、Jungle と 木の名前と Node を受け取ってルートノードを更新する。
+ updateRootNodeWith は、Node を編集する関数(Node -> Node)と Jungle と 木の名前を取って、ルートノードに関数を適用して更新する。
-
+
- 木構造の編集、参照関数
+ 木構造の編集
--- 編集
addNewChildAt :: Node -> Path -> Node
deleteChildAt :: Node -> Path -> Position -> Node
putAttribute :: Node -> Path -> String -> B.ByteString -> Node
deleteAttribute :: Node -> Path -> String -> Node
+
+
+
+ 状態の変更は行わない。
+
+
+ addNewChildAt は、指定された Path の Node に子を追加する
+ deleteChildAt は、指定された Path の Node の Position の子を削除する
+ putAttribute は、指定された Path の Node に キーと値を追加する
+ deleteAttribute は、指定された Path の Node のキーにあてはまる値を削除する
+
--- 参照
+
+
+
+ 木構造の参照
+
+
getAttributes :: Node -> Path -> String -> Maybe B.ByteString
-getChildren :: Node -> Path -> [Node]
-getChildrenWithKey :: Node -> Path -> [(Int, Node)]
+getChildren :: Node -> Path -> [Node]
+assocsChildren :: Node -> Path -> [(Int, Node)]
assocs :: Node -> Path -> [(String, B.ByteString)]
numOfChild :: Node -> Path -> Int
currentChild :: Node -> Path -> Maybe Node
+
- IO が付いてないため、何も状態の変更を行わない
+ getAttributes は、指定された Path の Node に存在する属性を キー を用いて参照できる
+ getChildren は、指定されたPath のNode が持つ全ての子を Node のリストとして返す
+ assocsChildren は、指定された Path の Node が持つ全ての子を Position とのタプルにし、そのペアのリストを返す
+ assocsAttribute は、指定された Path の Node が持つ全ての属性を、キーと値のペアとし、そのペアのリストを返す
+ numOfChild では、指定された Path の Node が持つ子どもの数を取得できる
+ currentChild では、指定された Path の Node が持つ最新の子を取得できる
+
@@ -460,7 +514,7 @@
性能計測 - 読み込みの計測結果
- 12 スレッドまでの性能向上率
+ ハイパースレッディングは安定しないため、12 スレッドまでの性能向上率
@@ -526,9 +580,7 @@
性能計測 - 書き込みの計測結果
-
- 12 スレッドまでの性能向上率
-
+
@@ -536,10 +588,10 @@
- 性能計測 - 読み込みと書き込みの考察
+ 考察
- 読み込みと比べて書き込みの性能向上率が低い
+ 書き込みの性能向上率が低い
木を登録する際、他のスレッドから登録があった場合、ソフトウェア・トランザクショナル・メモリが処理をやり直すため遅いと考えられる。
@@ -574,9 +626,6 @@
12 スレッド時に 2.14 倍
-
- 性能向上率が低い
-
CPU数 |
@@ -615,9 +664,6 @@
12 スレッド時に 1.65 倍
-
- 読み込みよりさらに悪い
-
CPU数 |
@@ -648,7 +694,7 @@
- Webサービスに組み込んでの性能評価 考察
+ Warp の問題
Warp がボトルネックとなってしまっている。
@@ -715,7 +761,51 @@
書き込みが読み込みより性能差が出ている理由として遅延評価が考えられる。
- Haskell では書き込みを行う際、完全に評価せず途中式を積み上げていく。
+ Haskell の遅延評価は必要でなければ計算しないため、例えば木構造への書き込みが多い時に必要のない木は計算しないなどを行うことができる。
+
+
+
+
+
+ 性能計測 - 書き込みと読み込みを同時に行った場合
+
+
+
+ 書き込みごとに毎回読み込みを挟むことで、遅延評価ではなく即時評価させる。
+
+
+
+
+ CPU数 |
+ 実行時間 |
+
+
+ 1 |
+ 141.40 s |
+
+
+ 2 |
+ 70.87 s |
+
+
+ 4 |
+ 54.32 s |
+
+
+ 8 |
+ 55.13 s |
+
+
+ 12 |
+ 58.60 s |
+
+
+
+ 結果が明らかに遅くなっている。
+ 12 スレッドで実行した際、 まだ Java より速いが性能差は、1.30 倍である。
+
+
+ シングルスレッドで実行した場合と比較した時、12 スレッドで 2.40 倍の性能向上が見られる。
@@ -739,7 +829,7 @@
今後の課題
- 書き込み処理の性能向上率の上昇
+ 書き込み処理の性能向上
分散データベースとしての実装