Skip to content

Commit c623f48

Browse files
authored
Merge pull request #2978 from osyoyu/ractor
Ractorのドキュメントを追加
2 parents ac55bf9 + 2329a70 commit c623f48

4 files changed

Lines changed: 248 additions & 0 deletions

File tree

refm/api/src/_builtin.rd

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,13 @@ require を書かなくても使うことができます。
101101
#@since 2.3.0
102102
#@include(thread/Queue)
103103
#@end
104+
#@since 3.0
105+
#@include(_builtin/Ractor)
106+
#@include(ractor/MovedObject)
107+
#@end
108+
#@since 4.0
109+
#@include(ractor/Port)
110+
#@end
104111
#@include(_builtin/Random)
105112
#@include(_builtin/Range)
106113
#@include(_builtin/RangeError)

refm/api/src/_builtin/Ractor

Lines changed: 197 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
= class Ractor < Object
2+
3+
並列プログラミングの仕組みを提供するクラスです。
4+
5+
== Class Methods
6+
7+
--- new(*args, name: nil) {|*args| ... } -> Ractor
8+
9+
Ractor を生成して、ブロックの評価を開始します。
10+
生成した Ractor を返します。
11+
12+
@param args ブロックの引数として渡されます。
13+
値が shareable である場合はそのインスタンスが、そうでない場合はコピーが試みられた値が渡されます。
14+
コピーできない値であった場合は例外が発生します。
15+
@param name Ractor の名前を指定します。
16+
17+
--- [](sym) -> object | nil
18+
19+
このメソッドを呼び出した Ractor の Ractor-local storage の sym に対応するデータを取り出します。
20+
sym に対応するデータがなければ nil を返します。
21+
22+
@param sym Ractor-local storage のキーを指定します。
23+
@return Ractor-local storage に格納されている値を返します。
24+
25+
--- []=(sym, val)
26+
27+
@param sym Ractor-local storage のキーを指定します。
28+
@param val 格納するデータを指定します。
29+
30+
--- count -> Integer
31+
32+
実行中の Ractor の数を返します。
33+
34+
--- current -> Ractor
35+
36+
このメソッドを呼び出された Ractor を返します。
37+
38+
--- main -> Ractor
39+
40+
main Ractor(プログラムの実行が開始された Ractor)を返します。
41+
42+
--- main? -> bool
43+
44+
このメソッドを呼び出した Ractor が main Ractor であるとき、true を返します。
45+
46+
--- make_shareable(obj, copy: false) -> object
47+
48+
obj が shareable になるよう変換します。
49+
50+
obj が shareable でない場合、obj と obj が参照する shareable でないオブジェクトをすべて freeze します。
51+
52+
@param obj Shareable にしたいオブジェクトを指定します。
53+
@param copy true の場合、obj を変更する代わりに obj のコピーを作成し shareable にします。
54+
55+
--- receive -> object
56+
--- recv -> object
57+
58+
#@since 4.0
59+
このメソッドを呼び出した Ractor の default port からメッセージを受信します。
60+
61+
@see [[m:Ractor::Port#receive]]
62+
#@else
63+
このメソッドを呼び出した Ractor が受信したメッセージを取り出して返します。
64+
メッセージが届くまでブロックします。
65+
66+
他の Ractor から [[m:Ractor#send]] で送られたメッセージを受信します。
67+
#@end
68+
69+
#@until 4.0
70+
--- receive_if {|msg| ... } -> object
71+
72+
このメソッドを呼び出した Ractor が受信したメッセージのうち、
73+
ブロックの評価結果が真になる最初のメッセージを受信して返します。
74+
#@end
75+
76+
#@since 4.0
77+
--- select(*ports) -> [object, object]
78+
79+
引数で指定した Ractor または [[c:Ractor::Port]] のいずれかが受信可能になるまで待ち、
80+
受信可能になったものと受信した値の配列を返します。
81+
#@else
82+
--- select(*ractors, yield_value: nil, move: false) -> [object, object]
83+
84+
引数で指定した Ractor のいずれかが [[m:Ractor.yield]] などで送信可能になるまで待ち、
85+
その Ractor と受信したオブジェクトの配列 [Ractor, obj] を返します。
86+
受信したのが現在の Ractor 自身であった場合は、Ractor の代わりに :receive シンボルが返ります。
87+
yield_value を指定すると、他の Ractor が [[m:Ractor#take]] を呼んだときにその値が yield され、
88+
[:yield, nil] が返ります。move が真のとき yield_value は移動されます。
89+
#@end
90+
91+
--- shareable?(obj) -> bool
92+
93+
obj が shareable である場合、true を返します。
94+
95+
@param obj Shareable であるか判定したいオブジェクトを指定します。
96+
97+
--- store_if_absent(key) { ... } -> object
98+
99+
このメソッドを呼び出した Ractor の Ractor-local storage の key データがない場合、
100+
ブロックを評価した結果を格納します。
101+
格納した値を返します。
102+
103+
@param key Ractor-local storage のキーを指定します。
104+
105+
#@until 4.0
106+
--- yield(obj, move: false) -> object
107+
108+
現在の Ractor の outgoing port に obj を送信します。
109+
別の Ractor が [[m:Ractor#take]] でこのメッセージを受信するまでブロックします。
110+
111+
@param obj 送信するオブジェクトを指定します。
112+
@param move obj を「移動」する場合は true を指定します。
113+
#@end
114+
115+
== Instance Methods
116+
117+
#@since 4.0
118+
--- close -> bool
119+
120+
Default port を閉じます。
121+
122+
self がこのメソッドを呼び出した Ractor ではない場合、Ractor::Error が発生します。
123+
124+
#@end
125+
126+
#@since 4.0
127+
--- default_port -> Ractor::Port
128+
129+
self の default port を返します。
130+
131+
#@end
132+
133+
#@since 4.0
134+
--- join -> Ractor
135+
136+
self が終了するまで待ちます。
137+
Ractor の実行が例外で終了した場合には、 [[m:Ractor#value]]を呼び出し、その例外を再発生させます。
138+
139+
#@end
140+
141+
#@since 4.0
142+
--- monitor(port) -> bool
143+
144+
port を self の監視ポートとして登録します。
145+
self が終了すると、port は :exited(例外なく終了した場合)または
146+
:aborted(未処理の例外で終了した場合)というシンボルを受信します。
147+
148+
監視を登録できた(self がまだ終了していない)場合は true を返します。
149+
self が既に終了していた場合は false を返し、port は直ちに終了を表すシンボルを受信します。
150+
151+
#@end
152+
153+
--- name -> String
154+
155+
self の名前を返します。
156+
157+
@see [[m:Ractor.new]]
158+
159+
--- <<(msg, move: false) -> self
160+
--- send(msg, move: false) -> self
161+
162+
#@since 4.0
163+
Ractor の default port に対してメッセージを送信します。
164+
#@else
165+
self にメッセージを送信します。
166+
送られたメッセージは self が [[m:Ractor.receive]] で受信できます。
167+
#@end
168+
169+
@param msg 送信するメッセージを指定します。
170+
@param move msg を「移動」する場合は true を指定します。
171+
172+
#@since 4.0
173+
@see [[m:Ractor::Port#send]]
174+
#@end
175+
176+
#@until 4.0
177+
--- take -> object
178+
179+
self の outgoing port からメッセージを受信します。
180+
self が [[m:Ractor.yield]] で送ったメッセージ、または self のブロックが返した値を受け取ります。
181+
メッセージが届くまでブロックします。
182+
#@end
183+
184+
#@since 4.0
185+
--- unmonitor(port) -> self
186+
187+
[[m:Ractor#monitor]] で登録した port の監視を解除します。
188+
189+
#@end
190+
191+
#@since 4.0
192+
--- value -> object
193+
194+
self が終了するまで待ち、その Ractor のブロックが返した値を返します。
195+
Ractor の実行が例外で終了した場合には、その例外を再発生させます。
196+
197+
#@end

refm/api/src/ractor/MovedObject

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
= class Ractor::MovedObject < BasicObject
2+
3+
[[m:Ractor#send]] によって他の Ractor に移動(move)されたオブジェクトを置き換えるオブジェクトのクラスです。
4+
5+
Ractor::MovedObject のインスタンスに対しては、あらゆるアクセスを行えません。
6+
アクセスを試みた場合、 Ractor::MovedError が発生します。
7+
これには inspect 等を含むあらゆるメソッド呼び出しも含まれます。

refm/api/src/ractor/Port

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
= class Ractor::Port < Object
2+
3+
Ractor 間でメッセージを交換するための仕組みを提供するクラスです。
4+
5+
== Class Methods
6+
7+
--- new -> Ractor::Port
8+
9+
== Instance Methods
10+
11+
--- <<(msg, move: false)
12+
--- send(msg, move: false)
13+
14+
Port にメッセージを送信します。
15+
16+
@param msg 送信するメッセージを指定します。
17+
@param move msg を「移動」する場合、true を指定します。
18+
19+
--- close
20+
21+
Port を閉じます。
22+
23+
閉じられた Port に対して [[m:Ractor::Port#send]] による送信を試みた場合、 Ractor::ClosedError が発生します。
24+
Port が閉じられる前に送信され、未受信のメッセージがある場合、
25+
その数ぶんだけ [[m:Ractor::Port#receive]] を使って受信できます。
26+
27+
Port を作成した Ractor 以外で close を呼ぶことはできません。
28+
29+
--- closed? -> bool
30+
31+
Port が閉じられている場合、true を返します。
32+
33+
--- receive -> object
34+
35+
Port に送信されたメッセージを受信します。
36+
37+
メッセージキューが空の場合はブロックします。

0 commit comments

Comments
 (0)