rbs 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ruby.yml +28 -0
  3. data/.gitignore +12 -0
  4. data/.rubocop.yml +15 -0
  5. data/BSDL +22 -0
  6. data/CHANGELOG.md +9 -0
  7. data/COPYING +56 -0
  8. data/Gemfile +6 -0
  9. data/README.md +93 -0
  10. data/Rakefile +142 -0
  11. data/bin/annotate-with-rdoc +157 -0
  12. data/bin/console +14 -0
  13. data/bin/query-rdoc +103 -0
  14. data/bin/setup +10 -0
  15. data/bin/sort +89 -0
  16. data/bin/test_runner.rb +16 -0
  17. data/docs/CONTRIBUTING.md +97 -0
  18. data/docs/sigs.md +148 -0
  19. data/docs/stdlib.md +152 -0
  20. data/docs/syntax.md +528 -0
  21. data/exe/rbs +7 -0
  22. data/lib/rbs.rb +64 -0
  23. data/lib/rbs/ast/annotation.rb +27 -0
  24. data/lib/rbs/ast/comment.rb +27 -0
  25. data/lib/rbs/ast/declarations.rb +395 -0
  26. data/lib/rbs/ast/members.rb +362 -0
  27. data/lib/rbs/buffer.rb +50 -0
  28. data/lib/rbs/builtin_names.rb +55 -0
  29. data/lib/rbs/cli.rb +558 -0
  30. data/lib/rbs/constant.rb +26 -0
  31. data/lib/rbs/constant_table.rb +150 -0
  32. data/lib/rbs/definition.rb +170 -0
  33. data/lib/rbs/definition_builder.rb +919 -0
  34. data/lib/rbs/environment.rb +281 -0
  35. data/lib/rbs/environment_loader.rb +136 -0
  36. data/lib/rbs/environment_walker.rb +124 -0
  37. data/lib/rbs/errors.rb +187 -0
  38. data/lib/rbs/location.rb +102 -0
  39. data/lib/rbs/method_type.rb +123 -0
  40. data/lib/rbs/namespace.rb +91 -0
  41. data/lib/rbs/parser.y +1344 -0
  42. data/lib/rbs/prototype/rb.rb +553 -0
  43. data/lib/rbs/prototype/rbi.rb +587 -0
  44. data/lib/rbs/prototype/runtime.rb +381 -0
  45. data/lib/rbs/substitution.rb +46 -0
  46. data/lib/rbs/test.rb +26 -0
  47. data/lib/rbs/test/errors.rb +61 -0
  48. data/lib/rbs/test/hook.rb +294 -0
  49. data/lib/rbs/test/setup.rb +58 -0
  50. data/lib/rbs/test/spy.rb +325 -0
  51. data/lib/rbs/test/test_helper.rb +183 -0
  52. data/lib/rbs/test/type_check.rb +254 -0
  53. data/lib/rbs/type_name.rb +70 -0
  54. data/lib/rbs/types.rb +936 -0
  55. data/lib/rbs/variance_calculator.rb +138 -0
  56. data/lib/rbs/vendorer.rb +47 -0
  57. data/lib/rbs/version.rb +3 -0
  58. data/lib/rbs/writer.rb +269 -0
  59. data/lib/ruby/signature.rb +7 -0
  60. data/rbs.gemspec +46 -0
  61. data/stdlib/abbrev/abbrev.rbs +60 -0
  62. data/stdlib/base64/base64.rbs +71 -0
  63. data/stdlib/benchmark/benchmark.rbs +372 -0
  64. data/stdlib/builtin/array.rbs +1997 -0
  65. data/stdlib/builtin/basic_object.rbs +280 -0
  66. data/stdlib/builtin/binding.rbs +177 -0
  67. data/stdlib/builtin/builtin.rbs +45 -0
  68. data/stdlib/builtin/class.rbs +145 -0
  69. data/stdlib/builtin/comparable.rbs +116 -0
  70. data/stdlib/builtin/complex.rbs +400 -0
  71. data/stdlib/builtin/constants.rbs +37 -0
  72. data/stdlib/builtin/data.rbs +5 -0
  73. data/stdlib/builtin/deprecated.rbs +2 -0
  74. data/stdlib/builtin/dir.rbs +413 -0
  75. data/stdlib/builtin/encoding.rbs +607 -0
  76. data/stdlib/builtin/enumerable.rbs +404 -0
  77. data/stdlib/builtin/enumerator.rbs +260 -0
  78. data/stdlib/builtin/errno.rbs +781 -0
  79. data/stdlib/builtin/errors.rbs +582 -0
  80. data/stdlib/builtin/exception.rbs +194 -0
  81. data/stdlib/builtin/false_class.rbs +40 -0
  82. data/stdlib/builtin/fiber.rbs +68 -0
  83. data/stdlib/builtin/fiber_error.rbs +12 -0
  84. data/stdlib/builtin/file.rbs +1076 -0
  85. data/stdlib/builtin/file_test.rbs +59 -0
  86. data/stdlib/builtin/float.rbs +696 -0
  87. data/stdlib/builtin/gc.rbs +243 -0
  88. data/stdlib/builtin/hash.rbs +1029 -0
  89. data/stdlib/builtin/integer.rbs +707 -0
  90. data/stdlib/builtin/io.rbs +683 -0
  91. data/stdlib/builtin/kernel.rbs +576 -0
  92. data/stdlib/builtin/marshal.rbs +161 -0
  93. data/stdlib/builtin/match_data.rbs +271 -0
  94. data/stdlib/builtin/math.rbs +369 -0
  95. data/stdlib/builtin/method.rbs +185 -0
  96. data/stdlib/builtin/module.rbs +1104 -0
  97. data/stdlib/builtin/nil_class.rbs +82 -0
  98. data/stdlib/builtin/numeric.rbs +409 -0
  99. data/stdlib/builtin/object.rbs +824 -0
  100. data/stdlib/builtin/proc.rbs +429 -0
  101. data/stdlib/builtin/process.rbs +1227 -0
  102. data/stdlib/builtin/random.rbs +267 -0
  103. data/stdlib/builtin/range.rbs +226 -0
  104. data/stdlib/builtin/rational.rbs +424 -0
  105. data/stdlib/builtin/rb_config.rbs +57 -0
  106. data/stdlib/builtin/regexp.rbs +1083 -0
  107. data/stdlib/builtin/ruby_vm.rbs +14 -0
  108. data/stdlib/builtin/signal.rbs +55 -0
  109. data/stdlib/builtin/string.rbs +1901 -0
  110. data/stdlib/builtin/string_io.rbs +284 -0
  111. data/stdlib/builtin/struct.rbs +40 -0
  112. data/stdlib/builtin/symbol.rbs +228 -0
  113. data/stdlib/builtin/thread.rbs +1108 -0
  114. data/stdlib/builtin/thread_group.rbs +23 -0
  115. data/stdlib/builtin/time.rbs +1047 -0
  116. data/stdlib/builtin/trace_point.rbs +290 -0
  117. data/stdlib/builtin/true_class.rbs +46 -0
  118. data/stdlib/builtin/unbound_method.rbs +153 -0
  119. data/stdlib/builtin/warning.rbs +17 -0
  120. data/stdlib/coverage/coverage.rbs +62 -0
  121. data/stdlib/csv/csv.rbs +773 -0
  122. data/stdlib/erb/erb.rbs +392 -0
  123. data/stdlib/find/find.rbs +40 -0
  124. data/stdlib/ipaddr/ipaddr.rbs +247 -0
  125. data/stdlib/json/json.rbs +335 -0
  126. data/stdlib/pathname/pathname.rbs +1093 -0
  127. data/stdlib/prime/integer-extension.rbs +23 -0
  128. data/stdlib/prime/prime.rbs +188 -0
  129. data/stdlib/securerandom/securerandom.rbs +9 -0
  130. data/stdlib/set/set.rbs +301 -0
  131. data/stdlib/tmpdir/tmpdir.rbs +53 -0
  132. metadata +292 -0
@@ -0,0 +1,1108 @@
1
+ # Threads are the Ruby implementation for a concurrent programming model.
2
+ #
3
+ # Programs that require multiple threads of execution are a perfect
4
+ # candidate for Ruby's [Thread](Thread) class.
5
+ #
6
+ # For example, we can create a new thread separate from the main thread's
7
+ # execution using [::new](Thread#method-c-new).
8
+ #
9
+ # ```ruby
10
+ # thr = Thread.new { puts "Whats the big deal" }
11
+ # ```
12
+ #
13
+ # Then we are able to pause the execution of the main thread and allow our
14
+ # new thread to finish, using
15
+ # [join](Thread#method-i-join):
16
+ #
17
+ # ```ruby
18
+ # thr.join #=> "Whats the big deal"
19
+ # ```
20
+ #
21
+ # If we don't call `thr.join` before the main thread terminates, then all
22
+ # other threads including `thr` will be killed.
23
+ #
24
+ # Alternatively, you can use an array for handling multiple threads at
25
+ # once, like in the following example:
26
+ #
27
+ # ```ruby
28
+ # threads = []
29
+ # threads << Thread.new { puts "Whats the big deal" }
30
+ # threads << Thread.new { 3.times { puts "Threads are fun!" } }
31
+ # ```
32
+ #
33
+ # After creating a few threads we wait for them all to finish
34
+ # consecutively.
35
+ #
36
+ # ```ruby
37
+ # threads.each { |thr| thr.join }
38
+ # ```
39
+ #
40
+ #
41
+ # In order to create new threads, Ruby provides
42
+ # [::new](Thread#method-c-new),
43
+ # [::start](Thread#method-c-start), and
44
+ # [::fork](Thread#method-c-fork). A block must be
45
+ # provided with each of these methods, otherwise a
46
+ # [ThreadError](https://ruby-doc.org/core-2.6.3/ThreadError.html) will be
47
+ # raised.
48
+ #
49
+ # When subclassing the [Thread](Thread) class, the
50
+ # `initialize` method of your subclass will be ignored by
51
+ # [::start](Thread#method-c-start) and
52
+ # [::fork](Thread#method-c-fork). Otherwise, be sure
53
+ # to call super in your `initialize` method.
54
+ #
55
+ #
56
+ # For terminating threads, Ruby provides a variety of ways to do this.
57
+ #
58
+ # The class method [::kill](Thread#method-c-kill), is
59
+ # meant to exit a given thread:
60
+ #
61
+ # thr = Thread.new { ... }
62
+ # Thread.kill(thr) # sends exit() to thr
63
+ #
64
+ # Alternatively, you can use the instance method
65
+ # [exit](Thread#method-i-exit), or any of its aliases
66
+ # [kill](Thread#method-i-kill) or
67
+ # [terminate](Thread#method-i-terminate).
68
+ #
69
+ # ```ruby
70
+ # thr.exit
71
+ # ```
72
+ #
73
+ #
74
+ # Ruby provides a few instance methods for querying the state of a given
75
+ # thread. To get a string with the current thread's state use
76
+ # [status](Thread#method-i-status)
77
+ #
78
+ # ```ruby
79
+ # thr = Thread.new { sleep }
80
+ # thr.status # => "sleep"
81
+ # thr.exit
82
+ # thr.status # => false
83
+ # ```
84
+ #
85
+ # You can also use [alive?](Thread#method-i-alive-3F)
86
+ # to tell if the thread is running or sleeping, and
87
+ # [stop?](Thread#method-i-stop-3F) if the thread is
88
+ # dead or sleeping.
89
+ #
90
+ #
91
+ # Since threads are created with blocks, the same rules apply to other
92
+ # Ruby blocks for variable scope. Any local variables created within this
93
+ # block are accessible to only this thread.
94
+ #
95
+ #
96
+ # Each fiber has its own bucket for
97
+ # [\#\[\]](Thread#method-i-5B-5D) storage. When you
98
+ # set a new fiber-local it is only accessible within this
99
+ # [Fiber](https://ruby-doc.org/core-2.6.3/Fiber.html). To illustrate:
100
+ #
101
+ # ```ruby
102
+ # Thread.new {
103
+ # Thread.current[:foo] = "bar"
104
+ # Fiber.new {
105
+ # p Thread.current[:foo] # => nil
106
+ # }.resume
107
+ # }.join
108
+ # ```
109
+ #
110
+ # This example uses [\[\]](Thread#method-i-5B-5D) for
111
+ # getting and [\[\]=](Thread#method-i-5B-5D-3D) for
112
+ # setting fiber-locals, you can also use
113
+ # [keys](Thread#method-i-keys) to list the
114
+ # fiber-locals for a given thread and
115
+ # [key?](Thread#method-i-key-3F) to check if a
116
+ # fiber-local exists.
117
+ #
118
+ # When it comes to thread-locals, they are accessible within the entire
119
+ # scope of the thread. Given the following example:
120
+ #
121
+ # ```ruby
122
+ # Thread.new{
123
+ # Thread.current.thread_variable_set(:foo, 1)
124
+ # p Thread.current.thread_variable_get(:foo) # => 1
125
+ # Fiber.new{
126
+ # Thread.current.thread_variable_set(:foo, 2)
127
+ # p Thread.current.thread_variable_get(:foo) # => 2
128
+ # }.resume
129
+ # p Thread.current.thread_variable_get(:foo) # => 2
130
+ # }.join
131
+ # ```
132
+ #
133
+ # You can see that the thread-local `:foo` carried over into the fiber and
134
+ # was changed to `2` by the end of the thread.
135
+ #
136
+ # This example makes use of
137
+ # [thread\_variable\_set](Thread#method-i-thread_variable_set)
138
+ # to create new thread-locals, and
139
+ # [thread\_variable\_get](Thread#method-i-thread_variable_get)
140
+ # to reference them.
141
+ #
142
+ # There is also
143
+ # [thread\_variables](Thread#method-i-thread_variables)
144
+ # to list all thread-locals, and
145
+ # [thread\_variable?](Thread#method-i-thread_variable-3F)
146
+ # to check if a given thread-local exists.
147
+ #
148
+ #
149
+ # Any thread can raise an exception using the
150
+ # [raise](Thread#method-i-raise) instance method,
151
+ # which operates similarly to
152
+ # [Kernel\#raise](https://ruby-doc.org/core-2.6.3/Kernel.html#method-i-raise)
153
+ # .
154
+ #
155
+ # However, it's important to note that an exception that occurs in any
156
+ # thread except the main thread depends on
157
+ # [abort\_on\_exception](Thread#method-i-abort_on_exception)
158
+ # . This option is `false` by default, meaning that any unhandled
159
+ # exception will cause the thread to terminate silently when waited on by
160
+ # either [join](Thread#method-i-join) or
161
+ # [value](Thread#method-i-value). You can change this
162
+ # default by either
163
+ # [abort\_on\_exception=](Thread#method-i-abort_on_exception-3D)
164
+ # `true` or setting $DEBUG to `true` .
165
+ #
166
+ # With the addition of the class method
167
+ # [::handle\_interrupt](Thread#method-c-handle_interrupt)
168
+ # , you can now handle exceptions asynchronously with threads.
169
+ #
170
+ #
171
+ # Ruby provides a few ways to support scheduling threads in your program.
172
+ #
173
+ # The first way is by using the class method
174
+ # [::stop](Thread#method-c-stop), to put the current
175
+ # running thread to sleep and schedule the execution of another thread.
176
+ #
177
+ # Once a thread is asleep, you can use the instance method
178
+ # [wakeup](Thread#method-i-wakeup) to mark your thread
179
+ # as eligible for scheduling.
180
+ #
181
+ # You can also try [::pass](Thread#method-c-pass),
182
+ # which attempts to pass execution to another thread but is dependent on
183
+ # the OS whether a running thread will switch or not. The same goes for
184
+ # [priority](Thread#method-i-priority), which lets
185
+ # you hint to the thread scheduler which threads you want to take
186
+ # precedence when passing execution. This method is also dependent on the
187
+ # OS and may be ignored on some platforms.
188
+ class Thread < Object
189
+ def self.current: () -> Thread
190
+
191
+ # Returns the main thread.
192
+ def self.main: () -> Thread
193
+
194
+ def []: (String | Symbol key) -> untyped
195
+
196
+ # Attribute Assignment—Sets or creates the value of a fiber-local
197
+ # variable, using either a symbol or a string.
198
+ #
199
+ # See also [\#\[\]](Thread.downloaded.ruby_doc#method-i-5B-5D).
200
+ #
201
+ # For thread-local variables, please see
202
+ # [thread\_variable\_set](Thread.downloaded.ruby_doc#method-i-thread_variable_set)
203
+ # and
204
+ # [thread\_variable\_get](Thread.downloaded.ruby_doc#method-i-thread_variable_get)
205
+ # .
206
+ def []=: (String | Symbol key, untyped value) -> untyped
207
+
208
+ def alive?: () -> bool
209
+
210
+ # Terminates `thr` and schedules another thread to be run.
211
+ #
212
+ # If this thread is already marked to be killed,
213
+ # [exit](Thread.downloaded.ruby_doc#method-i-exit) returns the
214
+ # [Thread](Thread.downloaded.ruby_doc).
215
+ #
216
+ # If this is the main thread, or the last thread, exits the process.
217
+ def kill: () -> Thread?
218
+
219
+ # Returns the status of the thread-local “abort on exception” condition
220
+ # for this `thr` .
221
+ #
222
+ # The default is `false` .
223
+ #
224
+ # See also
225
+ # [abort\_on\_exception=](Thread.downloaded.ruby_doc#method-i-abort_on_exception-3D)
226
+ # .
227
+ #
228
+ # There is also a class level method to set this for all threads, see
229
+ # [::abort\_on\_exception](Thread.downloaded.ruby_doc#method-c-abort_on_exception)
230
+ # .
231
+ def abort_on_exception: () -> bool
232
+
233
+ # When set to `true`, if this `thr` is aborted by an exception, the
234
+ # raised exception will be re-raised in the main thread.
235
+ #
236
+ # See also
237
+ # [abort\_on\_exception](Thread.downloaded.ruby_doc#method-i-abort_on_exception)
238
+ # .
239
+ #
240
+ # There is also a class level method to set this for all threads, see
241
+ # [::abort\_on\_exception=](Thread.downloaded.ruby_doc#method-c-abort_on_exception-3D)
242
+ # .
243
+ def abort_on_exception=: (bool abort_on_exception) -> untyped
244
+
245
+ # Adds *proc* as a handler for tracing.
246
+ #
247
+ # See
248
+ # [\#set\_trace\_func](Thread.downloaded.ruby_doc#method-i-set_trace_func)
249
+ # and
250
+ # [Kernel\#set\_trace\_func](https://ruby-doc.org/core-2.6.3/Kernel.html#method-i-set_trace_func)
251
+ # .
252
+ def add_trace_func: (untyped proc) -> untyped
253
+
254
+ # Returns the current backtrace of the target thread.
255
+ def backtrace: (*untyped args) -> ::Array[untyped]
256
+
257
+ # Returns the execution stack for the target thread—an array containing
258
+ # backtrace location objects.
259
+ #
260
+ # See
261
+ # [Thread::Backtrace::Location](https://ruby-doc.org/core-2.6.3/Thread/Backtrace/Location.html)
262
+ # for more information.
263
+ #
264
+ # This method behaves similarly to
265
+ # [Kernel\#caller\_locations](https://ruby-doc.org/core-2.6.3/Kernel.html#method-i-caller_locations)
266
+ # except it applies to a specific thread.
267
+ def backtrace_locations: (*untyped args) -> ::Array[untyped]?
268
+
269
+ # Terminates `thr` and schedules another thread to be run.
270
+ #
271
+ # If this thread is already marked to be killed,
272
+ # [exit](Thread.downloaded.ruby_doc#method-i-exit) returns the
273
+ # [Thread](Thread.downloaded.ruby_doc).
274
+ #
275
+ # If this is the main thread, or the last thread, exits the process.
276
+ def exit: () -> Thread?
277
+
278
+ # Returns a fiber-local for the given key. If the key can’t be found,
279
+ # there are several options: With no other arguments, it will raise a
280
+ # `KeyError` exception; if *default* is given, then that will be returned;
281
+ # if the optional code block is specified, then that will be run and its
282
+ # result returned. See [\#\[\]](Thread.downloaded.ruby_doc#method-i-5B-5D)
283
+ # and
284
+ # [Hash\#fetch](https://ruby-doc.org/core-2.6.3/Hash.html#method-i-fetch)
285
+ # .
286
+ def fetch: (*untyped sym) -> untyped
287
+
288
+ def group: () -> ThreadGroup?
289
+
290
+ def initialize: (*untyped args) -> Thread
291
+
292
+ # The calling thread will suspend execution and run this `thr` .
293
+ #
294
+ # Does not return until `thr` exits or until the given `limit` seconds
295
+ # have passed.
296
+ #
297
+ # If the time limit expires, `nil` will be returned, otherwise `thr` is
298
+ # returned.
299
+ #
300
+ # Any threads not joined will be killed when the main program exits.
301
+ #
302
+ # If `thr` had previously raised an exception and the
303
+ # [::abort\_on\_exception](Thread.downloaded.ruby_doc#method-c-abort_on_exception)
304
+ # or $DEBUG flags are not set, (so the exception has not yet been
305
+ # processed), it will be processed at this time.
306
+ #
307
+ # ```ruby
308
+ # a = Thread.new { print "a"; sleep(10); print "b"; print "c" }
309
+ # x = Thread.new { print "x"; Thread.pass; print "y"; print "z" }
310
+ # x.join # Let thread x finish, thread a will be killed on exit.
311
+ # #=> "axyz"
312
+ # ```
313
+ #
314
+ # The following example illustrates the `limit` parameter.
315
+ #
316
+ # ```ruby
317
+ # y = Thread.new { 4.times { sleep 0.1; puts 'tick... ' }}
318
+ # puts "Waiting" until y.join(0.15)
319
+ # ```
320
+ #
321
+ # This will produce:
322
+ #
323
+ # tick...
324
+ # Waiting
325
+ # tick...
326
+ # Waiting
327
+ # tick...
328
+ # tick...
329
+ def join: (*untyped limit) -> Thread
330
+
331
+ # Returns `true` if the given string (or symbol) exists as a fiber-local
332
+ # variable.
333
+ #
334
+ # ```ruby
335
+ # me = Thread.current
336
+ # me[:oliver] = "a"
337
+ # me.key?(:oliver) #=> true
338
+ # me.key?(:stanley) #=> false
339
+ # ```
340
+ def key?: (Symbol sym) -> bool
341
+
342
+ def keys: () -> ::Array[Symbol]
343
+
344
+ # show the name of the thread.
345
+ def name: () -> String
346
+
347
+ # set given name to the ruby thread. On some platform, it may set the name
348
+ # to pthread and/or kernel.
349
+ def name=: (untyped name) -> untyped
350
+
351
+ # Returns whether or not the asynchronous queue is empty for the target
352
+ # thread.
353
+ #
354
+ # If `error` is given, then check only for `error` type deferred events.
355
+ #
356
+ # See
357
+ # [::pending\_interrupt?](Thread.downloaded.ruby_doc#method-c-pending_interrupt-3F)
358
+ # for more information.
359
+ def pending_interrupt?: (*untyped args) -> bool
360
+
361
+ # Returns the priority of *thr* . Default is inherited from the current
362
+ # thread which creating the new thread, or zero for the initial main
363
+ # thread; higher-priority thread will run more frequently than
364
+ # lower-priority threads (but lower-priority threads can also run).
365
+ #
366
+ # This is just hint for Ruby thread scheduler. It may be ignored on some
367
+ # platform.
368
+ #
369
+ # ```ruby
370
+ # Thread.current.priority #=> 0
371
+ # ```
372
+ def priority: () -> Integer
373
+
374
+ # Sets the priority of *thr* to *integer* . Higher-priority threads will
375
+ # run more frequently than lower-priority threads (but lower-priority
376
+ # threads can also run).
377
+ #
378
+ # This is just hint for Ruby thread scheduler. It may be ignored on some
379
+ # platform.
380
+ #
381
+ # ```ruby
382
+ # count1 = count2 = 0
383
+ # a = Thread.new do
384
+ # loop { count1 += 1 }
385
+ # end
386
+ # a.priority = -1
387
+ #
388
+ # b = Thread.new do
389
+ # loop { count2 += 1 }
390
+ # end
391
+ # b.priority = -2
392
+ # sleep 1 #=> 1
393
+ # count1 #=> 622504
394
+ # count2 #=> 5832
395
+ # ```
396
+ def priority=: (Integer priority) -> untyped
397
+
398
+ # Returns the status of the thread-local “report on exception” condition
399
+ # for this `thr` .
400
+ #
401
+ # The default value when creating a [Thread](Thread.downloaded.ruby_doc)
402
+ # is the value of the global flag
403
+ # [::report\_on\_exception](Thread.downloaded.ruby_doc#method-c-report_on_exception)
404
+ # .
405
+ #
406
+ # See also
407
+ # [report\_on\_exception=](Thread.downloaded.ruby_doc#method-i-report_on_exception-3D)
408
+ # .
409
+ #
410
+ # There is also a class level method to set this for all new threads, see
411
+ # [::report\_on\_exception=](Thread.downloaded.ruby_doc#method-c-report_on_exception-3D)
412
+ # .
413
+ def report_on_exception: () -> bool
414
+
415
+ # When set to `true`, a message is printed on $stderr if an exception
416
+ # kills this `thr` . See
417
+ # [::report\_on\_exception](Thread.downloaded.ruby_doc#method-c-report_on_exception)
418
+ # for details.
419
+ #
420
+ # See also
421
+ # [report\_on\_exception](Thread.downloaded.ruby_doc#method-i-report_on_exception)
422
+ # .
423
+ #
424
+ # There is also a class level method to set this for all new threads, see
425
+ # [::report\_on\_exception=](Thread.downloaded.ruby_doc#method-c-report_on_exception-3D)
426
+ # .
427
+ def report_on_exception=: (bool report_on_exception) -> untyped
428
+
429
+ # Wakes up `thr`, making it eligible for scheduling.
430
+ #
431
+ # ```ruby
432
+ # a = Thread.new { puts "a"; Thread.stop; puts "c" }
433
+ # sleep 0.1 while a.status!='sleep'
434
+ # puts "Got here"
435
+ # a.run
436
+ # a.join
437
+ # ```
438
+ #
439
+ # This will produce:
440
+ #
441
+ # ```ruby
442
+ # a
443
+ # Got here
444
+ # c
445
+ # ```
446
+ #
447
+ # See also the instance method
448
+ # [wakeup](Thread.downloaded.ruby_doc#method-i-wakeup).
449
+ def run: () -> Thread
450
+
451
+ # Returns the safe level.
452
+ #
453
+ # This method is obsolete because $SAFE is a process global state. Simply
454
+ # check $SAFE.
455
+ def safe_level: () -> Integer
456
+
457
+ def status: () -> (String | bool)?
458
+
459
+ # Returns `true` if `thr` is dead or sleeping.
460
+ #
461
+ # ```ruby
462
+ # a = Thread.new { Thread.stop }
463
+ # b = Thread.current
464
+ # a.stop? #=> true
465
+ # b.stop? #=> false
466
+ # ```
467
+ #
468
+ # See also [alive?](Thread.downloaded.ruby_doc#method-i-alive-3F) and
469
+ # [status](Thread.downloaded.ruby_doc#method-i-status).
470
+ def `stop?`: () -> bool
471
+
472
+ # Terminates `thr` and schedules another thread to be run.
473
+ #
474
+ # If this thread is already marked to be killed,
475
+ # [exit](Thread.downloaded.ruby_doc#method-i-exit) returns the
476
+ # [Thread](Thread.downloaded.ruby_doc).
477
+ #
478
+ # If this is the main thread, or the last thread, exits the process.
479
+ def terminate: () -> Thread?
480
+
481
+ # Returns `true` if the given string (or symbol) exists as a thread-local
482
+ # variable.
483
+ #
484
+ # ```ruby
485
+ # me = Thread.current
486
+ # me.thread_variable_set(:oliver, "a")
487
+ # me.thread_variable?(:oliver) #=> true
488
+ # me.thread_variable?(:stanley) #=> false
489
+ # ```
490
+ #
491
+ # Note that these are not fiber local variables. Please see
492
+ # [\#\[\]](Thread.downloaded.ruby_doc#method-i-5B-5D) and
493
+ # [\#thread\_variable\_get](Thread.downloaded.ruby_doc#method-i-thread_variable_get)
494
+ # for more details.
495
+ def thread_variable?: (String | Symbol key) -> bool
496
+
497
+ # Returns the value of a thread local variable that has been set. Note
498
+ # that these are different than fiber local values. For fiber local
499
+ # values, please see [\#\[\]](Thread.downloaded.ruby_doc#method-i-5B-5D)
500
+ # and [\#\[\]=](Thread.downloaded.ruby_doc#method-i-5B-5D-3D).
501
+ #
502
+ # [Thread](Thread.downloaded.ruby_doc) local values are carried along with
503
+ # threads, and do not respect fibers. For example:
504
+ #
505
+ # ```ruby
506
+ # Thread.new {
507
+ # Thread.current.thread_variable_set("foo", "bar") # set a thread local
508
+ # Thread.current["foo"] = "bar" # set a fiber local
509
+ #
510
+ # Fiber.new {
511
+ # Fiber.yield [
512
+ # Thread.current.thread_variable_get("foo"), # get the thread local
513
+ # Thread.current["foo"], # get the fiber local
514
+ # ]
515
+ # }.resume
516
+ # }.join.value # => ['bar', nil]
517
+ # ```
518
+ #
519
+ # The value “bar” is returned for the thread local, where nil is returned
520
+ # for the fiber local. The fiber is executed in the same thread, so the
521
+ # thread local values are available.
522
+ def thread_variable_get: (untyped key) -> untyped
523
+
524
+ # Sets a thread local with `key` to `value` . Note that these are local to
525
+ # threads, and not to fibers. Please see
526
+ # [\#thread\_variable\_get](Thread.downloaded.ruby_doc#method-i-thread_variable_get)
527
+ # and [\#\[\]](Thread.downloaded.ruby_doc#method-i-5B-5D) for more
528
+ # information.
529
+ def thread_variable_set: (untyped key, untyped value) -> untyped
530
+
531
+ def thread_variables: () -> ::Array[Symbol]
532
+
533
+ # Waits for `thr` to complete, using
534
+ # [join](Thread.downloaded.ruby_doc#method-i-join), and returns its value
535
+ # or raises the exception which terminated the thread.
536
+ #
537
+ # ```ruby
538
+ # a = Thread.new { 2 + 2 }
539
+ # a.value #=> 4
540
+ #
541
+ # b = Thread.new { raise 'something went wrong' }
542
+ # b.value #=> RuntimeError: something went wrong
543
+ # ```
544
+ def value: () -> Object
545
+
546
+ # Marks a given thread as eligible for scheduling, however it may still
547
+ # remain blocked on I/O.
548
+ #
549
+ # **Note:** This does not invoke the scheduler, see
550
+ # [run](Thread.downloaded.ruby_doc#method-i-run) for more information.
551
+ #
552
+ # ```ruby
553
+ # c = Thread.new { Thread.stop; puts "hey!" }
554
+ # sleep 0.1 while c.status!='sleep'
555
+ # c.wakeup
556
+ # c.join
557
+ # #=> "hey!"
558
+ # ```
559
+ def wakeup: () -> Thread
560
+
561
+ # Returns the status of the global “abort on exception” condition.
562
+ #
563
+ # The default is `false` .
564
+ #
565
+ # When set to `true`, if any thread is aborted by an exception, the
566
+ # raised exception will be re-raised in the main thread.
567
+ #
568
+ # Can also be specified by the global $DEBUG flag or command line option
569
+ # `-d` .
570
+ #
571
+ # See also
572
+ # [::abort\_on\_exception=](Thread.downloaded.ruby_doc#method-c-abort_on_exception-3D)
573
+ # .
574
+ #
575
+ # There is also an instance level method to set this for a specific
576
+ # thread, see
577
+ # [abort\_on\_exception](Thread.downloaded.ruby_doc#method-i-abort_on_exception)
578
+ # .
579
+ def self.abort_on_exception: () -> untyped
580
+
581
+ # When set to `true`, if any thread is aborted by an exception, the
582
+ # raised exception will be re-raised in the main thread. Returns the new
583
+ # state.
584
+ #
585
+ # ```ruby
586
+ # Thread.abort_on_exception = true
587
+ # t1 = Thread.new do
588
+ # puts "In new thread"
589
+ # raise "Exception from thread"
590
+ # end
591
+ # sleep(1)
592
+ # puts "not reached"
593
+ # ```
594
+ #
595
+ # This will produce:
596
+ #
597
+ # In new thread
598
+ # prog.rb:4: Exception from thread (RuntimeError)
599
+ # from prog.rb:2:in `initialize'
600
+ # from prog.rb:2:in `new'
601
+ # from prog.rb:2
602
+ #
603
+ # See also
604
+ # [::abort\_on\_exception](Thread.downloaded.ruby_doc#method-c-abort_on_exception)
605
+ # .
606
+ #
607
+ # There is also an instance level method to set this for a specific
608
+ # thread, see
609
+ # [abort\_on\_exception=](Thread.downloaded.ruby_doc#method-i-abort_on_exception-3D)
610
+ # .
611
+ def self.abort_on_exception=: (untyped abort_on_exception) -> untyped
612
+
613
+ # Wraps the block in a single, VM-global
614
+ # [Mutex\#synchronize](https://ruby-doc.org/core-2.6.3/Mutex.html#method-i-synchronize)
615
+ # , returning the value of the block. A thread executing inside the
616
+ # exclusive section will only block other threads which also use the
617
+ # [::exclusive](Thread.downloaded.ruby_doc#method-c-exclusive) mechanism.
618
+ def self.exclusive: () { () -> untyped } -> untyped
619
+
620
+ # Terminates the currently running thread and schedules another thread to
621
+ # be run.
622
+ #
623
+ # If this thread is already marked to be killed,
624
+ # [::exit](Thread.downloaded.ruby_doc#method-c-exit) returns the
625
+ # [Thread](Thread.downloaded.ruby_doc).
626
+ #
627
+ # If this is the main thread, or the last thread, exit the process.
628
+ def self.exit: () -> untyped
629
+
630
+ # Basically the same as [::new](Thread.downloaded.ruby_doc#method-c-new).
631
+ # However, if class [Thread](Thread.downloaded.ruby_doc) is subclassed,
632
+ # then calling `start` in that subclass will not invoke the subclass’s
633
+ # `initialize` method.
634
+ def self.fork: (*untyped args) -> untyped
635
+
636
+ # Changes asynchronous interrupt timing.
637
+ #
638
+ # *interrupt* means asynchronous event and corresponding procedure by
639
+ # [\#raise](Thread.downloaded.ruby_doc#method-i-raise),
640
+ # [\#kill](Thread.downloaded.ruby_doc#method-i-kill), signal trap (not
641
+ # supported yet) and main thread termination (if main thread terminates,
642
+ # then all other thread will be killed).
643
+ #
644
+ # The given `hash` has pairs like `ExceptionClass => :TimingSymbol` .
645
+ # Where the ExceptionClass is the interrupt handled by the given block.
646
+ # The TimingSymbol can be one of the following symbols:
647
+ #
648
+ # - `:immediate`
649
+ # Invoke interrupts immediately.
650
+ #
651
+ # - `:on_blocking`
652
+ # Invoke interrupts while *BlockingOperation* .
653
+ #
654
+ # - `:never`
655
+ # Never invoke all interrupts.
656
+ #
657
+ # *BlockingOperation* means that the operation will block the calling
658
+ # thread, such as read and write. On CRuby implementation,
659
+ # *BlockingOperation* is any operation executed without GVL.
660
+ #
661
+ # Masked asynchronous interrupts are delayed until they are enabled. This
662
+ # method is similar to sigprocmask(3).
663
+ #
664
+ #
665
+ # Asynchronous interrupts are difficult to use.
666
+ #
667
+ # If you need to communicate between threads, please consider to use
668
+ # another way such as [Queue](https://ruby-doc.org/core-2.6.3/Queue.html)
669
+ # .
670
+ #
671
+ # Or use them with deep understanding about this method.
672
+ #
673
+ #
674
+ # In this example, we can guard from
675
+ # [\#raise](Thread.downloaded.ruby_doc#method-i-raise) exceptions.
676
+ #
677
+ # Using the `:never` TimingSymbol the
678
+ # [RuntimeError](https://ruby-doc.org/core-2.6.3/RuntimeError.html)
679
+ # exception will always be ignored in the first block of the main thread.
680
+ # In the second
681
+ # [::handle\_interrupt](Thread.downloaded.ruby_doc#method-c-handle_interrupt)
682
+ # block we can purposefully handle
683
+ # [RuntimeError](https://ruby-doc.org/core-2.6.3/RuntimeError.html)
684
+ # exceptions.
685
+ #
686
+ # ```ruby
687
+ # th = Thread.new do
688
+ # Thread.handle_interrupt(RuntimeError => :never) {
689
+ # begin
690
+ # # You can write resource allocation code safely.
691
+ # Thread.handle_interrupt(RuntimeError => :immediate) {
692
+ # # ...
693
+ # }
694
+ # ensure
695
+ # # You can write resource deallocation code safely.
696
+ # end
697
+ # }
698
+ # end
699
+ # Thread.pass
700
+ # # ...
701
+ # th.raise "stop"
702
+ # ```
703
+ #
704
+ # While we are ignoring the
705
+ # [RuntimeError](https://ruby-doc.org/core-2.6.3/RuntimeError.html)
706
+ # exception, it’s safe to write our resource allocation code. Then, the
707
+ # ensure block is where we can safely deallocate your resources.
708
+ #
709
+ #
710
+ # In the next example, we will guard from the Timeout::Error exception.
711
+ # This will help prevent from leaking resources when Timeout::Error
712
+ # exceptions occur during normal ensure clause. For this example we use
713
+ # the help of the standard library Timeout, from lib/timeout.rb
714
+ #
715
+ # ```ruby
716
+ # require 'timeout'
717
+ # Thread.handle_interrupt(Timeout::Error => :never) {
718
+ # timeout(10){
719
+ # # Timeout::Error doesn't occur here
720
+ # Thread.handle_interrupt(Timeout::Error => :on_blocking) {
721
+ # # possible to be killed by Timeout::Error
722
+ # # while blocking operation
723
+ # }
724
+ # # Timeout::Error doesn't occur here
725
+ # }
726
+ # }
727
+ # ```
728
+ #
729
+ # In the first part of the `timeout` block, we can rely on Timeout::Error
730
+ # being ignored. Then in the `Timeout::Error => :on_blocking` block, any
731
+ # operation that will block the calling thread is susceptible to a
732
+ # Timeout::Error exception being raised.
733
+ #
734
+ #
735
+ # It’s possible to stack multiple levels of
736
+ # [::handle\_interrupt](Thread.downloaded.ruby_doc#method-c-handle_interrupt)
737
+ # blocks in order to control more than one ExceptionClass and TimingSymbol
738
+ # at a time.
739
+ #
740
+ # ```ruby
741
+ # Thread.handle_interrupt(FooError => :never) {
742
+ # Thread.handle_interrupt(BarError => :never) {
743
+ # # FooError and BarError are prohibited.
744
+ # }
745
+ # }
746
+ # ```
747
+ #
748
+ #
749
+ # All exceptions inherited from the ExceptionClass parameter will be
750
+ # considered.
751
+ #
752
+ # ```ruby
753
+ # Thread.handle_interrupt(Exception => :never) {
754
+ # # all exceptions inherited from Exception are prohibited.
755
+ # }
756
+ # ```
757
+ def self.handle_interrupt: (untyped hash) -> untyped
758
+
759
+ def self.kill: (Thread thread) -> untyped
760
+
761
+ def self.list: () -> untyped
762
+
763
+ # Give the thread scheduler a hint to pass execution to another thread. A
764
+ # running thread may or may not switch, it depends on OS and processor.
765
+ def self.pass: () -> untyped
766
+
767
+ # Returns whether or not the asynchronous queue is empty.
768
+ #
769
+ # Since
770
+ # [::handle\_interrupt](Thread.downloaded.ruby_doc#method-c-handle_interrupt)
771
+ # can be used to defer asynchronous events, this method can be used to
772
+ # determine if there are any deferred events.
773
+ #
774
+ # If you find this method returns true, then you may finish `:never`
775
+ # blocks.
776
+ #
777
+ # For example, the following method processes deferred asynchronous events
778
+ # immediately.
779
+ #
780
+ # ```ruby
781
+ # def Thread.kick_interrupt_immediately
782
+ # Thread.handle_interrupt(Object => :immediate) {
783
+ # Thread.pass
784
+ # }
785
+ # end
786
+ # ```
787
+ #
788
+ # If `error` is given, then check only for `error` type deferred events.
789
+ #
790
+ #
791
+ # th = Thread.new{
792
+ # Thread.handle_interrupt(RuntimeError => :on_blocking){
793
+ # while true
794
+ # ...
795
+ # # reach safe point to invoke interrupt
796
+ # if Thread.pending_interrupt?
797
+ # Thread.handle_interrupt(Object => :immediate){}
798
+ # end
799
+ # ...
800
+ # end
801
+ # }
802
+ # }
803
+ # ...
804
+ # th.raise # stop thread
805
+ #
806
+ # This example can also be written as the following, which you should use
807
+ # to avoid asynchronous interrupts.
808
+ #
809
+ # flag = true
810
+ # th = Thread.new{
811
+ # Thread.handle_interrupt(RuntimeError => :on_blocking){
812
+ # while true
813
+ # ...
814
+ # # reach safe point to invoke interrupt
815
+ # break if flag == false
816
+ # ...
817
+ # end
818
+ # }
819
+ # }
820
+ # ...
821
+ # flag = false # stop thread
822
+ def self.pending_interrupt?: (*untyped args) -> bool
823
+
824
+ def self.report_on_exception: () -> untyped
825
+
826
+ def self.report_on_exception=: (untyped report_on_exception) -> untyped
827
+
828
+ # Basically the same as [::new](Thread.downloaded.ruby_doc#method-c-new).
829
+ # However, if class [Thread](Thread.downloaded.ruby_doc) is subclassed,
830
+ # then calling `start` in that subclass will not invoke the subclass’s
831
+ # `initialize` method.
832
+ def self.start: (*untyped args) -> untyped
833
+
834
+ # Stops execution of the current thread, putting it into a “sleep” state,
835
+ # and schedules execution of another thread.
836
+ #
837
+ # ```ruby
838
+ # a = Thread.new { print "a"; Thread.stop; print "c" }
839
+ # sleep 0.1 while a.status!='sleep'
840
+ # print "b"
841
+ # a.run
842
+ # a.join
843
+ # #=> "abc"
844
+ # ```
845
+ def self.`stop`: () -> untyped
846
+ end
847
+
848
+ class Thread::Backtrace < Object
849
+ end
850
+
851
+ class Thread::Backtrace::Location
852
+ def absolute_path: () -> String?
853
+
854
+ def base_label: () -> String?
855
+
856
+ def label: () -> String?
857
+
858
+ def lineno: () -> Integer
859
+
860
+ def path: () -> String?
861
+ end
862
+
863
+ # [ConditionVariable](ConditionVariable) objects
864
+ # augment class [Mutex](https://ruby-doc.org/core-2.6.3/Mutex.html).
865
+ # Using condition variables, it is possible to suspend while in the middle
866
+ # of a critical section until a resource becomes available.
867
+ #
868
+ # Example:
869
+ #
870
+ # ```ruby
871
+ # mutex = Mutex.new
872
+ # resource = ConditionVariable.new
873
+ #
874
+ # a = Thread.new {
875
+ # mutex.synchronize {
876
+ # # Thread 'a' now needs the resource
877
+ # resource.wait(mutex)
878
+ # # 'a' can now have the resource
879
+ # }
880
+ # }
881
+ #
882
+ # b = Thread.new {
883
+ # mutex.synchronize {
884
+ # # Thread 'b' has finished using the resource
885
+ # resource.signal
886
+ # }
887
+ # }
888
+ # ```
889
+ class Thread::ConditionVariable < Object
890
+ # Wakes up all threads waiting for this lock.
891
+ def broadcast: () -> self
892
+
893
+ # Wakes up the first thread in line waiting for this lock.
894
+ def signal: () -> self
895
+
896
+ # Releases the lock held in `mutex` and waits; reacquires the lock on
897
+ # wakeup.
898
+ #
899
+ # If `timeout` is given, this method returns after `timeout` seconds
900
+ # passed, even if no other thread doesn't signal.
901
+ def wait: (Mutex mutex, ?Integer timeout) -> self
902
+ end
903
+
904
+ # [Mutex](Mutex) implements a simple semaphore that
905
+ # can be used to coordinate access to shared data from multiple concurrent
906
+ # threads.
907
+ #
908
+ # Example:
909
+ #
910
+ # ```ruby
911
+ # semaphore = Mutex.new
912
+ #
913
+ # a = Thread.new {
914
+ # semaphore.synchronize {
915
+ # # access shared resource
916
+ # }
917
+ # }
918
+ #
919
+ # b = Thread.new {
920
+ # semaphore.synchronize {
921
+ # # access shared resource
922
+ # }
923
+ # }
924
+ # ```
925
+ class Thread::Mutex < Object
926
+ # Attempts to grab the lock and waits if it isn’t available. Raises
927
+ # `ThreadError` if `mutex` was locked by the current thread.
928
+ def lock: () -> self
929
+
930
+ # Returns `true` if this lock is currently held by some thread.
931
+ def locked?: () -> bool
932
+
933
+ # Returns `true` if this lock is currently held by current thread.
934
+ def owned?: () -> bool
935
+
936
+ # Obtains a lock, runs the block, and releases the lock when the block
937
+ # completes. See the example under `Mutex` .
938
+ def synchronize: [X] () { () -> X } -> X
939
+
940
+ # Attempts to obtain the lock and returns immediately. Returns `true` if
941
+ # the lock was granted.
942
+ def try_lock: () -> bool
943
+
944
+ # Releases the lock. Raises `ThreadError` if `mutex` wasn’t locked by the
945
+ # current thread.
946
+ def unlock: () -> self
947
+ end
948
+
949
+ # The [Queue](Queue) class implements multi-producer,
950
+ # multi-consumer queues. It is especially useful in threaded programming
951
+ # when information must be exchanged safely between multiple threads. The
952
+ # [Queue](Queue) class implements all the required
953
+ # locking semantics.
954
+ #
955
+ # The class implements FIFO type of queue. In a FIFO queue, the first
956
+ # tasks added are the first retrieved.
957
+ #
958
+ # Example:
959
+ #
960
+ # ```ruby
961
+ # queue = Queue.new
962
+ #
963
+ # producer = Thread.new do
964
+ # 5.times do |i|
965
+ # sleep rand(i) # simulate expense
966
+ # queue << i
967
+ # puts "#{i} produced"
968
+ # end
969
+ # end
970
+ #
971
+ # consumer = Thread.new do
972
+ # 5.times do |i|
973
+ # value = queue.pop
974
+ # sleep rand(i/2) # simulate expense
975
+ # puts "consumed #{value}"
976
+ # end
977
+ # end
978
+ #
979
+ # consumer.join
980
+ # ```
981
+ class Thread::Queue < Object
982
+ # Alias for: [push](Queue.downloaded.ruby_doc#method-i-push)
983
+ alias << push
984
+
985
+ # Removes all objects from the queue.
986
+ def clear: () -> void
987
+
988
+ # Closes the queue. A closed queue cannot be re-opened.
989
+ #
990
+ # After the call to close completes, the following are true:
991
+ #
992
+ # - `closed?` will return true
993
+ #
994
+ # - `close` will be ignored.
995
+ #
996
+ # - calling enq/push/\<\< will raise a `ClosedQueueError` .
997
+ #
998
+ # - when `empty?` is false, calling deq/pop/shift will return an object
999
+ # from the queue as usual.
1000
+ #
1001
+ # - when `empty?` is true, deq(false) will not suspend the thread and
1002
+ # will return nil. deq(true) will raise a `ThreadError` .
1003
+ #
1004
+ # [ClosedQueueError](https://ruby-doc.org/core-2.6.3/ClosedQueueError.html)
1005
+ # is inherited from
1006
+ # [StopIteration](https://ruby-doc.org/core-2.6.3/StopIteration.html), so
1007
+ # that you can break loop block.
1008
+ #
1009
+ # Example:
1010
+ #
1011
+ # q = Queue.new
1012
+ # Thread.new{
1013
+ # while e = q.deq # wait for nil to break loop
1014
+ # # ...
1015
+ # end
1016
+ # }
1017
+ # q.close
1018
+ def close: () -> self
1019
+
1020
+ # Returns `true` if the queue is closed.
1021
+ def closed?: () -> bool
1022
+
1023
+ # Alias for: [pop](Queue.downloaded.ruby_doc#method-i-pop)
1024
+ alias deq pop
1025
+
1026
+ # Returns `true` if the queue is empty.
1027
+ def empty?: () -> bool
1028
+
1029
+ # Alias for: [push](Queue.downloaded.ruby_doc#method-i-push)
1030
+ alias enq push
1031
+
1032
+ # Returns the length of the queue.
1033
+ #
1034
+ #
1035
+ #
1036
+ # Also aliased as: [size](Queue.downloaded.ruby_doc#method-i-size)
1037
+ def length: () -> Integer
1038
+
1039
+ # Returns the number of threads waiting on the queue.
1040
+ def num_waiting: () -> Integer
1041
+
1042
+ # Retrieves data from the queue.
1043
+ #
1044
+ # If the queue is empty, the calling thread is suspended until data is
1045
+ # pushed onto the queue. If `non_block` is true, the thread isn't
1046
+ # suspended, and `ThreadError` is raised.
1047
+ #
1048
+ #
1049
+ #
1050
+ # Also aliased as: [deq](Queue.downloaded.ruby_doc#method-i-deq),
1051
+ # [shift](Queue.downloaded.ruby_doc#method-i-shift)
1052
+ def pop: (?bool non_block) -> untyped
1053
+
1054
+ # Pushes the given `object` to the queue.
1055
+ #
1056
+ #
1057
+ #
1058
+ # Also aliased as: [enq](Queue.downloaded.ruby_doc#method-i-enq),
1059
+ # [\<\<](Queue.downloaded.ruby_doc#method-i-3C-3C)
1060
+ def push: (untyped obj) -> void
1061
+
1062
+ # Alias for: [pop](Queue.downloaded.ruby_doc#method-i-pop)
1063
+ alias shift pop
1064
+
1065
+ # Alias for: [length](Queue.downloaded.ruby_doc#method-i-length)
1066
+ alias size length
1067
+ end
1068
+
1069
+ # This class represents queues of specified size capacity. The push
1070
+ # operation may be blocked if the capacity is full.
1071
+ #
1072
+ # See [Queue](https://ruby-doc.org/core-2.6.3/Queue.html) for an example
1073
+ # of how a [SizedQueue](SizedQueue) works.
1074
+ class Thread::SizedQueue < Thread::Queue
1075
+ # Alias for: [push](SizedQueue.downloaded.ruby_doc#method-i-push)
1076
+ alias << push
1077
+
1078
+ # Alias for: [push](SizedQueue.downloaded.ruby_doc#method-i-push)
1079
+ alias enq push
1080
+
1081
+ def initialize: (Integer max) -> SizedQueue
1082
+
1083
+ # Returns the maximum size of the queue.
1084
+ def max: () -> Integer
1085
+
1086
+ # Sets the maximum size of the queue to the given `number` .
1087
+ def max=: (Integer max) -> void
1088
+
1089
+ # Pushes `object` to the queue.
1090
+ #
1091
+ # If there is no space left in the queue, waits until space becomes
1092
+ # available, unless `non_block` is true. If `non_block` is true, the
1093
+ # thread isn't suspended, and `ThreadError` is raised.
1094
+ #
1095
+ #
1096
+ #
1097
+ # Also aliased as: [enq](SizedQueue.downloaded.ruby_doc#method-i-enq),
1098
+ # [\<\<](SizedQueue.downloaded.ruby_doc#method-i-3C-3C)
1099
+ def push: (untyped obj, ?bool non_block) -> void
1100
+ end
1101
+
1102
+ ConditionVariable: singleton(Thread::ConditionVariable)
1103
+
1104
+ Mutex: singleton(Thread::Mutex)
1105
+
1106
+ Queue: singleton(Thread::Queue)
1107
+
1108
+ SizedQueue: singleton(Thread::SizedQueue)