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