rbs 2.8.4 → 3.8.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/dependabot.yml +12 -4
- data/.github/workflows/comments.yml +11 -11
- data/.github/workflows/dependabot.yml +30 -0
- data/.github/workflows/ruby.yml +40 -49
- data/.github/workflows/typecheck.yml +36 -0
- data/.github/workflows/windows.yml +28 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +42 -2
- data/CHANGELOG.md +845 -1
- data/README.md +64 -4
- data/Rakefile +198 -18
- data/Steepfile +11 -11
- data/config.yml +311 -0
- data/core/array.rbs +2189 -1914
- data/core/basic_object.rbs +59 -84
- data/core/binding.rbs +7 -69
- data/core/builtin.rbs +210 -11
- data/core/class.rbs +37 -0
- data/core/comparable.rbs +23 -25
- data/core/complex.rbs +449 -227
- data/core/constants.rbs +29 -21
- data/core/data.rbs +415 -0
- data/core/dir.rbs +698 -415
- data/core/encoding.rbs +468 -843
- data/core/enumerable.rbs +495 -455
- data/core/enumerator/product.rbs +92 -0
- data/core/enumerator.rbs +106 -9
- data/core/env.rbs +1 -1
- data/core/errno.rbs +506 -605
- data/core/errors.rbs +15 -17
- data/core/exception.rbs +361 -145
- data/core/false_class.rbs +39 -26
- data/core/fiber.rbs +121 -14
- data/core/file.rbs +1262 -320
- data/core/file_test.rbs +62 -45
- data/core/float.rbs +187 -208
- data/core/gc.rbs +446 -196
- data/core/global_variables.rbs +29 -29
- data/core/hash.rbs +242 -349
- data/core/integer.rbs +246 -308
- data/core/io/buffer.rbs +373 -122
- data/core/io/wait.rbs +29 -17
- data/core/io.rbs +1881 -1518
- data/core/kernel.rbs +2116 -1538
- data/core/marshal.rbs +24 -14
- data/core/match_data.rbs +413 -166
- data/core/math.rbs +531 -291
- data/core/method.rbs +101 -32
- data/core/module.rbs +228 -64
- data/core/nil_class.rbs +106 -47
- data/core/numeric.rbs +206 -292
- data/core/object.rbs +73 -1168
- data/core/object_space/weak_key_map.rbs +166 -0
- data/core/object_space.rbs +5 -3
- data/core/proc.rbs +280 -39
- data/core/process.rbs +1318 -658
- data/core/ractor.rbs +200 -134
- data/core/random.rbs +21 -4
- data/core/range.rbs +309 -153
- data/core/rational.rbs +4 -12
- data/core/rb_config.rbs +64 -43
- data/core/rbs/unnamed/argf.rbs +411 -147
- data/core/rbs/unnamed/env_class.rbs +137 -253
- data/core/rbs/unnamed/random.rbs +49 -26
- data/core/refinement.rbs +16 -1
- data/core/regexp.rbs +1568 -862
- data/core/ruby_vm.rbs +719 -7
- data/core/rubygems/config_file.rbs +3 -0
- data/core/rubygems/errors.rbs +69 -6
- data/core/rubygems/rubygems.rbs +71 -17
- data/core/rubygems/version.rbs +11 -7
- data/{stdlib/set/0 → core}/set.rbs +80 -91
- data/core/signal.rbs +14 -8
- data/core/string.rbs +1732 -1607
- data/core/struct.rbs +467 -95
- data/core/symbol.rbs +215 -245
- data/core/thread.rbs +133 -89
- data/core/thread_group.rbs +9 -9
- data/core/time.rbs +1141 -841
- data/core/trace_point.rbs +181 -121
- data/core/true_class.rbs +58 -32
- data/core/unbound_method.rbs +103 -30
- data/core/warning.rbs +50 -5
- data/docs/CONTRIBUTING.md +1 -1
- data/docs/architecture.md +110 -0
- data/docs/collection.md +59 -5
- data/docs/data_and_struct.md +86 -0
- data/docs/gem.md +57 -0
- data/docs/rbs_by_example.md +16 -35
- data/docs/repo.md +1 -1
- data/docs/sigs.md +7 -7
- data/docs/stdlib.md +63 -5
- data/docs/syntax.md +255 -61
- data/docs/tools.md +1 -0
- data/ext/rbs_extension/extconf.rb +10 -0
- data/ext/rbs_extension/lexer.c +1741 -1548
- data/ext/rbs_extension/lexer.h +11 -1
- data/ext/rbs_extension/lexer.re +12 -6
- data/ext/rbs_extension/lexstate.c +26 -3
- data/ext/rbs_extension/location.c +119 -111
- data/ext/rbs_extension/location.h +32 -7
- data/ext/rbs_extension/main.c +3 -0
- data/ext/rbs_extension/parser.c +883 -481
- data/ext/rbs_extension/parserstate.c +65 -25
- data/ext/rbs_extension/parserstate.h +13 -3
- data/ext/rbs_extension/rbs_extension.h +1 -10
- data/ext/rbs_extension/unescape.c +7 -47
- data/goodcheck.yml +2 -2
- data/{ext/rbs_extension → include/rbs}/constants.h +26 -15
- data/include/rbs/ruby_objs.h +72 -0
- data/include/rbs.h +7 -0
- data/lib/rbs/annotate/annotations.rb +3 -3
- data/lib/rbs/annotate/formatter.rb +13 -3
- data/lib/rbs/annotate/rdoc_annotator.rb +1 -1
- data/lib/rbs/annotate/rdoc_source.rb +12 -3
- data/lib/rbs/ast/declarations.rb +85 -2
- data/lib/rbs/ast/directives.rb +39 -0
- data/lib/rbs/ast/members.rb +49 -15
- data/lib/rbs/ast/type_param.rb +104 -15
- data/lib/rbs/ast/visitor.rb +137 -0
- data/lib/rbs/buffer.rb +5 -0
- data/lib/rbs/cli/colored_io.rb +48 -0
- data/lib/rbs/cli/diff.rb +83 -0
- data/lib/rbs/cli/validate.rb +356 -0
- data/lib/rbs/cli.rb +253 -143
- data/lib/rbs/collection/cleaner.rb +8 -1
- data/lib/rbs/collection/config/lockfile.rb +92 -0
- data/lib/rbs/collection/config/lockfile_generator.rb +154 -65
- data/lib/rbs/collection/config.rb +19 -46
- data/lib/rbs/collection/installer.rb +12 -13
- data/lib/rbs/collection/sources/base.rb +2 -2
- data/lib/rbs/collection/sources/git.rb +146 -69
- data/lib/rbs/collection/sources/local.rb +81 -0
- data/lib/rbs/collection/sources/rubygems.rb +10 -12
- data/lib/rbs/collection/sources/stdlib.rb +14 -13
- data/lib/rbs/collection/sources.rb +15 -2
- data/lib/rbs/collection.rb +2 -1
- data/lib/rbs/definition.rb +13 -16
- data/lib/rbs/definition_builder/ancestor_builder.rb +100 -24
- data/lib/rbs/definition_builder/method_builder.rb +4 -4
- data/lib/rbs/definition_builder.rb +489 -584
- data/lib/rbs/diff.rb +125 -0
- data/lib/rbs/environment/use_map.rb +77 -0
- data/lib/rbs/environment.rb +406 -105
- data/lib/rbs/environment_loader.rb +48 -44
- data/lib/rbs/environment_walker.rb +1 -1
- data/lib/rbs/errors.rb +175 -56
- data/lib/rbs/file_finder.rb +28 -0
- data/lib/rbs/location_aux.rb +8 -7
- data/lib/rbs/locator.rb +37 -15
- data/lib/rbs/method_type.rb +23 -0
- data/lib/rbs/namespace.rb +1 -0
- data/lib/rbs/parser/lex_result.rb +15 -0
- data/lib/rbs/parser/token.rb +23 -0
- data/lib/rbs/parser_aux.rb +22 -13
- data/lib/rbs/prototype/helpers.rb +48 -22
- data/lib/rbs/prototype/node_usage.rb +99 -0
- data/lib/rbs/prototype/rb.rb +125 -31
- data/lib/rbs/prototype/rbi.rb +49 -36
- data/lib/rbs/prototype/runtime/helpers.rb +59 -0
- data/lib/rbs/prototype/runtime/reflection.rb +19 -0
- data/lib/rbs/prototype/runtime/value_object_generator.rb +279 -0
- data/lib/rbs/prototype/runtime.rb +273 -159
- data/lib/rbs/resolver/constant_resolver.rb +24 -8
- data/lib/rbs/resolver/type_name_resolver.rb +41 -7
- data/lib/rbs/sorter.rb +153 -123
- data/lib/rbs/substitution.rb +19 -0
- data/lib/rbs/subtractor.rb +201 -0
- data/lib/rbs/test/errors.rb +24 -11
- data/lib/rbs/test/guaranteed.rb +30 -0
- data/lib/rbs/test/hook.rb +45 -40
- data/lib/rbs/test/setup.rb +1 -1
- data/lib/rbs/test/tester.rb +1 -1
- data/lib/rbs/test/type_check.rb +120 -23
- data/lib/rbs/test.rb +6 -3
- data/lib/rbs/type_alias_dependency.rb +13 -3
- data/lib/rbs/type_alias_regularity.rb +21 -14
- data/lib/rbs/type_name.rb +18 -13
- data/lib/rbs/types.rb +352 -18
- data/lib/rbs/unit_test/convertibles.rb +176 -0
- data/lib/rbs/unit_test/spy.rb +136 -0
- data/lib/rbs/unit_test/type_assertions.rb +341 -0
- data/lib/rbs/unit_test/with_aliases.rb +143 -0
- data/lib/rbs/unit_test.rb +6 -0
- data/lib/rbs/validator.rb +55 -30
- data/lib/rbs/variance_calculator.rb +26 -23
- data/lib/rbs/vendorer.rb +3 -3
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs/writer.rb +69 -22
- data/lib/rbs.rb +7 -2
- data/lib/rdoc/discover.rb +1 -1
- data/lib/rdoc_plugin/parser.rb +5 -5
- data/rbs.gemspec +12 -2
- data/schema/decls.json +1 -1
- data/schema/members.json +15 -10
- data/sig/ancestor_builder.rbs +4 -0
- data/sig/ancestor_graph.rbs +22 -2
- data/sig/annotate/formatter.rbs +2 -2
- data/sig/annotate/rdoc_annotater.rbs +1 -1
- data/sig/cli/colored_io.rbs +15 -0
- data/sig/cli/diff.rbs +21 -0
- data/sig/cli/validate.rbs +43 -0
- data/sig/cli.rbs +4 -0
- data/sig/collection/config/lockfile.rbs +74 -0
- data/sig/collection/config/lockfile_generator.rbs +66 -0
- data/sig/collection/config.rbs +5 -48
- data/sig/collection/installer.rbs +1 -1
- data/sig/collection/sources.rbs +105 -33
- data/sig/constant.rbs +1 -1
- data/sig/declarations.rbs +42 -3
- data/sig/definition.rbs +26 -10
- data/sig/definition_builder.rbs +103 -81
- data/sig/diff.rbs +28 -0
- data/sig/directives.rbs +61 -0
- data/sig/environment.rbs +175 -29
- data/sig/environment_loader.rbs +20 -18
- data/sig/errors.rbs +123 -2
- data/sig/file_finder.rbs +28 -0
- data/sig/location.rbs +0 -3
- data/sig/locator.rbs +14 -2
- data/sig/manifest.yaml +0 -1
- data/sig/members.rbs +32 -9
- data/sig/method_types.rbs +10 -4
- data/sig/namespace.rbs +2 -3
- data/sig/parser.rbs +55 -16
- data/sig/prototype/helpers.rbs +4 -0
- data/sig/prototype/node_usage.rbs +20 -0
- data/sig/prototype/rb.rbs +10 -2
- data/sig/prototype/rbi.rbs +2 -0
- data/sig/prototype/runtime.rbs +182 -0
- data/sig/rbs.rbs +1 -1
- data/sig/rdoc/rbs.rbs +4 -0
- data/sig/repository.rbs +7 -5
- data/sig/resolver/constant_resolver.rbs +3 -4
- data/sig/resolver/context.rbs +1 -1
- data/sig/resolver/type_name_resolver.rbs +5 -1
- data/sig/shims/bundler.rbs +38 -0
- data/sig/shims/rubygems.rbs +19 -0
- data/sig/sorter.rbs +23 -5
- data/sig/substitution.rbs +6 -0
- data/sig/subtractor.rbs +37 -0
- data/sig/test/errors.rbs +52 -0
- data/sig/test/guranteed.rbs +9 -0
- data/sig/test/type_check.rbs +19 -0
- data/sig/test.rbs +82 -0
- data/sig/type_alias_dependency.rbs +31 -0
- data/sig/type_alias_regularity.rbs +12 -6
- data/sig/type_param.rbs +45 -9
- data/sig/typename.rbs +8 -5
- data/sig/types.rbs +119 -12
- data/sig/unit_test/convertibles.rbs +154 -0
- data/sig/unit_test/spy.rbs +28 -0
- data/sig/unit_test/type_assertions.rbs +194 -0
- data/sig/unit_test/with_aliases.rbs +136 -0
- data/sig/use_map.rbs +35 -0
- data/sig/validator.rbs +12 -5
- data/sig/variance_calculator.rbs +3 -1
- data/sig/vendorer.rbs +1 -1
- data/sig/visitor.rbs +47 -0
- data/sig/writer.rbs +6 -2
- data/src/constants.c +153 -0
- data/src/ruby_objs.c +793 -0
- data/stdlib/base64/0/base64.rbs +298 -45
- data/stdlib/benchmark/0/benchmark.rbs +12 -3
- data/stdlib/bigdecimal/0/big_decimal.rbs +62 -198
- data/stdlib/cgi/0/core.rbs +68 -15
- data/stdlib/cgi/0/manifest.yaml +1 -0
- data/stdlib/coverage/0/coverage.rbs +50 -11
- data/stdlib/csv/0/csv.rbs +90 -119
- data/stdlib/csv/0/manifest.yaml +1 -0
- data/stdlib/date/0/date.rbs +806 -735
- data/stdlib/date/0/date_time.rbs +70 -211
- data/stdlib/dbm/0/dbm.rbs +0 -2
- data/stdlib/delegate/0/delegator.rbs +184 -0
- data/stdlib/delegate/0/kernel.rbs +47 -0
- data/stdlib/delegate/0/simple_delegator.rbs +96 -0
- data/stdlib/did_you_mean/0/did_you_mean.rbs +3 -8
- data/stdlib/digest/0/digest.rbs +48 -35
- data/stdlib/erb/0/erb.rbs +15 -39
- data/stdlib/etc/0/etc.rbs +174 -54
- data/stdlib/fileutils/0/fileutils.rbs +1234 -385
- data/stdlib/forwardable/0/forwardable.rbs +4 -4
- data/stdlib/io-console/0/io-console.rbs +82 -17
- data/stdlib/ipaddr/0/ipaddr.rbs +11 -6
- data/stdlib/json/0/json.rbs +434 -151
- data/stdlib/kconv/0/kconv.rbs +166 -0
- data/stdlib/logger/0/formatter.rbs +0 -2
- data/stdlib/logger/0/log_device.rbs +1 -3
- data/stdlib/logger/0/logger.rbs +465 -328
- data/stdlib/minitest/0/kernel.rbs +2 -2
- data/stdlib/minitest/0/minitest/abstract_reporter.rbs +4 -1
- data/stdlib/minitest/0/minitest/assertion.rbs +1 -0
- data/stdlib/minitest/0/minitest/assertions.rbs +58 -13
- data/stdlib/minitest/0/minitest/backtrace_filter.rbs +7 -0
- data/stdlib/minitest/0/minitest/bench_spec.rbs +8 -8
- data/stdlib/minitest/0/minitest/benchmark.rbs +17 -16
- data/stdlib/minitest/0/minitest/compress.rbs +13 -0
- data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
- data/stdlib/minitest/0/minitest/mock.rbs +9 -5
- data/stdlib/minitest/0/minitest/parallel/executor.rbs +4 -0
- data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +0 -1
- data/stdlib/minitest/0/minitest/pride_io.rbs +8 -0
- data/stdlib/minitest/0/minitest/pride_lol.rbs +2 -0
- data/stdlib/minitest/0/minitest/progress_reporter.rbs +1 -1
- data/stdlib/minitest/0/minitest/reportable.rbs +2 -0
- data/stdlib/minitest/0/minitest/runnable.rbs +33 -1
- data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +1 -1
- data/stdlib/minitest/0/minitest/spec/dsl.rbs +10 -6
- data/stdlib/minitest/0/minitest/spec.rbs +1 -1
- data/stdlib/minitest/0/minitest/statistics_reporter.rbs +5 -0
- data/stdlib/minitest/0/minitest/summary_reporter.rbs +0 -7
- data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +7 -7
- data/stdlib/minitest/0/minitest/test.rbs +7 -14
- data/stdlib/minitest/0/minitest/unexpected_error.rbs +2 -0
- data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
- data/stdlib/minitest/0/minitest/unit.rbs +1 -2
- data/stdlib/minitest/0/minitest.rbs +41 -892
- data/stdlib/monitor/0/monitor.rbs +91 -10
- data/stdlib/mutex_m/0/mutex_m.rbs +0 -2
- data/stdlib/net-http/0/manifest.yaml +1 -1
- data/stdlib/net-http/0/net-http.rbs +3858 -964
- data/stdlib/net-protocol/0/manifest.yaml +2 -0
- data/stdlib/net-protocol/0/net-protocol.rbs +56 -0
- data/stdlib/net-smtp/0/manifest.yaml +2 -0
- data/stdlib/net-smtp/0/net-smtp.rbs +55 -0
- data/stdlib/nkf/0/nkf.rbs +35 -5
- data/stdlib/objspace/0/objspace.rbs +40 -18
- data/stdlib/observable/0/observable.rbs +217 -0
- data/stdlib/open-uri/0/manifest.yaml +4 -0
- data/stdlib/open-uri/0/open-uri.rbs +393 -0
- data/stdlib/open3/0/open3.rbs +147 -0
- data/stdlib/openssl/0/manifest.yaml +1 -0
- data/stdlib/openssl/0/openssl.rbs +681 -316
- data/stdlib/optparse/0/optparse.rbs +100 -65
- data/stdlib/pathname/0/pathname.rbs +24 -15
- data/stdlib/pp/0/manifest.yaml +2 -0
- data/stdlib/pp/0/pp.rbs +300 -0
- data/stdlib/prettyprint/0/prettyprint.rbs +2 -6
- data/stdlib/pstore/0/pstore.rbs +370 -156
- data/stdlib/psych/0/core_ext.rbs +12 -0
- data/stdlib/{yaml → psych}/0/dbm.rbs +3 -3
- data/stdlib/psych/0/manifest.yaml +3 -0
- data/stdlib/psych/0/psych.rbs +402 -0
- data/stdlib/{yaml → psych}/0/store.rbs +2 -2
- data/stdlib/pty/0/pty.rbs +63 -11
- data/stdlib/rdoc/0/code_object.rbs +51 -0
- data/stdlib/rdoc/0/comment.rbs +59 -0
- data/stdlib/rdoc/0/context.rbs +153 -0
- data/stdlib/rdoc/0/markup.rbs +117 -0
- data/stdlib/rdoc/0/parser.rbs +56 -0
- data/stdlib/rdoc/0/rdoc.rbs +13 -380
- data/stdlib/rdoc/0/ri.rbs +17 -0
- data/stdlib/rdoc/0/store.rbs +48 -0
- data/stdlib/rdoc/0/top_level.rbs +97 -0
- data/stdlib/resolv/0/resolv.rbs +16 -79
- data/stdlib/ripper/0/ripper.rbs +1648 -0
- data/stdlib/securerandom/0/securerandom.rbs +7 -2
- data/stdlib/shellwords/0/shellwords.rbs +11 -12
- data/stdlib/singleton/0/singleton.rbs +0 -3
- data/stdlib/socket/0/addrinfo.rbs +13 -18
- data/stdlib/socket/0/basic_socket.rbs +5 -10
- data/stdlib/socket/0/ip_socket.rbs +0 -2
- data/stdlib/socket/0/socket.rbs +77 -46
- data/stdlib/socket/0/tcp_server.rbs +0 -5
- data/stdlib/socket/0/tcp_socket.rbs +36 -3
- data/stdlib/socket/0/udp_socket.rbs +4 -5
- data/stdlib/socket/0/unix_server.rbs +0 -5
- data/stdlib/socket/0/unix_socket.rbs +2 -4
- data/{core/string_io.rbs → stdlib/stringio/0/stringio.rbs} +188 -107
- data/stdlib/strscan/0/string_scanner.rbs +1269 -425
- data/stdlib/tempfile/0/tempfile.rbs +224 -61
- data/stdlib/time/0/time.rbs +48 -35
- data/stdlib/timeout/0/timeout.rbs +17 -8
- data/stdlib/tmpdir/0/tmpdir.rbs +10 -3
- data/stdlib/tsort/0/tsort.rbs +0 -4
- data/stdlib/uri/0/common.rbs +271 -144
- data/stdlib/uri/0/file.rbs +5 -0
- data/stdlib/uri/0/ftp.rbs +1 -1
- data/stdlib/uri/0/generic.rbs +26 -22
- data/stdlib/uri/0/http.rbs +4 -4
- data/stdlib/uri/0/ldap.rbs +1 -1
- data/stdlib/uri/0/mailto.rbs +84 -0
- data/stdlib/uri/0/rfc2396_parser.rbs +3 -0
- data/stdlib/yaml/0/manifest.yaml +1 -2
- data/stdlib/yaml/0/yaml.rbs +1 -199
- data/stdlib/zlib/0/buf_error.rbs +10 -0
- data/stdlib/zlib/0/data_error.rbs +10 -0
- data/stdlib/zlib/0/deflate.rbs +210 -0
- data/stdlib/zlib/0/error.rbs +20 -0
- data/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
- data/stdlib/zlib/0/gzip_file/error.rbs +23 -0
- data/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
- data/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
- data/stdlib/zlib/0/gzip_file.rbs +156 -0
- data/stdlib/zlib/0/gzip_reader.rbs +293 -0
- data/stdlib/zlib/0/gzip_writer.rbs +166 -0
- data/stdlib/zlib/0/inflate.rbs +180 -0
- data/stdlib/zlib/0/mem_error.rbs +10 -0
- data/stdlib/zlib/0/need_dict.rbs +13 -0
- data/stdlib/zlib/0/stream_end.rbs +11 -0
- data/stdlib/zlib/0/stream_error.rbs +11 -0
- data/stdlib/zlib/0/version_error.rbs +11 -0
- data/stdlib/zlib/0/zlib.rbs +1 -3
- data/stdlib/zlib/0/zstream.rbs +200 -0
- data/templates/include/rbs/constants.h.erb +20 -0
- data/templates/include/rbs/ruby_objs.h.erb +10 -0
- data/templates/src/constants.c.erb +36 -0
- data/templates/src/ruby_objs.c.erb +27 -0
- data/templates/template.rb +122 -0
- metadata +136 -36
- data/Gemfile +0 -33
- data/Gemfile.lock +0 -118
- data/core/deprecated.rbs +0 -9
- data/ext/rbs_extension/constants.c +0 -135
- data/ext/rbs_extension/ruby_objs.c +0 -525
- data/ext/rbs_extension/ruby_objs.h +0 -43
- data/lib/rbs/constant_table.rb +0 -167
- data/lib/rbs/parser_compat/lexer_error.rb +0 -6
- data/lib/rbs/parser_compat/located_value.rb +0 -7
- data/lib/rbs/parser_compat/semantics_error.rb +0 -6
- data/lib/rbs/parser_compat/syntax_error.rb +0 -6
- data/lib/rbs/test/spy.rb +0 -6
- data/lib/rbs/type_name_resolver.rb +0 -67
- data/sig/constant_table.rbs +0 -30
- data/sig/shims/abstract_syntax_tree.rbs +0 -25
- data/sig/shims/pp.rbs +0 -3
- data/sig/shims/ripper.rbs +0 -8
- data/sig/shims.rbs +0 -69
- data/sig/type_name_resolver.rbs +0 -26
- data/stdlib/minitest/0/manifest.yaml +0 -2
- data/stdlib/prime/0/integer-extension.rbs +0 -41
- data/stdlib/prime/0/manifest.yaml +0 -2
- data/stdlib/prime/0/prime.rbs +0 -372
data/core/gc.rbs
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# <!-- rdoc-file=gc.rb -->
|
2
|
-
# The GC module provides an interface to Ruby's mark
|
2
|
+
# The GC module provides an interface to Ruby's mark-and-sweep garbage
|
3
3
|
# collection mechanism.
|
4
4
|
#
|
5
5
|
# Some of the underlying methods are also available via the ObjectSpace module.
|
@@ -7,19 +7,240 @@
|
|
7
7
|
# You may obtain information about the operation of the GC through GC::Profiler.
|
8
8
|
#
|
9
9
|
module GC
|
10
|
+
# <!-- rdoc-file=gc.c -->
|
11
|
+
# The GC profiler provides access to information on GC runs including time,
|
12
|
+
# length and object space size.
|
13
|
+
#
|
14
|
+
# Example:
|
15
|
+
#
|
16
|
+
# GC::Profiler.enable
|
17
|
+
#
|
18
|
+
# require 'rdoc/rdoc'
|
19
|
+
#
|
20
|
+
# GC::Profiler.report
|
21
|
+
#
|
22
|
+
# GC::Profiler.disable
|
23
|
+
#
|
24
|
+
# See also GC.count, GC.malloc_allocated_size and GC.malloc_allocations
|
25
|
+
#
|
26
|
+
module Profiler
|
27
|
+
# <!--
|
28
|
+
# rdoc-file=gc.c
|
29
|
+
# - GC::Profiler.clear -> nil
|
30
|
+
# -->
|
31
|
+
# Clears the GC profiler data.
|
32
|
+
#
|
33
|
+
def self.clear: () -> nil
|
34
|
+
|
35
|
+
# <!--
|
36
|
+
# rdoc-file=gc.c
|
37
|
+
# - GC::Profiler.disable -> nil
|
38
|
+
# -->
|
39
|
+
# Stops the GC profiler.
|
40
|
+
#
|
41
|
+
def self.disable: () -> nil
|
42
|
+
|
43
|
+
# <!--
|
44
|
+
# rdoc-file=gc.c
|
45
|
+
# - GC::Profiler.enable -> nil
|
46
|
+
# -->
|
47
|
+
# Starts the GC profiler.
|
48
|
+
#
|
49
|
+
def self.enable: () -> nil
|
50
|
+
|
51
|
+
# <!--
|
52
|
+
# rdoc-file=gc.c
|
53
|
+
# - GC::Profiler.enabled? -> true or false
|
54
|
+
# -->
|
55
|
+
# The current status of GC profile mode.
|
56
|
+
#
|
57
|
+
def self.enabled?: () -> bool
|
58
|
+
|
59
|
+
# <!--
|
60
|
+
# rdoc-file=gc.c
|
61
|
+
# - GC::Profiler.raw_data -> [Hash, ...]
|
62
|
+
# -->
|
63
|
+
# Returns an Array of individual raw profile data Hashes ordered from earliest
|
64
|
+
# to latest by `:GC_INVOKE_TIME`.
|
65
|
+
#
|
66
|
+
# For example:
|
67
|
+
#
|
68
|
+
# [
|
69
|
+
# {
|
70
|
+
# :GC_TIME=>1.3000000000000858e-05,
|
71
|
+
# :GC_INVOKE_TIME=>0.010634999999999999,
|
72
|
+
# :HEAP_USE_SIZE=>289640,
|
73
|
+
# :HEAP_TOTAL_SIZE=>588960,
|
74
|
+
# :HEAP_TOTAL_OBJECTS=>14724,
|
75
|
+
# :GC_IS_MARKED=>false
|
76
|
+
# },
|
77
|
+
# # ...
|
78
|
+
# ]
|
79
|
+
#
|
80
|
+
# The keys mean:
|
81
|
+
#
|
82
|
+
# `:GC_TIME`
|
83
|
+
# : Time elapsed in seconds for this GC run
|
84
|
+
#
|
85
|
+
# `:GC_INVOKE_TIME`
|
86
|
+
# : Time elapsed in seconds from startup to when the GC was invoked
|
87
|
+
#
|
88
|
+
# `:HEAP_USE_SIZE`
|
89
|
+
# : Total bytes of heap used
|
90
|
+
#
|
91
|
+
# `:HEAP_TOTAL_SIZE`
|
92
|
+
# : Total size of heap in bytes
|
93
|
+
#
|
94
|
+
# `:HEAP_TOTAL_OBJECTS`
|
95
|
+
# : Total number of objects
|
96
|
+
#
|
97
|
+
# `:GC_IS_MARKED`
|
98
|
+
# : Returns `true` if the GC is in mark phase
|
99
|
+
#
|
100
|
+
#
|
101
|
+
# If ruby was built with `GC_PROFILE_MORE_DETAIL`, you will also have access to
|
102
|
+
# the following hash keys:
|
103
|
+
#
|
104
|
+
# `:GC_MARK_TIME`
|
105
|
+
# `:GC_SWEEP_TIME`
|
106
|
+
# `:ALLOCATE_INCREASE`
|
107
|
+
# `:ALLOCATE_LIMIT`
|
108
|
+
# `:HEAP_USE_PAGES`
|
109
|
+
# `:HEAP_LIVE_OBJECTS`
|
110
|
+
# `:HEAP_FREE_OBJECTS`
|
111
|
+
# `:HAVE_FINALIZE`
|
112
|
+
# :
|
113
|
+
#
|
114
|
+
def self.raw_data: () -> Array[Hash[Symbol, untyped]]
|
115
|
+
|
116
|
+
# <!--
|
117
|
+
# rdoc-file=gc.c
|
118
|
+
# - GC::Profiler.report
|
119
|
+
# - GC::Profiler.report(io)
|
120
|
+
# -->
|
121
|
+
# Writes the GC::Profiler.result to `$stdout` or the given IO object.
|
122
|
+
#
|
123
|
+
def self.report: (?_Reporter io) -> nil
|
124
|
+
|
125
|
+
interface _Reporter
|
126
|
+
def write: (String msg) -> void
|
127
|
+
end
|
128
|
+
|
129
|
+
# <!--
|
130
|
+
# rdoc-file=gc.c
|
131
|
+
# - GC::Profiler.result -> String
|
132
|
+
# -->
|
133
|
+
# Returns a profile data report such as:
|
134
|
+
#
|
135
|
+
# GC 1 invokes.
|
136
|
+
# Index Invoke Time(sec) Use Size(byte) Total Size(byte) Total Object GC time(ms)
|
137
|
+
# 1 0.012 159240 212940 10647 0.00000000000001530000
|
138
|
+
#
|
139
|
+
def self.result: () -> String
|
140
|
+
|
141
|
+
# <!--
|
142
|
+
# rdoc-file=gc.c
|
143
|
+
# - GC::Profiler.total_time -> float
|
144
|
+
# -->
|
145
|
+
# The total time used for garbage collection in seconds
|
146
|
+
#
|
147
|
+
def self.total_time: () -> Float
|
148
|
+
end
|
149
|
+
|
150
|
+
# <!-- rdoc-file=gc.c -->
|
151
|
+
# Internal constants in the garbage collector.
|
152
|
+
#
|
153
|
+
INTERNAL_CONSTANTS: Hash[Symbol, untyped]
|
154
|
+
|
155
|
+
# <!-- rdoc-file=gc.c -->
|
156
|
+
# GC build options
|
157
|
+
#
|
158
|
+
OPTS: Array[String]
|
159
|
+
|
10
160
|
# <!--
|
11
161
|
# rdoc-file=gc.rb
|
12
|
-
# - GC.
|
162
|
+
# - GC.config -> hash
|
163
|
+
# - GC.config(hash) -> hash
|
13
164
|
# -->
|
14
|
-
#
|
165
|
+
# Sets or gets information about the current GC config.
|
166
|
+
#
|
167
|
+
# Configuration parameters are GC implementation-specific and may change without
|
168
|
+
# notice.
|
169
|
+
#
|
170
|
+
# This method can be called without parameters to retrieve the current config as
|
171
|
+
# a `Hash` with `Symbol` keys.
|
15
172
|
#
|
16
|
-
#
|
173
|
+
# This method can also be called with a `Hash` argument to assign values to
|
174
|
+
# valid config keys. Config keys missing from the passed `Hash` will be left
|
175
|
+
# unmodified.
|
176
|
+
#
|
177
|
+
# If a key/value pair is passed to this function that does not correspond to a
|
178
|
+
# valid config key for the GC implementation being used, no config will be
|
179
|
+
# updated, the key will be present in the returned Hash, and its value will be
|
180
|
+
# `nil`. This is to facilitate easy migration between GC implementations.
|
181
|
+
#
|
182
|
+
# In both call-seqs, the return value of `GC.config` will be a `Hash` containing
|
183
|
+
# the most recent full configuration, i.e., all keys and values defined by the
|
184
|
+
# specific GC implementation being used. In the case of a config update, the
|
185
|
+
# return value will include the new values being updated.
|
186
|
+
#
|
187
|
+
# This method is only expected to work on CRuby.
|
188
|
+
#
|
189
|
+
# ### GC Implementation independent values
|
190
|
+
#
|
191
|
+
# The `GC.config` hash can also contain keys that are global and read-only.
|
192
|
+
# These keys are not specific to any one GC library implementation and
|
193
|
+
# attempting to write to them will raise `ArgumentError`.
|
194
|
+
#
|
195
|
+
# There is currently only one global, read-only key:
|
196
|
+
#
|
197
|
+
# implementation
|
198
|
+
# : Returns a `String` containing the name of the currently loaded GC library,
|
199
|
+
# if one has been loaded using `RUBY_GC_LIBRARY`, and "default" in all other
|
200
|
+
# cases
|
201
|
+
#
|
202
|
+
#
|
203
|
+
# ### GC Implementation specific values
|
204
|
+
#
|
205
|
+
# GC libraries are expected to document their own configuration. Valid keys for
|
206
|
+
# Ruby's default GC implementation are:
|
207
|
+
#
|
208
|
+
# rgengc_allow_full_mark
|
209
|
+
# : Controls whether the GC is allowed to run a full mark (young & old
|
210
|
+
# objects).
|
211
|
+
#
|
212
|
+
# When `true`, GC interleaves major and minor collections. This is the
|
213
|
+
# default. GC will function as intended.
|
214
|
+
#
|
215
|
+
# When `false`, the GC will never trigger a full marking cycle unless
|
216
|
+
# explicitly requested by user code. Instead, only a minor mark will
|
217
|
+
# run—only young objects will be marked. When the heap space is exhausted,
|
218
|
+
# new pages will be allocated immediately instead of running a full mark.
|
219
|
+
#
|
220
|
+
# A flag will be set to notify that a full mark has been requested. This
|
221
|
+
# flag is accessible using `GC.latest_gc_info(:needs_major_by)`
|
222
|
+
#
|
223
|
+
# The user can trigger a major collection at any time using
|
224
|
+
# `GC.start(full_mark: true)`
|
225
|
+
#
|
226
|
+
# When `false`, Young to Old object promotion is disabled. For performance
|
227
|
+
# reasons, it is recommended to warm up an application using
|
228
|
+
# `Process.warmup` before setting this parameter to `false`.
|
229
|
+
#
|
230
|
+
def self.config: () -> Hash[Symbol, untyped]
|
231
|
+
| (Hash[Symbol, untyped]) -> Hash[Symbol, untyped]
|
232
|
+
|
233
|
+
# <!--
|
234
|
+
# rdoc-file=gc.rb
|
235
|
+
# - GC.count -> Integer
|
236
|
+
# -->
|
237
|
+
# Returns the number of times GC has occurred since the process started.
|
17
238
|
#
|
18
239
|
def self.count: () -> Integer
|
19
240
|
|
20
241
|
# <!--
|
21
242
|
# rdoc-file=gc.rb
|
22
|
-
# - GC.disable
|
243
|
+
# - GC.disable -> true or false
|
23
244
|
# -->
|
24
245
|
# Disables garbage collection, returning `true` if garbage collection was
|
25
246
|
# already disabled.
|
@@ -31,7 +252,7 @@ module GC
|
|
31
252
|
|
32
253
|
# <!--
|
33
254
|
# rdoc-file=gc.rb
|
34
|
-
# - GC.enable
|
255
|
+
# - GC.enable -> true or false
|
35
256
|
# -->
|
36
257
|
# Enables garbage collection, returning `true` if garbage collection was
|
37
258
|
# previously disabled.
|
@@ -44,27 +265,33 @@ module GC
|
|
44
265
|
|
45
266
|
# <!--
|
46
267
|
# rdoc-file=gc.rb
|
47
|
-
# -
|
48
|
-
# - ObjectSpace.garbage_collect -> nil
|
49
|
-
# - include GC; garbage_collect -> nil
|
50
|
-
# - GC.start(full_mark: true, immediate_sweep: true) -> nil
|
51
|
-
# - ObjectSpace.garbage_collect(full_mark: true, immediate_sweep: true) -> nil
|
52
|
-
# - include GC; garbage_collect(full_mark: true, immediate_sweep: true) -> nil
|
268
|
+
# - start(full_mark: true, immediate_mark: true, immediate_sweep: true)
|
53
269
|
# -->
|
54
270
|
# Initiates garbage collection, even if manually disabled.
|
55
271
|
#
|
56
|
-
#
|
57
|
-
#
|
58
|
-
#
|
59
|
-
#
|
60
|
-
#
|
61
|
-
#
|
62
|
-
#
|
63
|
-
#
|
64
|
-
#
|
272
|
+
# The `full_mark` keyword argument determines whether or not to perform a major
|
273
|
+
# garbage collection cycle. When set to `true`, a major garbage collection cycle
|
274
|
+
# is run, meaning all objects are marked. When set to `false`, a minor garbage
|
275
|
+
# collection cycle is run, meaning only young objects are marked.
|
276
|
+
#
|
277
|
+
# The `immediate_mark` keyword argument determines whether or not to perform
|
278
|
+
# incremental marking. When set to `true`, marking is completed during the call
|
279
|
+
# to this method. When set to `false`, marking is performed in steps that are
|
280
|
+
# interleaved with future Ruby code execution, so marking might not be completed
|
281
|
+
# during this method call. Note that if `full_mark` is `false`, then marking
|
282
|
+
# will always be immediate, regardless of the value of `immediate_mark`.
|
283
|
+
#
|
284
|
+
# The `immediate_sweep` keyword argument determines whether or not to defer
|
285
|
+
# sweeping (using lazy sweep). When set to `false`, sweeping is performed in
|
286
|
+
# steps that are interleaved with future Ruby code execution, so sweeping might
|
287
|
+
# not be completed during this method call. When set to `true`, sweeping is
|
288
|
+
# completed during the call to this method.
|
289
|
+
#
|
290
|
+
# Note: These keyword arguments are implementation and version-dependent. They
|
291
|
+
# are not guaranteed to be future-compatible and may be ignored if the
|
65
292
|
# underlying implementation does not support them.
|
66
293
|
#
|
67
|
-
def self.start: (?immediate_sweep: boolish
|
294
|
+
def self.start: (?immediate_sweep: boolish, ?immediate_mark: boolish, ?full_mark: boolish) -> nil
|
68
295
|
|
69
296
|
# <!--
|
70
297
|
# rdoc-file=gc.rb
|
@@ -74,113 +301,273 @@ module GC
|
|
74
301
|
# -->
|
75
302
|
# Returns a Hash containing information about the GC.
|
76
303
|
#
|
77
|
-
# The contents of the hash are implementation
|
304
|
+
# The contents of the hash are implementation-specific and may change in the
|
78
305
|
# future without notice.
|
79
306
|
#
|
80
|
-
# The hash includes
|
307
|
+
# The hash includes internal statistics about GC such as:
|
81
308
|
#
|
82
309
|
# count
|
83
|
-
# : The total number of garbage collections
|
310
|
+
# : The total number of garbage collections run since application start (count
|
84
311
|
# includes both minor and major garbage collections)
|
312
|
+
#
|
313
|
+
# time
|
314
|
+
# : The total time spent in garbage collections (in milliseconds)
|
315
|
+
#
|
85
316
|
# heap_allocated_pages
|
86
317
|
# : The total number of `:heap_eden_pages` + `:heap_tomb_pages`
|
318
|
+
#
|
87
319
|
# heap_sorted_length
|
88
320
|
# : The number of pages that can fit into the buffer that holds references to
|
89
321
|
# all pages
|
322
|
+
#
|
90
323
|
# heap_allocatable_pages
|
91
324
|
# : The total number of pages the application could allocate without
|
92
325
|
# additional GC
|
326
|
+
#
|
93
327
|
# heap_available_slots
|
94
328
|
# : The total number of slots in all `:heap_allocated_pages`
|
329
|
+
#
|
95
330
|
# heap_live_slots
|
96
331
|
# : The total number of slots which contain live objects
|
332
|
+
#
|
97
333
|
# heap_free_slots
|
98
334
|
# : The total number of slots which do not contain live objects
|
335
|
+
#
|
99
336
|
# heap_final_slots
|
100
337
|
# : The total number of slots with pending finalizers to be run
|
338
|
+
#
|
101
339
|
# heap_marked_slots
|
102
340
|
# : The total number of objects marked in the last GC
|
341
|
+
#
|
103
342
|
# heap_eden_pages
|
104
343
|
# : The total number of pages which contain at least one live slot
|
344
|
+
#
|
105
345
|
# heap_tomb_pages
|
106
346
|
# : The total number of pages which do not contain any live slots
|
347
|
+
#
|
107
348
|
# total_allocated_pages
|
108
349
|
# : The cumulative number of pages allocated since application start
|
350
|
+
#
|
109
351
|
# total_freed_pages
|
110
352
|
# : The cumulative number of pages freed since application start
|
353
|
+
#
|
111
354
|
# total_allocated_objects
|
112
355
|
# : The cumulative number of objects allocated since application start
|
356
|
+
#
|
113
357
|
# total_freed_objects
|
114
358
|
# : The cumulative number of objects freed since application start
|
359
|
+
#
|
115
360
|
# malloc_increase_bytes
|
116
361
|
# : Amount of memory allocated on the heap for objects. Decreased by any GC
|
362
|
+
#
|
117
363
|
# malloc_increase_bytes_limit
|
118
364
|
# : When `:malloc_increase_bytes` crosses this limit, GC is triggered
|
365
|
+
#
|
119
366
|
# minor_gc_count
|
120
367
|
# : The total number of minor garbage collections run since process start
|
368
|
+
#
|
121
369
|
# major_gc_count
|
122
370
|
# : The total number of major garbage collections run since process start
|
371
|
+
#
|
372
|
+
# compact_count
|
373
|
+
# : The total number of compactions run since process start
|
374
|
+
#
|
375
|
+
# read_barrier_faults
|
376
|
+
# : The total number of times the read barrier was triggered during compaction
|
377
|
+
#
|
378
|
+
# total_moved_objects
|
379
|
+
# : The total number of objects compaction has moved
|
380
|
+
#
|
123
381
|
# remembered_wb_unprotected_objects
|
124
382
|
# : The total number of objects without write barriers
|
383
|
+
#
|
125
384
|
# remembered_wb_unprotected_objects_limit
|
126
385
|
# : When `:remembered_wb_unprotected_objects` crosses this limit, major GC is
|
127
386
|
# triggered
|
387
|
+
#
|
128
388
|
# old_objects
|
129
389
|
# : Number of live, old objects which have survived at least 3 garbage
|
130
390
|
# collections
|
391
|
+
#
|
131
392
|
# old_objects_limit
|
132
393
|
# : When `:old_objects` crosses this limit, major GC is triggered
|
394
|
+
#
|
133
395
|
# oldmalloc_increase_bytes
|
134
396
|
# : Amount of memory allocated on the heap for objects. Decreased by major GC
|
397
|
+
#
|
135
398
|
# oldmalloc_increase_bytes_limit
|
136
|
-
# : When `:
|
137
|
-
# triggered
|
399
|
+
# : When `:oldmalloc_increase_bytes` crosses this limit, major GC is triggered
|
138
400
|
#
|
139
401
|
#
|
140
402
|
# If the optional argument, hash, is given, it is overwritten and returned. This
|
141
|
-
# is intended to avoid probe effect.
|
403
|
+
# is intended to avoid the probe effect.
|
142
404
|
#
|
143
405
|
# This method is only expected to work on CRuby.
|
144
406
|
#
|
145
|
-
def self.stat: (
|
146
|
-
| (
|
407
|
+
def self.stat: (?Hash[Symbol, untyped]? hash) -> Hash[Symbol, untyped]
|
408
|
+
| (Symbol key) -> Integer
|
147
409
|
|
148
410
|
# <!--
|
149
411
|
# rdoc-file=gc.rb
|
150
|
-
# - GC.
|
412
|
+
# - GC.measure_total_time = true/false
|
151
413
|
# -->
|
152
|
-
#
|
414
|
+
# Enables measuring GC time. You can get the result with `GC.stat(:time)`. Note
|
415
|
+
# that GC time measurement can cause some performance overhead.
|
153
416
|
#
|
154
|
-
def self.
|
417
|
+
def self.measure_total_time=: [T] (T enable) -> T
|
155
418
|
|
156
419
|
# <!--
|
157
420
|
# rdoc-file=gc.rb
|
158
|
-
# - GC.
|
421
|
+
# - GC.measure_total_time -> true/false
|
422
|
+
# -->
|
423
|
+
# Returns the measure_total_time flag (default: `true`). Note that measurement
|
424
|
+
# can affect the application's performance.
|
425
|
+
#
|
426
|
+
def self.measure_total_time: () -> bool
|
427
|
+
|
428
|
+
# <!--
|
429
|
+
# rdoc-file=gc.c
|
430
|
+
# - GC.auto_compact = flag
|
431
|
+
# -->
|
432
|
+
# Updates automatic compaction mode.
|
433
|
+
#
|
434
|
+
# When enabled, the compactor will execute on every major collection.
|
435
|
+
#
|
436
|
+
# Enabling compaction will degrade performance on major collections.
|
437
|
+
#
|
438
|
+
def self.auto_compact=: [T] (T enable) -> T
|
439
|
+
|
440
|
+
# <!--
|
441
|
+
# rdoc-file=gc.c
|
442
|
+
# - GC.auto_compact -> true or false
|
443
|
+
# -->
|
444
|
+
# Returns whether or not automatic compaction has been enabled.
|
445
|
+
#
|
446
|
+
def self.auto_compact: () -> bool
|
447
|
+
|
448
|
+
# <!--
|
449
|
+
# rdoc-file=gc.rb
|
450
|
+
# - GC.stat_heap -> Hash
|
451
|
+
# - GC.stat_heap(nil, hash) -> Hash
|
452
|
+
# - GC.stat_heap(heap_name) -> Hash
|
453
|
+
# - GC.stat_heap(heap_name, hash) -> Hash
|
454
|
+
# - GC.stat_heap(heap_name, :key) -> Numeric
|
455
|
+
# -->
|
456
|
+
# Returns information for heaps in the GC.
|
457
|
+
#
|
458
|
+
# If the first optional argument, `heap_name`, is passed in and not `nil`, it
|
459
|
+
# returns a `Hash` containing information about the particular heap. Otherwise,
|
460
|
+
# it will return a `Hash` with heap names as keys and a `Hash` containing
|
461
|
+
# information about the heap as values.
|
462
|
+
#
|
463
|
+
# If the second optional argument, `hash_or_key`, is given as a `Hash`, it will
|
464
|
+
# be overwritten and returned. This is intended to avoid the probe effect.
|
465
|
+
#
|
466
|
+
# If both optional arguments are passed in and the second optional argument is a
|
467
|
+
# symbol, it will return a `Numeric` value for the particular heap.
|
468
|
+
#
|
469
|
+
# On CRuby, `heap_name` is of the type `Integer` but may be of type `String` on
|
470
|
+
# other implementations.
|
471
|
+
#
|
472
|
+
# The contents of the hash are implementation-specific and may change in the
|
473
|
+
# future without notice.
|
474
|
+
#
|
475
|
+
# If the optional argument, hash, is given, it is overwritten and returned.
|
476
|
+
#
|
477
|
+
# This method is only expected to work on CRuby.
|
478
|
+
#
|
479
|
+
# The hash includes the following keys about the internal information in the GC:
|
480
|
+
#
|
481
|
+
# slot_size
|
482
|
+
# : The slot size of the heap in bytes.
|
483
|
+
#
|
484
|
+
# heap_allocatable_pages
|
485
|
+
# : The number of pages that can be allocated without triggering a new garbage
|
486
|
+
# collection cycle.
|
487
|
+
#
|
488
|
+
# heap_eden_pages
|
489
|
+
# : The number of pages in the eden heap.
|
490
|
+
#
|
491
|
+
# heap_eden_slots
|
492
|
+
# : The total number of slots in all of the pages in the eden heap.
|
493
|
+
#
|
494
|
+
# heap_tomb_pages
|
495
|
+
# : The number of pages in the tomb heap. The tomb heap only contains pages
|
496
|
+
# that do not have any live objects.
|
497
|
+
#
|
498
|
+
# heap_tomb_slots
|
499
|
+
# : The total number of slots in all of the pages in the tomb heap.
|
500
|
+
#
|
501
|
+
# total_allocated_pages
|
502
|
+
# : The total number of pages that have been allocated in the heap.
|
503
|
+
#
|
504
|
+
# total_freed_pages
|
505
|
+
# : The total number of pages that have been freed and released back to the
|
506
|
+
# system in the heap.
|
507
|
+
#
|
508
|
+
# force_major_gc_count
|
509
|
+
# : The number of times this heap has forced major garbage collection cycles
|
510
|
+
# to start due to running out of free slots.
|
511
|
+
#
|
512
|
+
# force_incremental_marking_finish_count
|
513
|
+
# : The number of times this heap has forced incremental marking to complete
|
514
|
+
# due to running out of pooled slots.
|
515
|
+
#
|
516
|
+
def self.stat_heap: (?Integer? heap_name, ?Hash[Symbol, untyped]? hash) -> Hash[Symbol, untyped]
|
517
|
+
| (Integer heap_name, Symbol key) -> Integer
|
518
|
+
|
519
|
+
# <!--
|
520
|
+
# rdoc-file=gc.c
|
521
|
+
# - GC.latest_compact_info -> hash
|
522
|
+
# -->
|
523
|
+
# Returns information about object moved in the most recent GC compaction.
|
524
|
+
#
|
525
|
+
# The returned hash has two keys :considered and :moved. The hash for
|
526
|
+
# :considered lists the number of objects that were considered for movement by
|
527
|
+
# the compactor, and the :moved hash lists the number of objects that were
|
528
|
+
# actually moved. Some objects can't be moved (maybe they were pinned) so these
|
529
|
+
# numbers can be used to calculate compaction efficiency.
|
530
|
+
#
|
531
|
+
def self.latest_compact_info: () -> compact_info
|
532
|
+
|
533
|
+
# <!--
|
534
|
+
# rdoc-file=gc.rb
|
535
|
+
# - GC.stress -> integer, true, or false
|
536
|
+
# -->
|
537
|
+
# Returns the current status of GC stress mode.
|
538
|
+
#
|
539
|
+
def self.stress: () -> (Integer | bool)
|
540
|
+
|
541
|
+
# <!--
|
542
|
+
# rdoc-file=gc.rb
|
543
|
+
# - GC.stress = flag -> flag
|
159
544
|
# -->
|
160
545
|
# Updates the GC stress mode.
|
161
546
|
#
|
162
547
|
# When stress mode is enabled, the GC is invoked at every GC opportunity: all
|
163
548
|
# memory and object allocations.
|
164
549
|
#
|
165
|
-
# Enabling stress mode will degrade performance
|
550
|
+
# Enabling stress mode will degrade performance; it is only for debugging.
|
166
551
|
#
|
167
|
-
# flag can be true, false, or an integer
|
552
|
+
# The flag can be true, false, or an integer bitwise-ORed with the following
|
553
|
+
# flags:
|
168
554
|
# 0x01:: no major GC
|
169
555
|
# 0x02:: no immediate sweep
|
170
556
|
# 0x04:: full mark after malloc/calloc/realloc
|
171
557
|
#
|
172
|
-
def self.stress=: (Integer
|
558
|
+
def self.stress=: (Integer flag) -> Integer
|
559
|
+
| (bool flag) -> bool
|
173
560
|
|
174
561
|
# <!--
|
175
562
|
# rdoc-file=gc.rb
|
176
563
|
# - GC.total_time -> int
|
177
564
|
# -->
|
178
|
-
#
|
565
|
+
# Returns the measured GC total time in nanoseconds.
|
179
566
|
#
|
180
567
|
def self.total_time: () -> Integer
|
181
568
|
|
182
569
|
# <!--
|
183
|
-
# rdoc-file=gc.
|
570
|
+
# rdoc-file=gc.c
|
184
571
|
# - GC.compact
|
185
572
|
# -->
|
186
573
|
# This function compacts objects together in Ruby's heap. It eliminates unused
|
@@ -192,7 +579,15 @@ module GC
|
|
192
579
|
# This method is implementation specific and not expected to be implemented in
|
193
580
|
# any implementation besides MRI.
|
194
581
|
#
|
195
|
-
|
582
|
+
# To test whether GC compaction is supported, use the idiom:
|
583
|
+
#
|
584
|
+
# GC.respond_to?(:compact)
|
585
|
+
#
|
586
|
+
def self.compact: () -> compact_info
|
587
|
+
|
588
|
+
# The type that `GC.compact` and related functions can return.
|
589
|
+
#
|
590
|
+
type compact_info = Hash[:considered | :moved | :moved_up | :moved_down, Hash[Symbol, Integer]]
|
196
591
|
|
197
592
|
# <!--
|
198
593
|
# rdoc-file=gc.rb
|
@@ -204,12 +599,12 @@ module GC
|
|
204
599
|
# moved are replaced with T_MOVED objects. No object should have a reference to
|
205
600
|
# a T_MOVED object after compaction.
|
206
601
|
#
|
207
|
-
# This function
|
602
|
+
# This function expands the heap to ensure room to move all objects, compacts
|
208
603
|
# the heap to make sure everything moves, updates all references, then performs
|
209
604
|
# a full GC. If any object contains a reference to a T_MOVED object, that
|
210
605
|
# object should be pushed on the mark stack, and will make a SEGV.
|
211
606
|
#
|
212
|
-
def self.verify_compaction_references: (
|
607
|
+
def self.verify_compaction_references: (?toward: :empty | untyped, ?double_heap: boolish, ?expand_heap: boolish) -> compact_info
|
213
608
|
|
214
609
|
# <!--
|
215
610
|
# rdoc-file=gc.c
|
@@ -222,173 +617,28 @@ module GC
|
|
222
617
|
#
|
223
618
|
def self.verify_internal_consistency: () -> nil
|
224
619
|
|
225
|
-
# <!--
|
226
|
-
# rdoc-file=gc.c
|
227
|
-
# - verify_transient_heap_internal_consistency()
|
228
|
-
# -->
|
229
|
-
#
|
230
|
-
def self.verify_transient_heap_internal_consistency: () -> nil
|
231
|
-
|
232
620
|
# <!--
|
233
621
|
# rdoc-file=gc.rb
|
234
|
-
# - GC.latest_gc_info ->
|
622
|
+
# - GC.latest_gc_info -> hash
|
235
623
|
# - GC.latest_gc_info(hash) -> hash
|
236
|
-
# - GC.latest_gc_info(
|
624
|
+
# - GC.latest_gc_info(key) -> value
|
237
625
|
# -->
|
238
626
|
# Returns information about the most recent garbage collection.
|
239
627
|
#
|
240
|
-
# If the
|
241
|
-
# is intended to avoid probe effect.
|
628
|
+
# If the argument `hash` is given and is a Hash object, it is overwritten and
|
629
|
+
# returned. This is intended to avoid the probe effect.
|
242
630
|
#
|
243
|
-
|
244
|
-
|
631
|
+
# If the argument `key` is given and is a Symbol object, it returns the value
|
632
|
+
# associated with the key. This is equivalent to `GC.latest_gc_info[key]`.
|
633
|
+
#
|
634
|
+
def self.latest_gc_info: (?Hash[Symbol, untyped]? hash) -> Hash[Symbol, untyped]
|
245
635
|
| (Symbol key) -> untyped
|
246
636
|
|
247
637
|
# <!--
|
248
638
|
# rdoc-file=gc.rb
|
249
639
|
# - garbage_collect(full_mark: true, immediate_mark: true, immediate_sweep: true)
|
250
640
|
# -->
|
641
|
+
# Alias of GC.start
|
251
642
|
#
|
252
643
|
def garbage_collect: (?immediate_sweep: boolish immediate_sweep, ?immediate_mark: boolish immediate_mark, ?full_mark: boolish full_mark) -> nil
|
253
644
|
end
|
254
|
-
|
255
|
-
# <!-- rdoc-file=gc.c -->
|
256
|
-
# internal constants
|
257
|
-
#
|
258
|
-
GC::INTERNAL_CONSTANTS: Hash[Symbol, Integer]
|
259
|
-
|
260
|
-
# <!-- rdoc-file=gc.c -->
|
261
|
-
# GC build options
|
262
|
-
#
|
263
|
-
GC::OPTS: Array[String]
|
264
|
-
|
265
|
-
# <!-- rdoc-file=gc.c -->
|
266
|
-
# The GC profiler provides access to information on GC runs including time,
|
267
|
-
# length and object space size.
|
268
|
-
#
|
269
|
-
# Example:
|
270
|
-
#
|
271
|
-
# GC::Profiler.enable
|
272
|
-
#
|
273
|
-
# require 'rdoc/rdoc'
|
274
|
-
#
|
275
|
-
# GC::Profiler.report
|
276
|
-
#
|
277
|
-
# GC::Profiler.disable
|
278
|
-
#
|
279
|
-
# See also GC.count, GC.malloc_allocated_size and GC.malloc_allocations
|
280
|
-
#
|
281
|
-
module GC::Profiler
|
282
|
-
# <!--
|
283
|
-
# rdoc-file=gc.c
|
284
|
-
# - GC::Profiler.clear -> nil
|
285
|
-
# -->
|
286
|
-
# Clears the GC profiler data.
|
287
|
-
#
|
288
|
-
def self.clear: () -> void
|
289
|
-
|
290
|
-
# <!--
|
291
|
-
# rdoc-file=gc.c
|
292
|
-
# - GC::Profiler.disable -> nil
|
293
|
-
# -->
|
294
|
-
# Stops the GC profiler.
|
295
|
-
#
|
296
|
-
def self.disable: () -> void
|
297
|
-
|
298
|
-
# <!--
|
299
|
-
# rdoc-file=gc.c
|
300
|
-
# - GC::Profiler.enable -> nil
|
301
|
-
# -->
|
302
|
-
# Starts the GC profiler.
|
303
|
-
#
|
304
|
-
def self.enable: () -> void
|
305
|
-
|
306
|
-
# <!--
|
307
|
-
# rdoc-file=gc.c
|
308
|
-
# - GC::Profiler.enabled? -> true or false
|
309
|
-
# -->
|
310
|
-
# The current status of GC profile mode.
|
311
|
-
#
|
312
|
-
def self.enabled?: () -> bool
|
313
|
-
|
314
|
-
# <!--
|
315
|
-
# rdoc-file=gc.c
|
316
|
-
# - GC::Profiler.raw_data -> [Hash, ...]
|
317
|
-
# -->
|
318
|
-
# Returns an Array of individual raw profile data Hashes ordered from earliest
|
319
|
-
# to latest by `:GC_INVOKE_TIME`.
|
320
|
-
#
|
321
|
-
# For example:
|
322
|
-
#
|
323
|
-
# [
|
324
|
-
# {
|
325
|
-
# :GC_TIME=>1.3000000000000858e-05,
|
326
|
-
# :GC_INVOKE_TIME=>0.010634999999999999,
|
327
|
-
# :HEAP_USE_SIZE=>289640,
|
328
|
-
# :HEAP_TOTAL_SIZE=>588960,
|
329
|
-
# :HEAP_TOTAL_OBJECTS=>14724,
|
330
|
-
# :GC_IS_MARKED=>false
|
331
|
-
# },
|
332
|
-
# # ...
|
333
|
-
# ]
|
334
|
-
#
|
335
|
-
# The keys mean:
|
336
|
-
#
|
337
|
-
# `:GC_TIME`
|
338
|
-
# : Time elapsed in seconds for this GC run
|
339
|
-
# `:GC_INVOKE_TIME`
|
340
|
-
# : Time elapsed in seconds from startup to when the GC was invoked
|
341
|
-
# `:HEAP_USE_SIZE`
|
342
|
-
# : Total bytes of heap used
|
343
|
-
# `:HEAP_TOTAL_SIZE`
|
344
|
-
# : Total size of heap in bytes
|
345
|
-
# `:HEAP_TOTAL_OBJECTS`
|
346
|
-
# : Total number of objects
|
347
|
-
# `:GC_IS_MARKED`
|
348
|
-
# : Returns `true` if the GC is in mark phase
|
349
|
-
#
|
350
|
-
#
|
351
|
-
# If ruby was built with `GC_PROFILE_MORE_DETAIL`, you will also have access to
|
352
|
-
# the following hash keys:
|
353
|
-
#
|
354
|
-
# `:GC_MARK_TIME`
|
355
|
-
# `:GC_SWEEP_TIME`
|
356
|
-
# `:ALLOCATE_INCREASE`
|
357
|
-
# `:ALLOCATE_LIMIT`
|
358
|
-
# `:HEAP_USE_PAGES`
|
359
|
-
# `:HEAP_LIVE_OBJECTS`
|
360
|
-
# `:HEAP_FREE_OBJECTS`
|
361
|
-
# `:HAVE_FINALIZE`
|
362
|
-
# :
|
363
|
-
#
|
364
|
-
def self.raw_data: () -> ::Array[::Hash[Symbol, untyped]]
|
365
|
-
|
366
|
-
# <!--
|
367
|
-
# rdoc-file=gc.c
|
368
|
-
# - GC::Profiler.report
|
369
|
-
# - GC::Profiler.report(io)
|
370
|
-
# -->
|
371
|
-
# Writes the GC::Profiler.result to `$stdout` or the given IO object.
|
372
|
-
#
|
373
|
-
def self.report: (?IO io) -> void
|
374
|
-
|
375
|
-
# <!--
|
376
|
-
# rdoc-file=gc.c
|
377
|
-
# - GC::Profiler.result -> String
|
378
|
-
# -->
|
379
|
-
# Returns a profile data report such as:
|
380
|
-
#
|
381
|
-
# GC 1 invokes.
|
382
|
-
# Index Invoke Time(sec) Use Size(byte) Total Size(byte) Total Object GC time(ms)
|
383
|
-
# 1 0.012 159240 212940 10647 0.00000000000001530000
|
384
|
-
#
|
385
|
-
def self.result: () -> String
|
386
|
-
|
387
|
-
# <!--
|
388
|
-
# rdoc-file=gc.c
|
389
|
-
# - GC::Profiler.total_time -> float
|
390
|
-
# -->
|
391
|
-
# The total time used for garbage collection in seconds
|
392
|
-
#
|
393
|
-
def self.total_time: () -> Float
|
394
|
-
end
|