rbs 4.1.0.pre.2-java

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 (574) hide show
  1. checksums.yaml +7 -0
  2. data/.clang-format +75 -0
  3. data/.clangd +2 -0
  4. data/.github/dependabot.yml +24 -0
  5. data/.github/workflows/bundle-update.yml +63 -0
  6. data/.github/workflows/c-check.yml +61 -0
  7. data/.github/workflows/comments.yml +37 -0
  8. data/.github/workflows/dependabot.yml +30 -0
  9. data/.github/workflows/jruby.yml +67 -0
  10. data/.github/workflows/milestone.yml +83 -0
  11. data/.github/workflows/ruby.yml +158 -0
  12. data/.github/workflows/rust.yml +184 -0
  13. data/.github/workflows/truffleruby.yml +54 -0
  14. data/.github/workflows/typecheck.yml +39 -0
  15. data/.github/workflows/wasm.yml +53 -0
  16. data/.github/workflows/windows.yml +49 -0
  17. data/.gitignore +38 -0
  18. data/.rubocop.yml +72 -0
  19. data/BSDL +22 -0
  20. data/CHANGELOG.md +2292 -0
  21. data/COPYING +56 -0
  22. data/README.md +240 -0
  23. data/Rakefile +869 -0
  24. data/Steepfile +53 -0
  25. data/config.yml +913 -0
  26. data/core/array.rbs +4142 -0
  27. data/core/basic_object.rbs +376 -0
  28. data/core/binding.rbs +148 -0
  29. data/core/builtin.rbs +278 -0
  30. data/core/class.rbs +223 -0
  31. data/core/comparable.rbs +192 -0
  32. data/core/complex.rbs +812 -0
  33. data/core/constants.rbs +96 -0
  34. data/core/data.rbs +415 -0
  35. data/core/dir.rbs +993 -0
  36. data/core/encoding.rbs +1368 -0
  37. data/core/enumerable.rbs +2506 -0
  38. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  39. data/core/enumerator/product.rbs +92 -0
  40. data/core/enumerator.rbs +705 -0
  41. data/core/env.rbs +6 -0
  42. data/core/errno.rbs +682 -0
  43. data/core/errors.rbs +789 -0
  44. data/core/exception.rbs +485 -0
  45. data/core/false_class.rbs +82 -0
  46. data/core/fiber.rbs +570 -0
  47. data/core/fiber_error.rbs +11 -0
  48. data/core/file.rbs +2045 -0
  49. data/core/file_constants.rbs +463 -0
  50. data/core/file_stat.rbs +534 -0
  51. data/core/file_test.rbs +331 -0
  52. data/core/float.rbs +1316 -0
  53. data/core/gc.rbs +788 -0
  54. data/core/global_variables.rbs +184 -0
  55. data/core/hash.rbs +2183 -0
  56. data/core/integer.rbs +1374 -0
  57. data/core/io/buffer.rbs +995 -0
  58. data/core/io/wait.rbs +48 -0
  59. data/core/io.rbs +3472 -0
  60. data/core/kernel.rbs +3172 -0
  61. data/core/marshal.rbs +207 -0
  62. data/core/match_data.rbs +637 -0
  63. data/core/math.rbs +770 -0
  64. data/core/method.rbs +422 -0
  65. data/core/module.rbs +1856 -0
  66. data/core/nil_class.rbs +210 -0
  67. data/core/numeric.rbs +832 -0
  68. data/core/object.rbs +108 -0
  69. data/core/object_space/weak_key_map.rbs +166 -0
  70. data/core/object_space.rbs +197 -0
  71. data/core/pathname.rbs +1322 -0
  72. data/core/proc.rbs +905 -0
  73. data/core/process.rbs +2316 -0
  74. data/core/ractor.rbs +924 -0
  75. data/core/random.rbs +255 -0
  76. data/core/range.rbs +1209 -0
  77. data/core/rational.rbs +502 -0
  78. data/core/rb_config.rbs +88 -0
  79. data/core/rbs/ops.rbs +154 -0
  80. data/core/rbs/unnamed/argf.rbs +1236 -0
  81. data/core/rbs/unnamed/env_class.rbs +1214 -0
  82. data/core/rbs/unnamed/main_class.rbs +123 -0
  83. data/core/rbs/unnamed/random.rbs +186 -0
  84. data/core/refinement.rbs +59 -0
  85. data/core/regexp.rbs +1974 -0
  86. data/core/ruby.rbs +53 -0
  87. data/core/ruby_vm.rbs +809 -0
  88. data/core/rubygems/basic_specification.rbs +6 -0
  89. data/core/rubygems/config_file.rbs +38 -0
  90. data/core/rubygems/dependency_installer.rbs +6 -0
  91. data/core/rubygems/errors.rbs +109 -0
  92. data/core/rubygems/installer.rbs +15 -0
  93. data/core/rubygems/path_support.rbs +6 -0
  94. data/core/rubygems/platform.rbs +7 -0
  95. data/core/rubygems/request_set.rbs +49 -0
  96. data/core/rubygems/requirement.rbs +148 -0
  97. data/core/rubygems/rubygems.rbs +1105 -0
  98. data/core/rubygems/source_list.rbs +15 -0
  99. data/core/rubygems/specification.rbs +23 -0
  100. data/core/rubygems/stream_ui.rbs +5 -0
  101. data/core/rubygems/uninstaller.rbs +10 -0
  102. data/core/rubygems/version.rbs +293 -0
  103. data/core/set.rbs +751 -0
  104. data/core/signal.rbs +110 -0
  105. data/core/string.rbs +5532 -0
  106. data/core/struct.rbs +668 -0
  107. data/core/symbol.rbs +482 -0
  108. data/core/thread.rbs +1826 -0
  109. data/core/thread_group.rbs +79 -0
  110. data/core/time.rbs +1793 -0
  111. data/core/trace_point.rbs +483 -0
  112. data/core/true_class.rbs +98 -0
  113. data/core/unbound_method.rbs +337 -0
  114. data/core/warning.rbs +87 -0
  115. data/docs/CONTRIBUTING.md +107 -0
  116. data/docs/aliases.md +79 -0
  117. data/docs/architecture.md +110 -0
  118. data/docs/collection.md +192 -0
  119. data/docs/config.md +171 -0
  120. data/docs/data_and_struct.md +86 -0
  121. data/docs/encoding.md +56 -0
  122. data/docs/gem.md +56 -0
  123. data/docs/inline.md +634 -0
  124. data/docs/rbs_by_example.md +309 -0
  125. data/docs/repo.md +125 -0
  126. data/docs/rust.md +96 -0
  127. data/docs/sigs.md +167 -0
  128. data/docs/stdlib.md +147 -0
  129. data/docs/syntax.md +940 -0
  130. data/docs/tools.md +17 -0
  131. data/docs/type_fingerprint.md +21 -0
  132. data/docs/wasm_serialization.md +80 -0
  133. data/exe/rbs +7 -0
  134. data/ext/rbs_extension/ast_translation.c +1855 -0
  135. data/ext/rbs_extension/ast_translation.h +41 -0
  136. data/ext/rbs_extension/class_constants.c +187 -0
  137. data/ext/rbs_extension/class_constants.h +104 -0
  138. data/ext/rbs_extension/compat.h +10 -0
  139. data/ext/rbs_extension/extconf.rb +40 -0
  140. data/ext/rbs_extension/legacy_location.c +294 -0
  141. data/ext/rbs_extension/legacy_location.h +82 -0
  142. data/ext/rbs_extension/main.c +613 -0
  143. data/ext/rbs_extension/rbs_extension.h +16 -0
  144. data/ext/rbs_extension/rbs_string_bridging.c +9 -0
  145. data/ext/rbs_extension/rbs_string_bridging.h +24 -0
  146. data/goodcheck.yml +91 -0
  147. data/include/rbs/ast.h +1047 -0
  148. data/include/rbs/defines.h +99 -0
  149. data/include/rbs/lexer.h +207 -0
  150. data/include/rbs/location.h +40 -0
  151. data/include/rbs/parser.h +153 -0
  152. data/include/rbs/serialize.h +39 -0
  153. data/include/rbs/string.h +47 -0
  154. data/include/rbs/util/rbs_allocator.h +59 -0
  155. data/include/rbs/util/rbs_assert.h +20 -0
  156. data/include/rbs/util/rbs_buffer.h +83 -0
  157. data/include/rbs/util/rbs_constant_pool.h +155 -0
  158. data/include/rbs/util/rbs_encoding.h +282 -0
  159. data/include/rbs/util/rbs_unescape.h +24 -0
  160. data/include/rbs.h +14 -0
  161. data/lib/rbs/ancestor_graph.rb +92 -0
  162. data/lib/rbs/annotate/annotations.rb +199 -0
  163. data/lib/rbs/annotate/formatter.rb +82 -0
  164. data/lib/rbs/annotate/rdoc_annotator.rb +398 -0
  165. data/lib/rbs/annotate/rdoc_source.rb +131 -0
  166. data/lib/rbs/annotate.rb +8 -0
  167. data/lib/rbs/ast/annotation.rb +29 -0
  168. data/lib/rbs/ast/comment.rb +29 -0
  169. data/lib/rbs/ast/declarations.rb +472 -0
  170. data/lib/rbs/ast/directives.rb +49 -0
  171. data/lib/rbs/ast/members.rb +451 -0
  172. data/lib/rbs/ast/ruby/annotations.rb +451 -0
  173. data/lib/rbs/ast/ruby/comment_block.rb +247 -0
  174. data/lib/rbs/ast/ruby/declarations.rb +291 -0
  175. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  176. data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  177. data/lib/rbs/ast/ruby/members.rb +762 -0
  178. data/lib/rbs/ast/type_param.rb +235 -0
  179. data/lib/rbs/ast/visitor.rb +137 -0
  180. data/lib/rbs/buffer.rb +189 -0
  181. data/lib/rbs/builtin_names.rb +58 -0
  182. data/lib/rbs/cli/colored_io.rb +48 -0
  183. data/lib/rbs/cli/diff.rb +84 -0
  184. data/lib/rbs/cli/validate.rb +294 -0
  185. data/lib/rbs/cli.rb +1253 -0
  186. data/lib/rbs/collection/cleaner.rb +38 -0
  187. data/lib/rbs/collection/config/lockfile.rb +92 -0
  188. data/lib/rbs/collection/config/lockfile_generator.rb +269 -0
  189. data/lib/rbs/collection/config.rb +81 -0
  190. data/lib/rbs/collection/installer.rb +32 -0
  191. data/lib/rbs/collection/sources/base.rb +14 -0
  192. data/lib/rbs/collection/sources/git.rb +265 -0
  193. data/lib/rbs/collection/sources/local.rb +81 -0
  194. data/lib/rbs/collection/sources/rubygems.rb +48 -0
  195. data/lib/rbs/collection/sources/stdlib.rb +50 -0
  196. data/lib/rbs/collection/sources.rb +38 -0
  197. data/lib/rbs/collection.rb +16 -0
  198. data/lib/rbs/constant.rb +28 -0
  199. data/lib/rbs/definition.rb +415 -0
  200. data/lib/rbs/definition_builder/ancestor_builder.rb +678 -0
  201. data/lib/rbs/definition_builder/method_builder.rb +295 -0
  202. data/lib/rbs/definition_builder.rb +1054 -0
  203. data/lib/rbs/diff.rb +131 -0
  204. data/lib/rbs/environment/class_entry.rb +69 -0
  205. data/lib/rbs/environment/module_entry.rb +66 -0
  206. data/lib/rbs/environment/use_map.rb +77 -0
  207. data/lib/rbs/environment.rb +1028 -0
  208. data/lib/rbs/environment_loader.rb +167 -0
  209. data/lib/rbs/environment_walker.rb +155 -0
  210. data/lib/rbs/errors.rb +634 -0
  211. data/lib/rbs/factory.rb +18 -0
  212. data/lib/rbs/file_finder.rb +28 -0
  213. data/lib/rbs/inline_parser/comment_association.rb +117 -0
  214. data/lib/rbs/inline_parser.rb +568 -0
  215. data/lib/rbs/location_aux.rb +170 -0
  216. data/lib/rbs/locator.rb +247 -0
  217. data/lib/rbs/method_type.rb +145 -0
  218. data/lib/rbs/namespace.rb +154 -0
  219. data/lib/rbs/parser/lex_result.rb +15 -0
  220. data/lib/rbs/parser/token.rb +23 -0
  221. data/lib/rbs/parser_aux.rb +142 -0
  222. data/lib/rbs/prototype/helpers.rb +197 -0
  223. data/lib/rbs/prototype/node_usage.rb +99 -0
  224. data/lib/rbs/prototype/rb.rb +816 -0
  225. data/lib/rbs/prototype/rbi.rb +625 -0
  226. data/lib/rbs/prototype/runtime/helpers.rb +59 -0
  227. data/lib/rbs/prototype/runtime/reflection.rb +19 -0
  228. data/lib/rbs/prototype/runtime/value_object_generator.rb +279 -0
  229. data/lib/rbs/prototype/runtime.rb +680 -0
  230. data/lib/rbs/repository.rb +127 -0
  231. data/lib/rbs/resolver/constant_resolver.rb +219 -0
  232. data/lib/rbs/resolver/type_name_resolver.rb +167 -0
  233. data/lib/rbs/rewriter.rb +70 -0
  234. data/lib/rbs/sorter.rb +198 -0
  235. data/lib/rbs/source.rb +99 -0
  236. data/lib/rbs/substitution.rb +83 -0
  237. data/lib/rbs/subtractor.rb +204 -0
  238. data/lib/rbs/test/errors.rb +80 -0
  239. data/lib/rbs/test/guaranteed.rb +30 -0
  240. data/lib/rbs/test/hook.rb +212 -0
  241. data/lib/rbs/test/observer.rb +19 -0
  242. data/lib/rbs/test/setup.rb +84 -0
  243. data/lib/rbs/test/setup_helper.rb +50 -0
  244. data/lib/rbs/test/tester.rb +167 -0
  245. data/lib/rbs/test/type_check.rb +457 -0
  246. data/lib/rbs/test.rb +112 -0
  247. data/lib/rbs/type_alias_dependency.rb +100 -0
  248. data/lib/rbs/type_alias_regularity.rb +126 -0
  249. data/lib/rbs/type_name.rb +122 -0
  250. data/lib/rbs/types.rb +1604 -0
  251. data/lib/rbs/unit_test/convertibles.rb +177 -0
  252. data/lib/rbs/unit_test/spy.rb +138 -0
  253. data/lib/rbs/unit_test/type_assertions.rb +383 -0
  254. data/lib/rbs/unit_test/with_aliases.rb +145 -0
  255. data/lib/rbs/unit_test.rb +6 -0
  256. data/lib/rbs/validator.rb +186 -0
  257. data/lib/rbs/variance_calculator.rb +189 -0
  258. data/lib/rbs/vendorer.rb +71 -0
  259. data/lib/rbs/version.rb +5 -0
  260. data/lib/rbs/wasm/deserializer.rb +213 -0
  261. data/lib/rbs/wasm/jars/asm-analysis.jar +0 -0
  262. data/lib/rbs/wasm/jars/asm-commons.jar +0 -0
  263. data/lib/rbs/wasm/jars/asm-tree.jar +0 -0
  264. data/lib/rbs/wasm/jars/asm-util.jar +0 -0
  265. data/lib/rbs/wasm/jars/asm.jar +0 -0
  266. data/lib/rbs/wasm/jars/compiler.jar +0 -0
  267. data/lib/rbs/wasm/jars/log.jar +0 -0
  268. data/lib/rbs/wasm/jars/runtime.jar +0 -0
  269. data/lib/rbs/wasm/jars/wasi.jar +0 -0
  270. data/lib/rbs/wasm/jars/wasm.jar +0 -0
  271. data/lib/rbs/wasm/location.rb +61 -0
  272. data/lib/rbs/wasm/parser.rb +137 -0
  273. data/lib/rbs/wasm/rbs_parser.wasm +0 -0
  274. data/lib/rbs/wasm/runtime.rb +217 -0
  275. data/lib/rbs/wasm/serialization_schema.rb +110 -0
  276. data/lib/rbs/writer.rb +424 -0
  277. data/lib/rbs.rb +117 -0
  278. data/lib/rdoc/discover.rb +20 -0
  279. data/lib/rdoc_plugin/parser.rb +163 -0
  280. data/rbs.gemspec +68 -0
  281. data/schema/annotation.json +14 -0
  282. data/schema/comment.json +26 -0
  283. data/schema/decls.json +326 -0
  284. data/schema/function.json +87 -0
  285. data/schema/location.json +56 -0
  286. data/schema/members.json +266 -0
  287. data/schema/methodType.json +50 -0
  288. data/schema/typeParam.json +52 -0
  289. data/schema/types.json +317 -0
  290. data/sig/ancestor_builder.rbs +163 -0
  291. data/sig/ancestor_graph.rbs +60 -0
  292. data/sig/annotate/annotations.rbs +102 -0
  293. data/sig/annotate/formatter.rbs +24 -0
  294. data/sig/annotate/rdoc_annotater.rbs +85 -0
  295. data/sig/annotate/rdoc_source.rbs +32 -0
  296. data/sig/annotation.rbs +27 -0
  297. data/sig/ast/ruby/annotations.rbs +470 -0
  298. data/sig/ast/ruby/comment_block.rbs +127 -0
  299. data/sig/ast/ruby/declarations.rbs +158 -0
  300. data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  301. data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  302. data/sig/ast/ruby/members.rbs +198 -0
  303. data/sig/buffer.rbs +108 -0
  304. data/sig/builtin_names.rbs +44 -0
  305. data/sig/cli/colored_io.rbs +15 -0
  306. data/sig/cli/diff.rbs +15 -0
  307. data/sig/cli/validate.rbs +47 -0
  308. data/sig/cli.rbs +89 -0
  309. data/sig/collection/cleaner.rbs +13 -0
  310. data/sig/collection/config/lockfile.rbs +74 -0
  311. data/sig/collection/config/lockfile_generator.rbs +68 -0
  312. data/sig/collection/config.rbs +46 -0
  313. data/sig/collection/installer.rbs +17 -0
  314. data/sig/collection/sources.rbs +214 -0
  315. data/sig/collection.rbs +4 -0
  316. data/sig/comment.rbs +26 -0
  317. data/sig/constant.rbs +21 -0
  318. data/sig/declarations.rbs +274 -0
  319. data/sig/definition.rbs +232 -0
  320. data/sig/definition_builder.rbs +181 -0
  321. data/sig/diff.rbs +28 -0
  322. data/sig/directives.rbs +77 -0
  323. data/sig/environment/class_entry.rbs +50 -0
  324. data/sig/environment/module_entry.rbs +50 -0
  325. data/sig/environment.rbs +286 -0
  326. data/sig/environment_loader.rbs +111 -0
  327. data/sig/environment_walker.rbs +65 -0
  328. data/sig/errors.rbs +408 -0
  329. data/sig/factory.rbs +5 -0
  330. data/sig/file_finder.rbs +28 -0
  331. data/sig/inline_parser/comment_association.rbs +71 -0
  332. data/sig/inline_parser.rbs +126 -0
  333. data/sig/location.rbs +135 -0
  334. data/sig/locator.rbs +56 -0
  335. data/sig/manifest.yaml +5 -0
  336. data/sig/members.rbs +258 -0
  337. data/sig/method_builder.rbs +89 -0
  338. data/sig/method_types.rbs +58 -0
  339. data/sig/namespace.rbs +161 -0
  340. data/sig/parser.rbs +164 -0
  341. data/sig/prototype/helpers.rbs +29 -0
  342. data/sig/prototype/node_usage.rbs +20 -0
  343. data/sig/prototype/rb.rbs +96 -0
  344. data/sig/prototype/rbi.rbs +75 -0
  345. data/sig/prototype/runtime.rbs +182 -0
  346. data/sig/rbs.rbs +21 -0
  347. data/sig/rdoc/rbs.rbs +67 -0
  348. data/sig/repository.rbs +85 -0
  349. data/sig/resolver/constant_resolver.rbs +92 -0
  350. data/sig/resolver/context.rbs +34 -0
  351. data/sig/resolver/type_name_resolver.rbs +61 -0
  352. data/sig/rewriter.rbs +45 -0
  353. data/sig/shims/bundler.rbs +38 -0
  354. data/sig/shims/enumerable.rbs +5 -0
  355. data/sig/shims/rubygems.rbs +19 -0
  356. data/sig/sorter.rbs +41 -0
  357. data/sig/source.rbs +48 -0
  358. data/sig/substitution.rbs +48 -0
  359. data/sig/subtractor.rbs +37 -0
  360. data/sig/test/errors.rbs +52 -0
  361. data/sig/test/guranteed.rbs +9 -0
  362. data/sig/test/type_check.rbs +19 -0
  363. data/sig/test.rbs +82 -0
  364. data/sig/type_alias_dependency.rbs +53 -0
  365. data/sig/type_alias_regularity.rbs +98 -0
  366. data/sig/type_param.rbs +115 -0
  367. data/sig/typename.rbs +89 -0
  368. data/sig/types.rbs +578 -0
  369. data/sig/unit_test/convertibles.rbs +154 -0
  370. data/sig/unit_test/spy.rbs +22 -0
  371. data/sig/unit_test/type_assertions.rbs +211 -0
  372. data/sig/unit_test/with_aliases.rbs +136 -0
  373. data/sig/use_map.rbs +35 -0
  374. data/sig/util.rbs +9 -0
  375. data/sig/validator.rbs +63 -0
  376. data/sig/variance_calculator.rbs +87 -0
  377. data/sig/vendorer.rbs +51 -0
  378. data/sig/version.rbs +3 -0
  379. data/sig/visitor.rbs +47 -0
  380. data/sig/wasm/deserializer.rbs +66 -0
  381. data/sig/wasm/serialization_schema.rbs +13 -0
  382. data/sig/writer.rbs +127 -0
  383. data/src/ast.c +1628 -0
  384. data/src/lexer.c +3217 -0
  385. data/src/lexer.re +155 -0
  386. data/src/lexstate.c +217 -0
  387. data/src/location.c +31 -0
  388. data/src/parser.c +4255 -0
  389. data/src/serialize.c +958 -0
  390. data/src/string.c +41 -0
  391. data/src/util/rbs_allocator.c +162 -0
  392. data/src/util/rbs_assert.c +19 -0
  393. data/src/util/rbs_buffer.c +54 -0
  394. data/src/util/rbs_constant_pool.c +268 -0
  395. data/src/util/rbs_encoding.c +21308 -0
  396. data/src/util/rbs_unescape.c +167 -0
  397. data/stdlib/abbrev/0/abbrev.rbs +66 -0
  398. data/stdlib/abbrev/0/array.rbs +26 -0
  399. data/stdlib/base64/0/base64.rbs +355 -0
  400. data/stdlib/benchmark/0/benchmark.rbs +452 -0
  401. data/stdlib/bigdecimal/0/big_decimal.rbs +1647 -0
  402. data/stdlib/bigdecimal-math/0/big_math.rbs +280 -0
  403. data/stdlib/bigdecimal-math/0/manifest.yaml +2 -0
  404. data/stdlib/cgi/0/core.rbs +911 -0
  405. data/stdlib/cgi/0/manifest.yaml +4 -0
  406. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  407. data/stdlib/coverage/0/coverage.rbs +266 -0
  408. data/stdlib/csv/0/csv.rbs +3776 -0
  409. data/stdlib/csv/0/manifest.yaml +3 -0
  410. data/stdlib/date/0/date.rbs +1598 -0
  411. data/stdlib/date/0/date_time.rbs +617 -0
  412. data/stdlib/date/0/time.rbs +26 -0
  413. data/stdlib/dbm/0/dbm.rbs +421 -0
  414. data/stdlib/delegate/0/delegator.rbs +187 -0
  415. data/stdlib/delegate/0/kernel.rbs +47 -0
  416. data/stdlib/delegate/0/simple_delegator.rbs +96 -0
  417. data/stdlib/did_you_mean/0/did_you_mean.rbs +344 -0
  418. data/stdlib/digest/0/digest.rbs +687 -0
  419. data/stdlib/erb/0/erb.rbs +933 -0
  420. data/stdlib/etc/0/etc.rbs +884 -0
  421. data/stdlib/fileutils/0/fileutils.rbs +1753 -0
  422. data/stdlib/find/0/find.rbs +49 -0
  423. data/stdlib/forwardable/0/forwardable.rbs +271 -0
  424. data/stdlib/io-console/0/io-console.rbs +414 -0
  425. data/stdlib/ipaddr/0/ipaddr.rbs +436 -0
  426. data/stdlib/json/0/json.rbs +1963 -0
  427. data/stdlib/kconv/0/kconv.rbs +166 -0
  428. data/stdlib/logger/0/formatter.rbs +45 -0
  429. data/stdlib/logger/0/log_device.rbs +100 -0
  430. data/stdlib/logger/0/logger.rbs +796 -0
  431. data/stdlib/logger/0/manifest.yaml +2 -0
  432. data/stdlib/logger/0/period.rbs +17 -0
  433. data/stdlib/logger/0/severity.rbs +34 -0
  434. data/stdlib/minitest/0/kernel.rbs +42 -0
  435. data/stdlib/minitest/0/minitest/abstract_reporter.rbs +52 -0
  436. data/stdlib/minitest/0/minitest/assertion.rbs +17 -0
  437. data/stdlib/minitest/0/minitest/assertions.rbs +590 -0
  438. data/stdlib/minitest/0/minitest/backtrace_filter.rbs +23 -0
  439. data/stdlib/minitest/0/minitest/bench_spec.rbs +102 -0
  440. data/stdlib/minitest/0/minitest/benchmark.rbs +259 -0
  441. data/stdlib/minitest/0/minitest/composite_reporter.rbs +25 -0
  442. data/stdlib/minitest/0/minitest/compress.rbs +13 -0
  443. data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  444. data/stdlib/minitest/0/minitest/expectation.rbs +2 -0
  445. data/stdlib/minitest/0/minitest/expectations.rbs +21 -0
  446. data/stdlib/minitest/0/minitest/guard.rbs +64 -0
  447. data/stdlib/minitest/0/minitest/mock.rbs +64 -0
  448. data/stdlib/minitest/0/minitest/parallel/executor.rbs +46 -0
  449. data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +5 -0
  450. data/stdlib/minitest/0/minitest/parallel/test.rbs +3 -0
  451. data/stdlib/minitest/0/minitest/parallel.rbs +2 -0
  452. data/stdlib/minitest/0/minitest/pride_io.rbs +62 -0
  453. data/stdlib/minitest/0/minitest/pride_lol.rbs +19 -0
  454. data/stdlib/minitest/0/minitest/progress_reporter.rbs +11 -0
  455. data/stdlib/minitest/0/minitest/reportable.rbs +53 -0
  456. data/stdlib/minitest/0/minitest/reporter.rbs +5 -0
  457. data/stdlib/minitest/0/minitest/result.rbs +28 -0
  458. data/stdlib/minitest/0/minitest/runnable.rbs +163 -0
  459. data/stdlib/minitest/0/minitest/skip.rbs +6 -0
  460. data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +48 -0
  461. data/stdlib/minitest/0/minitest/spec/dsl.rbs +129 -0
  462. data/stdlib/minitest/0/minitest/spec.rbs +11 -0
  463. data/stdlib/minitest/0/minitest/statistics_reporter.rbs +81 -0
  464. data/stdlib/minitest/0/minitest/summary_reporter.rbs +18 -0
  465. data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +92 -0
  466. data/stdlib/minitest/0/minitest/test.rbs +69 -0
  467. data/stdlib/minitest/0/minitest/unexpected_error.rbs +12 -0
  468. data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  469. data/stdlib/minitest/0/minitest/unit/test_case.rbs +3 -0
  470. data/stdlib/minitest/0/minitest/unit.rbs +4 -0
  471. data/stdlib/minitest/0/minitest.rbs +115 -0
  472. data/stdlib/monitor/0/monitor.rbs +363 -0
  473. data/stdlib/mutex_m/0/mutex_m.rbs +104 -0
  474. data/stdlib/net-http/0/manifest.yaml +3 -0
  475. data/stdlib/net-http/0/net-http.rbs +5580 -0
  476. data/stdlib/net-protocol/0/manifest.yaml +2 -0
  477. data/stdlib/net-protocol/0/net-protocol.rbs +56 -0
  478. data/stdlib/net-smtp/0/manifest.yaml +2 -0
  479. data/stdlib/net-smtp/0/net-smtp.rbs +55 -0
  480. data/stdlib/nkf/0/nkf.rbs +402 -0
  481. data/stdlib/objspace/0/objspace.rbs +470 -0
  482. data/stdlib/observable/0/observable.rbs +217 -0
  483. data/stdlib/open-uri/0/manifest.yaml +4 -0
  484. data/stdlib/open-uri/0/open-uri.rbs +433 -0
  485. data/stdlib/open3/0/open3.rbs +606 -0
  486. data/stdlib/openssl/0/manifest.yaml +3 -0
  487. data/stdlib/openssl/0/openssl.rbs +12231 -0
  488. data/stdlib/optparse/0/optparse.rbs +1734 -0
  489. data/stdlib/pathname/0/pathname.rbs +36 -0
  490. data/stdlib/pp/0/manifest.yaml +2 -0
  491. data/stdlib/pp/0/pp.rbs +301 -0
  492. data/stdlib/prettyprint/0/prettyprint.rbs +383 -0
  493. data/stdlib/pstore/0/pstore.rbs +608 -0
  494. data/stdlib/psych/0/core_ext.rbs +12 -0
  495. data/stdlib/psych/0/dbm.rbs +237 -0
  496. data/stdlib/psych/0/manifest.yaml +3 -0
  497. data/stdlib/psych/0/psych.rbs +455 -0
  498. data/stdlib/psych/0/store.rbs +57 -0
  499. data/stdlib/pty/0/pty.rbs +240 -0
  500. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  501. data/stdlib/rdoc/0/code_object.rbs +52 -0
  502. data/stdlib/rdoc/0/comment.rbs +61 -0
  503. data/stdlib/rdoc/0/context.rbs +153 -0
  504. data/stdlib/rdoc/0/markup.rbs +117 -0
  505. data/stdlib/rdoc/0/options.rbs +76 -0
  506. data/stdlib/rdoc/0/parser.rbs +56 -0
  507. data/stdlib/rdoc/0/rdoc.rbs +393 -0
  508. data/stdlib/rdoc/0/ri.rbs +17 -0
  509. data/stdlib/rdoc/0/store.rbs +48 -0
  510. data/stdlib/rdoc/0/top_level.rbs +97 -0
  511. data/stdlib/resolv/0/manifest.yaml +3 -0
  512. data/stdlib/resolv/0/resolv.rbs +1787 -0
  513. data/stdlib/ripper/0/ripper.rbs +1654 -0
  514. data/stdlib/securerandom/0/manifest.yaml +2 -0
  515. data/stdlib/securerandom/0/securerandom.rbs +49 -0
  516. data/stdlib/shellwords/0/shellwords.rbs +229 -0
  517. data/stdlib/singleton/0/singleton.rbs +134 -0
  518. data/stdlib/socket/0/addrinfo.rbs +666 -0
  519. data/stdlib/socket/0/basic_socket.rbs +590 -0
  520. data/stdlib/socket/0/constants.rbs +2295 -0
  521. data/stdlib/socket/0/ip_socket.rbs +94 -0
  522. data/stdlib/socket/0/socket.rbs +4170 -0
  523. data/stdlib/socket/0/socket_error.rbs +5 -0
  524. data/stdlib/socket/0/tcp_server.rbs +192 -0
  525. data/stdlib/socket/0/tcp_socket.rbs +87 -0
  526. data/stdlib/socket/0/udp_socket.rbs +133 -0
  527. data/stdlib/socket/0/unix_server.rbs +169 -0
  528. data/stdlib/socket/0/unix_socket.rbs +172 -0
  529. data/stdlib/stringio/0/stringio.rbs +1681 -0
  530. data/stdlib/strscan/0/string_scanner.rbs +1648 -0
  531. data/stdlib/tempfile/0/tempfile.rbs +483 -0
  532. data/stdlib/time/0/time.rbs +434 -0
  533. data/stdlib/timeout/0/timeout.rbs +137 -0
  534. data/stdlib/tmpdir/0/tmpdir.rbs +69 -0
  535. data/stdlib/tsort/0/cyclic.rbs +8 -0
  536. data/stdlib/tsort/0/interfaces.rbs +20 -0
  537. data/stdlib/tsort/0/tsort.rbs +410 -0
  538. data/stdlib/uri/0/common.rbs +621 -0
  539. data/stdlib/uri/0/file.rbs +118 -0
  540. data/stdlib/uri/0/ftp.rbs +13 -0
  541. data/stdlib/uri/0/generic.rbs +1116 -0
  542. data/stdlib/uri/0/http.rbs +104 -0
  543. data/stdlib/uri/0/https.rbs +14 -0
  544. data/stdlib/uri/0/ldap.rbs +230 -0
  545. data/stdlib/uri/0/ldaps.rbs +14 -0
  546. data/stdlib/uri/0/mailto.rbs +92 -0
  547. data/stdlib/uri/0/rfc2396_parser.rbs +189 -0
  548. data/stdlib/uri/0/rfc3986_parser.rbs +2 -0
  549. data/stdlib/uri/0/ws.rbs +13 -0
  550. data/stdlib/uri/0/wss.rbs +9 -0
  551. data/stdlib/yaml/0/manifest.yaml +2 -0
  552. data/stdlib/yaml/0/yaml.rbs +1 -0
  553. data/stdlib/zlib/0/buf_error.rbs +10 -0
  554. data/stdlib/zlib/0/data_error.rbs +10 -0
  555. data/stdlib/zlib/0/deflate.rbs +211 -0
  556. data/stdlib/zlib/0/error.rbs +20 -0
  557. data/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
  558. data/stdlib/zlib/0/gzip_file/error.rbs +23 -0
  559. data/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
  560. data/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
  561. data/stdlib/zlib/0/gzip_file.rbs +156 -0
  562. data/stdlib/zlib/0/gzip_reader.rbs +293 -0
  563. data/stdlib/zlib/0/gzip_writer.rbs +168 -0
  564. data/stdlib/zlib/0/inflate.rbs +180 -0
  565. data/stdlib/zlib/0/mem_error.rbs +10 -0
  566. data/stdlib/zlib/0/need_dict.rbs +13 -0
  567. data/stdlib/zlib/0/stream_end.rbs +11 -0
  568. data/stdlib/zlib/0/stream_error.rbs +11 -0
  569. data/stdlib/zlib/0/version_error.rbs +11 -0
  570. data/stdlib/zlib/0/zlib.rbs +449 -0
  571. data/stdlib/zlib/0/zstream.rbs +201 -0
  572. data/wasm/README.md +59 -0
  573. data/wasm/rbs_wasm.c +411 -0
  574. metadata +660 -0
data/core/ractor.rbs ADDED
@@ -0,0 +1,924 @@
1
+ # <!-- rdoc-file=ractor.rb -->
2
+ # Ractor.new creates a new Ractor, which can run in parallel with other ractors.
3
+ #
4
+ # # The simplest ractor
5
+ # r = Ractor.new {puts "I am in Ractor!"}
6
+ # r.join # wait for it to finish
7
+ # # Here, "I am in Ractor!" is printed
8
+ #
9
+ # Ractors do not share all objects with each other. There are two main benefits
10
+ # to this: across ractors, thread-safety concerns such as data-races and
11
+ # race-conditions are not possible. The other benefit is parallelism.
12
+ #
13
+ # To achieve this, object sharing is limited across ractors. Unlike in threads,
14
+ # ractors can't access all the objects available in other ractors. For example,
15
+ # objects normally available through variables in the outer scope are prohibited
16
+ # from being used across ractors.
17
+ #
18
+ # a = 1
19
+ # r = Ractor.new {puts "I am in Ractor! a=#{a}"}
20
+ # # fails immediately with
21
+ # # ArgumentError (can not isolate a Proc because it accesses outer variables (a).)
22
+ #
23
+ # The object must be explicitly shared:
24
+ # a = 1
25
+ # r = Ractor.new(a) { |a1| puts "I am in Ractor! a=#{a1}"}
26
+ #
27
+ # On CRuby (the default implementation), the Global Virtual Machine Lock (GVL)
28
+ # is held per ractor, so ractors can run in parallel. This is unlike the
29
+ # situation with threads on CRuby.
30
+ #
31
+ # Instead of accessing shared state, objects should be passed to and from
32
+ # ractors by sending and receiving them as messages.
33
+ #
34
+ # a = 1
35
+ # r = Ractor.new do
36
+ # a_in_ractor = receive # receive blocks the Thread until our default port gets sent a message
37
+ # puts "I am in Ractor! a=#{a_in_ractor}"
38
+ # end
39
+ # r.send(a) # pass it
40
+ # r.join
41
+ # # Here, "I am in Ractor! a=1" is printed
42
+ #
43
+ # In addition to that, any arguments passed to Ractor.new are passed to the
44
+ # block and available there as if received by Ractor.receive, and the last block
45
+ # value can be received with Ractor#value.
46
+ #
47
+ # ## Shareable and unshareable objects
48
+ #
49
+ # When an object is sent to a ractor, it's important to understand whether the
50
+ # object is shareable or unshareable. Most Ruby objects are unshareable objects.
51
+ # Even frozen objects can be unshareable if they contain (through their instance
52
+ # variables) unfrozen objects.
53
+ #
54
+ # Shareable objects are those which can be used by several ractors at once
55
+ # without compromising thread-safety, for example numbers, `true` and `false`.
56
+ # Ractor.shareable? allows you to check this, and Ractor.make_shareable tries to
57
+ # make the object shareable if it's not already and gives an error if it can't
58
+ # do it.
59
+ #
60
+ # Ractor.shareable?(1) #=> true -- numbers and other immutable basic values are shareable
61
+ # Ractor.shareable?('foo') #=> false, unless the string is frozen due to # frozen_string_literal: true
62
+ # Ractor.shareable?('foo'.freeze) #=> true
63
+ # Ractor.shareable?([Object.new].freeze) #=> false, inner object is unfrozen
64
+ #
65
+ # ary = ['hello', 'world']
66
+ # ary.frozen? #=> false
67
+ # ary[0].frozen? #=> false
68
+ # Ractor.make_shareable(ary)
69
+ # ary.frozen? #=> true
70
+ # ary[0].frozen? #=> true
71
+ # ary[1].frozen? #=> true
72
+ #
73
+ # When a shareable object is sent via #send, no additional processing occurs on
74
+ # it and it becomes usable by both ractors. When an unshareable object is sent,
75
+ # it can be either *copied* or *moved*. Copying is the default, and it copies
76
+ # the object fully by deep cloning (Object#clone) the non-shareable parts of its
77
+ # structure.
78
+ #
79
+ # data = ['foo'.dup, 'bar'.freeze]
80
+ # r = Ractor.new do
81
+ # data2 = Ractor.receive
82
+ # puts "In ractor: #{data2.object_id}, #{data2[0].object_id}, #{data2[1].object_id}"
83
+ # end
84
+ # r.send(data)
85
+ # r.join
86
+ # puts "Outside : #{data.object_id}, #{data[0].object_id}, #{data[1].object_id}"
87
+ #
88
+ # This will output something like:
89
+ #
90
+ # In ractor: 8, 16, 24
91
+ # Outside : 32, 40, 24
92
+ #
93
+ # Note that the object ids of the array and the non-frozen string inside the
94
+ # array have changed in the ractor because they are different objects. The
95
+ # second array's element, which is a shareable frozen string, is the same
96
+ # object.
97
+ #
98
+ # Deep cloning of objects may be slow, and sometimes impossible. Alternatively,
99
+ # <code>move: true</code> may be used during sending. This will *move* the
100
+ # unshareable object to the receiving ractor, making it inaccessible to the
101
+ # sending ractor.
102
+ #
103
+ # data = ['foo', 'bar']
104
+ # r = Ractor.new do
105
+ # data_in_ractor = Ractor.receive
106
+ # puts "In ractor: #{data_in_ractor.object_id}, #{data_in_ractor[0].object_id}"
107
+ # end
108
+ # r.send(data, move: true)
109
+ # r.join
110
+ # puts "Outside: moved? #{Ractor::MovedObject === data}"
111
+ # puts "Outside: #{data.inspect}"
112
+ #
113
+ # This will output:
114
+ #
115
+ # In ractor: 100, 120
116
+ # Outside: moved? true
117
+ # test.rb:9:in `method_missing': can not send any methods to a moved object (Ractor::MovedError)
118
+ #
119
+ # Notice that even `inspect` and more basic methods like `__id__` are
120
+ # inaccessible on a moved object.
121
+ #
122
+ # `Class` and `Module` objects are shareable and their class/module definitions
123
+ # are shared between ractors. Ractor objects are also shareable. All operations
124
+ # on shareable objects are thread-safe across ractors. Defining mutable,
125
+ # shareable objects in Ruby is not possible, but C extensions can introduce
126
+ # them.
127
+ #
128
+ # It is prohibited to access (get) instance variables of shareable objects in
129
+ # other ractors if the values of the variables aren't shareable. This can occur
130
+ # because modules/classes are shareable, but they can have instance variables
131
+ # whose values are not. In non-main ractors, it's also prohibited to set
132
+ # instance variables on classes/modules (even if the value is shareable).
133
+ #
134
+ # class C
135
+ # class << self
136
+ # attr_accessor :tricky
137
+ # end
138
+ # end
139
+ #
140
+ # C.tricky = "unshareable".dup
141
+ #
142
+ # r = Ractor.new(C) do |cls|
143
+ # puts "I see #{cls}"
144
+ # puts "I can't see #{cls.tricky}"
145
+ # cls.tricky = true # doesn't get here, but this would also raise an error
146
+ # end
147
+ # r.join
148
+ # # I see C
149
+ # # can not access instance variables of classes/modules from non-main Ractors (RuntimeError)
150
+ #
151
+ # Ractors can access constants if they are shareable. The main Ractor is the
152
+ # only one that can access non-shareable constants.
153
+ #
154
+ # GOOD = 'good'.freeze
155
+ # BAD = 'bad'.dup
156
+ #
157
+ # r = Ractor.new do
158
+ # puts "GOOD=#{GOOD}"
159
+ # puts "BAD=#{BAD}"
160
+ # end
161
+ # r.join
162
+ # # GOOD=good
163
+ # # can not access non-shareable objects in constant Object::BAD by non-main Ractor. (NameError)
164
+ #
165
+ # # Consider the same C class from above
166
+ #
167
+ # r = Ractor.new do
168
+ # puts "I see #{C}"
169
+ # puts "I can't see #{C.tricky}"
170
+ # end
171
+ # r.join
172
+ # # I see C
173
+ # # can not access instance variables of classes/modules from non-main Ractors (RuntimeError)
174
+ #
175
+ # See also the description of <code># shareable_constant_value</code> pragma in
176
+ # [Comments syntax](rdoc-ref:syntax/comments.rdoc) explanation.
177
+ #
178
+ # ## Ractors vs threads
179
+ #
180
+ # Each ractor has its own main Thread. New threads can be created from inside
181
+ # ractors (and, on CRuby, they share the GVL with other threads of this ractor).
182
+ #
183
+ # r = Ractor.new do
184
+ # a = 1
185
+ # Thread.new {puts "Thread in ractor: a=#{a}"}.join
186
+ # end
187
+ # r.join
188
+ # # Here "Thread in ractor: a=1" will be printed
189
+ #
190
+ # ## Note on code examples
191
+ #
192
+ # In the examples below, sometimes we use the following method to wait for
193
+ # ractors to make progress or finish.
194
+ #
195
+ # def wait
196
+ # sleep(0.1)
197
+ # end
198
+ #
199
+ # This is **only for demonstration purposes** and shouldn't be used in a real
200
+ # code. Most of the time, #join is used to wait for ractors to finish and
201
+ # Ractor.receive is used to wait for messages.
202
+ #
203
+ # ## Reference
204
+ #
205
+ # See [Ractor design doc](rdoc-ref:ractor.md) for more details.
206
+ #
207
+ class Ractor
208
+ # <!--
209
+ # rdoc-file=ractor.rb
210
+ # - _require(feature)
211
+ # -->
212
+ # internal method
213
+ #
214
+ def self._require: (String feature) -> bool
215
+
216
+ # <!--
217
+ # rdoc-file=ractor.rb
218
+ # - [](sym)
219
+ # -->
220
+ # Gets a value from ractor-local storage for the current Ractor.
221
+ #
222
+ def self.[]: (Symbol) -> untyped
223
+
224
+ # <!--
225
+ # rdoc-file=ractor.rb
226
+ # - []=(sym, val)
227
+ # -->
228
+ # Sets a value in ractor-local storage for the current Ractor.
229
+ #
230
+ def self.[]=: (Symbol, untyped) -> untyped
231
+
232
+ # <!--
233
+ # rdoc-file=ractor.rb
234
+ # - count()
235
+ # -->
236
+ # Returns the number of ractors currently running or blocking (waiting).
237
+ #
238
+ # Ractor.count #=> 1
239
+ # r = Ractor.new(name: 'example') { Ractor.receive }
240
+ # Ractor.count #=> 2 (main + example ractor)
241
+ # r << 42 # r's Ractor.receive will resume
242
+ # r.join # wait for r's termination
243
+ # Ractor.count #=> 1
244
+ #
245
+ def self.count: () -> Integer
246
+
247
+ # <!--
248
+ # rdoc-file=ractor.rb
249
+ # - current()
250
+ # -->
251
+ # Returns the currently executing Ractor.
252
+ #
253
+ # Ractor.current #=> #<Ractor:#1 running>
254
+ #
255
+ def self.current: () -> untyped
256
+
257
+ # <!--
258
+ # rdoc-file=ractor.rb
259
+ # - main()
260
+ # -->
261
+ # Returns the main ractor.
262
+ #
263
+ def self.main: () -> Ractor
264
+
265
+ # <!--
266
+ # rdoc-file=ractor.rb
267
+ # - main?()
268
+ # -->
269
+ # Returns true if the current ractor is the main ractor.
270
+ #
271
+ def self.main?: () -> boolish
272
+
273
+ # <!--
274
+ # rdoc-file=ractor.rb
275
+ # - Ractor.make_shareable(obj, copy: false) -> shareable_obj
276
+ # -->
277
+ # Makes `obj` shareable between ractors.
278
+ #
279
+ # `obj` and all the objects it refers to will be frozen, unless they are already
280
+ # shareable.
281
+ #
282
+ # If `copy` keyword is `true`, it will copy objects before freezing them, and
283
+ # will not modify `obj` or its internal objects.
284
+ #
285
+ # Note that the specification and implementation of this method are not mature
286
+ # and may be changed in the future.
287
+ #
288
+ # obj = ['test']
289
+ # Ractor.shareable?(obj) #=> false
290
+ # Ractor.make_shareable(obj) #=> ["test"]
291
+ # Ractor.shareable?(obj) #=> true
292
+ # obj.frozen? #=> true
293
+ # obj[0].frozen? #=> true
294
+ #
295
+ # # Copy vs non-copy versions:
296
+ # obj1 = ['test']
297
+ # obj1s = Ractor.make_shareable(obj1)
298
+ # obj1.frozen? #=> true
299
+ # obj1s.object_id == obj1.object_id #=> true
300
+ # obj2 = ['test']
301
+ # obj2s = Ractor.make_shareable(obj2, copy: true)
302
+ # obj2.frozen? #=> false
303
+ # obj2s.frozen? #=> true
304
+ # obj2s.object_id == obj2.object_id #=> false
305
+ # obj2s[0].object_id == obj2[0].object_id #=> false
306
+ #
307
+ # See also the "Shareable and unshareable objects" section in the Ractor class
308
+ # docs.
309
+ #
310
+ def self.make_shareable: [T] (T obj, ?copy: boolish) -> T
311
+
312
+ # <!--
313
+ # rdoc-file=ractor.rb
314
+ # - Ractor.new(*args, name: nil) {|*args| block } -> ractor
315
+ # -->
316
+ # Creates a new Ractor with args and a block.
317
+ #
318
+ # The given block (Proc) is isolated (can't access any outer variables). `self`
319
+ # inside the block will refer to the current Ractor.
320
+ #
321
+ # r = Ractor.new { puts "Hi, I am #{self.inspect}" }
322
+ # r.join
323
+ # # Prints "Hi, I am #<Ractor:#2 test.rb:1 running>"
324
+ #
325
+ # Any `args` passed are propagated to the block arguments by the same rules as
326
+ # objects sent via #send/Ractor.receive. If an argument in `args` is not
327
+ # shareable, it will be copied (via deep cloning, which might be inefficient).
328
+ #
329
+ # arg = [1, 2, 3]
330
+ # puts "Passing: #{arg} (##{arg.object_id})"
331
+ # r = Ractor.new(arg) {|received_arg|
332
+ # puts "Received: #{received_arg} (##{received_arg.object_id})"
333
+ # }
334
+ # r.join
335
+ # # Prints:
336
+ # # Passing: [1, 2, 3] (#280)
337
+ # # Received: [1, 2, 3] (#300)
338
+ #
339
+ # Ractor's `name` can be set for debugging purposes:
340
+ #
341
+ # r = Ractor.new(name: 'my ractor') {}; r.join
342
+ # p r
343
+ # #=> #<Ractor:#3 my ractor test.rb:1 terminated>
344
+ #
345
+ def self.new: (*untyped args, ?name: string) { (?) -> untyped } -> Ractor
346
+
347
+ # <!--
348
+ # rdoc-file=ractor.rb
349
+ # - Ractor.receive -> obj
350
+ # -->
351
+ # Receives a message from the current ractor's default port.
352
+ #
353
+ def self.receive: () -> untyped
354
+
355
+ # <!--
356
+ # rdoc-file=ractor.rb
357
+ # - recv()
358
+ # -->
359
+ #
360
+ alias self.recv self.receive
361
+
362
+ # <!--
363
+ # rdoc-file=ractor.rb
364
+ # - Ractor.select(*ractors_or_ports) -> [ractor or port, obj]
365
+ # -->
366
+ # Blocks the current Thread until one of the given ports has received a message.
367
+ # Returns an array of two elements where the first element is the Port and the
368
+ # second is the received object. This method can also accept Ractor objects
369
+ # themselves, and in that case will wait until one has terminated and return a
370
+ # two-element array where the first element is the ractor and the second is its
371
+ # termination value.
372
+ #
373
+ # p1, p2 = Ractor::Port.new, Ractor::Port.new
374
+ # ps = [p1, p2]
375
+ # rs = 2.times.map do |i|
376
+ # Ractor.new(ps.shift, i) do |p, i|
377
+ # sleep rand(0.99)
378
+ # p.send("r#{i}")
379
+ # sleep rand(0.99)
380
+ # "r#{i} done"
381
+ # end
382
+ # end
383
+ #
384
+ # waiting_on = [p1, p2, *rs]
385
+ # until waiting_on.empty?
386
+ # received_on, obj = Ractor.select(*waiting_on)
387
+ # waiting_on.delete(received_on)
388
+ # puts obj
389
+ # end
390
+ #
391
+ # # r0
392
+ # # r1
393
+ # # r1 done
394
+ # # r0 done
395
+ #
396
+ # The following example is almost equivalent to
397
+ # <code>ractors.map(&:value)</code> except the thread is unblocked when any of
398
+ # the ractors has terminated as opposed to waiting for their termination in the
399
+ # array element order.
400
+ #
401
+ # values = []
402
+ # until ractors.empty?
403
+ # r, val = Ractor.select(*ractors)
404
+ # ractors.delete(r)
405
+ # values << val
406
+ # end
407
+ #
408
+ def self.select: (?) -> Array[untyped]
409
+
410
+ # <!--
411
+ # rdoc-file=ractor.rb
412
+ # - Ractor.shareable?(obj) -> true | false
413
+ # -->
414
+ # Checks if the object is shareable by ractors.
415
+ #
416
+ # Ractor.shareable?(1) #=> true -- numbers are shareable
417
+ # Ractor.shareable?('foo') #=> false, unless the string is frozen due to # frozen_string_literal: true
418
+ # Ractor.shareable?('foo'.freeze) #=> true
419
+ #
420
+ # See also the "Shareable and unshareable objects" section in the Ractor class
421
+ # docs.
422
+ #
423
+ def self.shareable?: (untyped obj) -> bool
424
+
425
+ # <!--
426
+ # rdoc-file=ractor.rb
427
+ # - Ractor.shareable_proc(self: nil){} -> shareable proc
428
+ # -->
429
+ # Returns a shareable copy of the given block's Proc. The value of `self` in the
430
+ # Proc will be replaced with the value passed via the <code>self:</code>
431
+ # keyword, or `nil` if not given.
432
+ #
433
+ # In a shareable Proc, access to any outer variables if prohibited.
434
+ #
435
+ # a = 42
436
+ # Ractor.shareable_proc{ p a }
437
+ # #=> can not isolate a Proc because it accesses outer variables (a). (ArgumentError)
438
+ #
439
+ # The value of `self` in the Proc must be a shareable object.
440
+ #
441
+ # Ractor.shareable_proc(self: self){}
442
+ # #=> self should be shareable: main (Ractor::IsolationError)
443
+ #
444
+ def self.shareable_proc: [T] () { (?) [self: nil] -> T } -> ^(?) [self: nil] -> T
445
+ | [T, S] (self: S) { (?) [self: S] -> T } -> ^(?) [self: S] -> T
446
+
447
+ # <!--
448
+ # rdoc-file=ractor.rb
449
+ # - Ractor.shareable_lambda(self: nil){} -> shareable lambda
450
+ # -->
451
+ # Same as Ractor.shareable_proc, but returns a lambda Proc.
452
+ #
453
+ def self.shareable_lambda: [T] () { (?) [self: nil] -> T } -> ^(?) [self: nil] -> T
454
+ | [T, S] (self: S) { (?) [self: S] -> T } -> ^(?) [self: S] -> T
455
+
456
+ # <!--
457
+ # rdoc-file=ractor.rb
458
+ # - Ractor.store_if_absent(key){ init_block }
459
+ # -->
460
+ # If the corresponding ractor-local value is not set, yields a value with
461
+ # init_block and stores the value in a thread-safe manner. This method returns
462
+ # the stored value.
463
+ #
464
+ # (1..10).map{
465
+ # Thread.new(it){|i|
466
+ # Ractor.store_if_absent(:s){ f(); i }
467
+ # #=> return stored value of key :s
468
+ # }
469
+ # }.map(&:value).uniq.size #=> 1 and f() is called only once
470
+ #
471
+ def self.store_if_absent: [A] (Symbol) { (nil) -> A } -> A
472
+
473
+ # <!--
474
+ # rdoc-file=ractor.rb
475
+ # - <<(...)
476
+ # -->
477
+ #
478
+ alias << send
479
+
480
+ # <!--
481
+ # rdoc-file=ractor.rb
482
+ # - [](sym)
483
+ # -->
484
+ # Gets a value from ractor-local storage for the current Ractor. Obsolete, use
485
+ # Ractor.[] instead.
486
+ #
487
+ %a{deprecated: Use Ractor.[] instead}
488
+ def []: (interned sym) -> untyped
489
+
490
+ # <!--
491
+ # rdoc-file=ractor.rb
492
+ # - []=(sym, val)
493
+ # -->
494
+ # Sets a value in ractor-local storage for the current Ractor. Obsolete, use
495
+ # Ractor.[]= instead.
496
+ #
497
+ %a{deprecated: Use Ractor.[]= instead}
498
+ def []=: [T] (interned sym, T val) -> T
499
+
500
+ # <!--
501
+ # rdoc-file=ractor.rb
502
+ # - ractor.default_port -> port object
503
+ # -->
504
+ # Returns the default port of the Ractor.
505
+ #
506
+ def default_port: () -> Port[untyped]
507
+
508
+ # <!--
509
+ # rdoc-file=ractor.rb
510
+ # - inspect()
511
+ # -->
512
+ #
513
+ def inspect: () -> String
514
+
515
+ # <!--
516
+ # rdoc-file=ractor.rb
517
+ # - ractor.join -> self
518
+ # -->
519
+ # Waits for the termination of the Ractor. If the Ractor was aborted (terminated
520
+ # by an unhandled exception), the exception is raised in the current ractor.
521
+ #
522
+ # Ractor.new{}.join #=> ractor
523
+ #
524
+ # Ractor.new{ raise "foo" }.join
525
+ # #=> raises the exception "foo (RuntimeError)"
526
+ #
527
+ def join: () -> self
528
+
529
+ # <!--
530
+ # rdoc-file=ractor.rb
531
+ # - name()
532
+ # -->
533
+ # Returns the name set in Ractor.new, or `nil`.
534
+ #
535
+ def name: () -> String?
536
+
537
+ # <!--
538
+ # rdoc-file=ractor.rb
539
+ # - ractor.monitor(port) -> self
540
+ # -->
541
+ # Registers the port as a monitoring port for this ractor. When the ractor
542
+ # terminates, the port receives a Symbol object.
543
+ #
544
+ # * <code>:exited</code> is sent if the ractor terminates without an unhandled
545
+ # exception.
546
+ # * <code>:aborted</code> is sent if the ractor terminates by an unhandled
547
+ # exception.
548
+ #
549
+ # r = Ractor.new{ some_task() }
550
+ # r.monitor(port = Ractor::Port.new)
551
+ # port.receive #=> :exited and r is terminated
552
+ #
553
+ # r = Ractor.new{ raise "foo" }
554
+ # r.monitor(port = Ractor::Port.new)
555
+ # port.receive #=> :aborted and r is terminated by the RuntimeError "foo"
556
+ #
557
+ def monitor: [T < Symbol] (Port[T]) -> untyped
558
+
559
+ # <!--
560
+ # rdoc-file=ractor.rb
561
+ # - ractor.send(msg, move: false) -> self
562
+ # -->
563
+ # This is equivalent to Port#send to the ractor's #default_port.
564
+ #
565
+ def send: (untyped obj, ?move: boolish) -> Ractor
566
+
567
+ # <!--
568
+ # rdoc-file=ractor.rb
569
+ # - to_s()
570
+ # -->
571
+ #
572
+ alias to_s inspect
573
+
574
+ # <!--
575
+ # rdoc-file=ractor.rb
576
+ # - ractor.unmonitor(port) -> self
577
+ # -->
578
+ # Unregisters the port from the monitoring ports for this ractor.
579
+ #
580
+ def unmonitor: (Port[untyped]) -> self
581
+
582
+ # <!--
583
+ # rdoc-file=ractor.rb
584
+ # - ractor.value -> obj
585
+ # -->
586
+ # Waits for `ractor` to complete and returns its value or raises the exception
587
+ # which terminated the Ractor. The termination value will be moved to the
588
+ # calling Ractor. Therefore, at most 1 Ractor can receive another ractor's
589
+ # termination value.
590
+ #
591
+ # r = Ractor.new{ [1, 2] }
592
+ # r.value #=> [1, 2] (unshareable object)
593
+ #
594
+ # Ractor.new(r){|r| r.value} #=> Ractor::Error
595
+ #
596
+ def value: () -> untyped
597
+
598
+ private
599
+
600
+ # <!--
601
+ # rdoc-file=ractor.rb
602
+ # - receive()
603
+ # -->
604
+ # same as Ractor.receive
605
+ #
606
+ def receive: () -> untyped
607
+
608
+ # <!--
609
+ # rdoc-file=ractor.rb
610
+ # - receive_if(&b)
611
+ # -->
612
+ # same as Ractor.receive_if
613
+ #
614
+ def receive_if: () { (untyped) -> boolish } -> untyped
615
+
616
+ # <!--
617
+ # rdoc-file=ractor.rb
618
+ # - recv()
619
+ # -->
620
+ #
621
+ alias recv receive
622
+
623
+ # <!-- rdoc-file=ractor.c -->
624
+ # Raised when an attempt is made to send a message to a closed port, or to
625
+ # retrieve a message from a closed and empty port. Ports may be closed
626
+ # explicitly with Ractor::Port#close and are closed implicitly when a Ractor
627
+ # terminates.
628
+ #
629
+ # port = Ractor::Port.new
630
+ # port.close
631
+ # port << "test" # Ractor::ClosedError
632
+ # port.receive # Ractor::ClosedError
633
+ #
634
+ # ClosedError is a descendant of StopIteration, so the closing of a port will
635
+ # break out of loops without propagating the error.
636
+ #
637
+ class ClosedError < StopIteration
638
+ end
639
+
640
+ # <!-- rdoc-file=ractor.c -->
641
+ # The parent class of Ractor-related error classes.
642
+ #
643
+ class Error < RuntimeError
644
+ end
645
+
646
+ # <!-- rdoc-file=ractor.c -->
647
+ # Raised on attempt to make a Ractor-unshareable object Ractor-shareable.
648
+ #
649
+ class IsolationError < Ractor::Error
650
+ end
651
+
652
+ # <!-- rdoc-file=ractor.c -->
653
+ # Raised on an attempt to access an object which was moved in Ractor#send or
654
+ # Ractor::Port#send.
655
+ #
656
+ # r = Ractor.new { sleep }
657
+ #
658
+ # ary = [1, 2, 3]
659
+ # r.send(ary, move: true)
660
+ # ary.inspect
661
+ # # Ractor::MovedError (can not send any methods to a moved object)
662
+ #
663
+ class MovedError < Ractor::Error
664
+ end
665
+
666
+ # <!-- rdoc-file=ractor.c -->
667
+ # A special object which replaces any value that was moved to another ractor in
668
+ # Ractor#send or Ractor::Port#send. Any attempt to access the object results in
669
+ # Ractor::MovedError.
670
+ #
671
+ # r = Ractor.new { receive }
672
+ #
673
+ # ary = [1, 2, 3]
674
+ # r.send(ary, move: true)
675
+ # p Ractor::MovedObject === ary
676
+ # # => true
677
+ # ary.inspect
678
+ # # Ractor::MovedError (can not send any methods to a moved object)
679
+ #
680
+ class MovedObject < BasicObject
681
+ # <!--
682
+ # rdoc-file=ractor.c
683
+ # - !(*args)
684
+ # -->
685
+ #
686
+ def !: (*untyped) -> untyped
687
+
688
+ # <!--
689
+ # rdoc-file=ractor.c
690
+ # - !=(*args)
691
+ # -->
692
+ #
693
+ def !=: (*untyped) -> untyped
694
+
695
+ # <!--
696
+ # rdoc-file=ractor.c
697
+ # - ==(*args)
698
+ # -->
699
+ #
700
+ def ==: (*untyped) -> untyped
701
+
702
+ # <!--
703
+ # rdoc-file=ractor.c
704
+ # - __id__(*args)
705
+ # -->
706
+ #
707
+ def __id__: (*untyped) -> untyped
708
+
709
+ # <!--
710
+ # rdoc-file=ractor.c
711
+ # - __send__(*args)
712
+ # -->
713
+ #
714
+ def __send__: (*untyped) -> untyped
715
+
716
+ # <!--
717
+ # rdoc-file=ractor.c
718
+ # - equal?(*args)
719
+ # -->
720
+ #
721
+ def equal?: (*untyped) -> untyped
722
+
723
+ # <!--
724
+ # rdoc-file=ractor.c
725
+ # - instance_eval(*args)
726
+ # -->
727
+ #
728
+ def instance_eval: (*untyped) -> untyped
729
+
730
+ # <!--
731
+ # rdoc-file=ractor.c
732
+ # - instance_exec(*args)
733
+ # -->
734
+ #
735
+ def instance_exec: (*untyped) -> untyped
736
+
737
+ # <!--
738
+ # rdoc-file=ractor.c
739
+ # - method_missing(*args)
740
+ # -->
741
+ #
742
+ def method_missing: (*untyped) -> untyped
743
+ end
744
+
745
+ # <!-- rdoc-file=ractor.rb -->
746
+ # Port objects transmit messages between Ractors.
747
+ #
748
+ class Port[T = untyped]
749
+ # <!--
750
+ # rdoc-file=ractor.rb
751
+ # - <<(obj, move: false)
752
+ # -->
753
+ #
754
+ alias << send
755
+
756
+ # <!--
757
+ # rdoc-file=ractor.rb
758
+ # - port.close
759
+ # -->
760
+ # Closes the port. Sending to a closed port is prohibited. Receiving is also
761
+ # prohibited if there are no messages in its message queue.
762
+ #
763
+ # Only the Ractor which created the port is allowed to close it.
764
+ #
765
+ # port = Ractor::Port.new
766
+ # Ractor.new port do |port|
767
+ # port.close #=> closing port by other ractors is not allowed (Ractor::Error)
768
+ # end.join
769
+ #
770
+ def close: () -> void
771
+
772
+ # <!--
773
+ # rdoc-file=ractor.rb
774
+ # - port.closed? -> true/false
775
+ # -->
776
+ # Returns whether or not the port is closed.
777
+ #
778
+ def closed?: () -> bool
779
+
780
+ # <!--
781
+ # rdoc-file=ractor.rb
782
+ # - port.inspect -> string
783
+ # -->
784
+ #
785
+ def inspect: () -> String
786
+
787
+ # <!--
788
+ # rdoc-file=ractor.rb
789
+ # - port.receive -> msg
790
+ # -->
791
+ # Receives a message from the port (which was sent there by Port#send). Only the
792
+ # ractor that created the port can receive messages this way.
793
+ #
794
+ # port = Ractor::Port.new
795
+ # r = Ractor.new port do |port|
796
+ # port.send('message1')
797
+ # end
798
+ #
799
+ # v1 = port.receive
800
+ # puts "Received: #{v1}"
801
+ # r.join
802
+ # # This will print: "Received: message1"
803
+ #
804
+ # The method blocks the current Thread if the message queue is empty.
805
+ #
806
+ # port = Ractor::Port.new
807
+ # r = Ractor.new port do |port|
808
+ # wait
809
+ # puts "Still not received"
810
+ # port.send('message1')
811
+ # wait
812
+ # puts "Still received only one"
813
+ # port.send('message2')
814
+ # end
815
+ # puts "Before first receive"
816
+ # v1 = port.receive
817
+ # puts "Received: #{v1}"
818
+ # v2 = port.receive
819
+ # puts "Received: #{v2}"
820
+ # r.join
821
+ #
822
+ # Output:
823
+ #
824
+ # Before first receive
825
+ # Still not received
826
+ # Received: message1
827
+ # Still received only one
828
+ # Received: message2
829
+ #
830
+ # If the port is closed and there are no more messages in the message queue, the
831
+ # method raises Ractor::ClosedError.
832
+ #
833
+ # port = Ractor::Port.new
834
+ # port.close
835
+ # port.receive #=> raise Ractor::ClosedError
836
+ #
837
+ def receive: () -> T
838
+
839
+ # <!--
840
+ # rdoc-file=ractor.rb
841
+ # - port.send(msg, move: false) -> self
842
+ # -->
843
+ # Sends a message to the port to be accepted by port.receive.
844
+ #
845
+ # port = Ractor::Port.new
846
+ # r = Ractor.new(port) do |port|
847
+ # port.send 'message'
848
+ # end
849
+ # value = port.receive
850
+ # puts "Received #{value}"
851
+ # # Prints: "Received: message"
852
+ #
853
+ # The method is non-blocking (it will return immediately even if the ractor that
854
+ # created the port is not ready to receive anything):
855
+ #
856
+ # port = Ractor::Port.new
857
+ # r = Ractor.new(port) do |port|
858
+ # port.send 'test'
859
+ # puts "Sent successfully"
860
+ # # Prints: "Sent successfully" immediately
861
+ # end
862
+ #
863
+ # An attempt to send to a closed port will raise Ractor::ClosedError.
864
+ #
865
+ # r = Ractor.new {Ractor::Port.new}
866
+ # r.join
867
+ # p r
868
+ # # "#<Ractor:#6 (irb):23 terminated>"
869
+ # port = r.value
870
+ # port.send('test') # raise Ractor::ClosedError
871
+ #
872
+ # If the `obj` is unshareable, by default it will be copied into the receiving
873
+ # ractor by deep cloning.
874
+ #
875
+ # If the object is shareable, a reference to the object will be sent to the
876
+ # receiving ractor.
877
+ #
878
+ def send: (T obj, ?move: boolish) -> self
879
+
880
+ private
881
+
882
+ # <!--
883
+ # rdoc-file=ractor_sync.c
884
+ # - Ractor::Port.new -> new_port
885
+ # -->
886
+ # Returns a new Ractor::Port object.
887
+ #
888
+ def initialize: () -> void
889
+
890
+ def initialize_copy: (untyped) -> untyped
891
+ end
892
+
893
+ # <!-- rdoc-file=ractor.c -->
894
+ # Raised on Ractor#join or Ractor#value if there was an uncaught exception in
895
+ # the Ractor. Its `cause` will contain the original exception, and `ractor` is
896
+ # the original ractor it was raised in.
897
+ #
898
+ # r = Ractor.new { raise "Something weird happened" }
899
+ #
900
+ # begin
901
+ # r.value
902
+ # rescue => e
903
+ # p e # => #<Ractor::RemoteError: thrown by remote Ractor.>
904
+ # p e.ractor == r # => true
905
+ # p e.cause # => #<RuntimeError: Something weird happened>
906
+ # end
907
+ #
908
+ class RemoteError < Ractor::Error
909
+ # <!-- rdoc-file=ractor.rb -->
910
+ # The Ractor in which the uncaught exception was raised.
911
+ #
912
+ def ractor: () -> Ractor
913
+ end
914
+
915
+ # <!-- rdoc-file=ractor.c -->
916
+ # Raised when Ractor-unsafe C-methods is invoked by a non-main Ractor.
917
+ #
918
+ class UnsafeError < Ractor::Error
919
+ end
920
+
921
+ %a{annotate:rdoc:skip}
922
+ class Selector
923
+ end
924
+ end