-*- coding: utf-8 -*-

base-url = https://github.com/ruby/ruby

commit 00a3b71eaf6f1a69f319de4b50e79ab1765d0cd8
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-17 07:03:18 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-17 23:40:03 +0900

    [DOC] Improve docs for ObjectSpace.memsize_of_all

commit 81e06e7004ef17d50aa7ca9b26b31fb1ada515f8
  Author:     Masafumi Koba <473530+ybiquitous@users.noreply.github.com>
  AuthorDate: 2026-01-16 10:42:22 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-17 23:05:07 +0900

    [ruby/timeout] Improve Timeout.timeout documentation formatting and typos

    This commit makes a few minor improvements to the documentation of the `Timeout.timeout` method.
    The changes include fixing typos and enhancing formatting for better readability.

    We can see the latest version of the documentation here:
    https://docs.ruby-lang.org/en/master/Timeout.html#method-c-timeout

    Also, we can verify this change locally by running:

    ```shell
    rdoc
    open doc/Timeout.html
    ```

    https://github.com/ruby/timeout/commit/53ee559e15

commit 78b7646bdb91285873ac26bca060591e06c45afe
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-17 14:19:15 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-17 14:19:15 +0900

    [Bug #21842] Let `rb_interned_str` return US-ASCII if possible

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15894

commit 8ca2f6489bc2b04902472c544edd69664cef0c4e
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-17 13:38:55 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-17 13:38:55 +0900

    Revert "Fix rb_interned_str: create strings with BINARY (akak ASCII_8BIT) encoding"

    This reverts commit 1f3c52dc155fb7fbc42fc8e146924091ba1dfa20.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15894

commit 3e13b7d4ef546574dcf376e2bb6b630abb46181b
  Author:     Max Bernstein <ruby@bernsteinbear.com>
  AuthorDate: 2026-01-17 13:07:00 +0900
  Commit:     Max Bernstein <ruby@bernsteinbear.com>
  CommitDate: 2026-01-17 13:07:00 +0900

    ZJIT: Fix land race

    InvokeProc and HIR effects landed without an intermediate rebase so we
    got a conflict in the form of a type checker error (not handled new
    opcode in a new function).

commit 0e0fad1e58f23ee0e12ab06c1bcd171cba2947f2
  Author:     Nozomi Hijikata <121233810+nozomemein@users.noreply.github.com>
  AuthorDate: 2026-01-17 11:19:54 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-17 11:19:54 +0900

    ZJIT: Specialize OPTIMIZED_METHOD_TYPE_CALL (#15859)

    Closes: https://github.com/Shopify/ruby/issues/865

    ## Benchmark
    ### lobsters
    - wall clock time
      - before patch: Average of last 10, non-warmup iters: 809ms
      - after patch: Average of last 10, non-warmup iters: 754ms
    - zjit stats below

    <details>

    <summary>before patch</summary>

    ```
    ***ZJIT: Printing ZJIT statistics on exit***
    Top-20 not inlined C methods (54.9% of total 18,003,698):
                                                   Hash#fetch: 3,184,106 (17.7%)
                                                Regexp#match?:   707,148 ( 3.9%)
                                                    Hash#key?:   689,879 ( 3.8%)
                                                  String#sub!:   489,841 ( 2.7%)
                                               Array#include?:   470,648 ( 2.6%)
                                                 Set#include?:   397,520 ( 2.2%)
                                                    String#<<:   396,279 ( 2.2%)
                                           String#start_with?:   373,666 ( 2.1%)
                                                   Kernel#dup:   352,617 ( 2.0%)
                                                   Array#any?:   350,454 ( 1.9%)
                                                  Hash#delete:   331,784 ( 1.8%)
                                                   String.new:   307,248 ( 1.7%)
                                                  Integer#===:   262,336 ( 1.5%)
                                             Symbol#end_with?:   255,538 ( 1.4%)
                                                 Kernel#is_a?:   247,292 ( 1.4%)
                                        Process.clock_gettime:   221,588 ( 1.2%)
                                                    Integer#>:   219,718 ( 1.2%)
                                                String#match?:   216,903 ( 1.2%)
                                              String#downcase:   213,108 ( 1.2%)
                                                   Integer#<=:   202,617 ( 1.1%)
    Top-20 calls to C functions from JIT code (80.3% of total 130,255,689):
                                 rb_vm_opt_send_without_block: 28,329,698 (21.7%)
                                                 rb_hash_aref:  8,992,191 ( 6.9%)
                                              rb_vm_env_write:  8,526,087 ( 6.5%)
                                                   rb_vm_send:  8,337,448 ( 6.4%)
                         rb_zjit_writebarrier_check_immediate:  7,809,310 ( 6.0%)
                                            rb_obj_is_kind_of:  6,098,929 ( 4.7%)
                                    rb_vm_getinstancevariable:  5,783,055 ( 4.4%)
                                            rb_vm_invokesuper:  5,038,443 ( 3.9%)
                               rb_ivar_get_at_no_ractor_check:  4,762,093 ( 3.7%)
                                                 rb_ary_entry:  4,283,966 ( 3.3%)
                                                 rb_hash_aset:  2,429,862 ( 1.9%)
                                    rb_vm_setinstancevariable:  2,343,571 ( 1.8%)
                                   rb_vm_opt_getconstant_path:  2,284,810 ( 1.8%)
                                                   Hash#fetch:  1,778,515 ( 1.4%)
                                                        fetch:  1,405,591 ( 1.1%)
                                            rb_vm_invokeblock:  1,381,332 ( 1.1%)
                                            rb_str_buf_append:  1,362,272 ( 1.0%)
                                    rb_ec_ary_new_from_values:  1,324,997 ( 1.0%)
                                   rb_class_allocate_instance:  1,288,936 ( 1.0%)
                                        rb_hash_new_with_size:    998,628 ( 0.8%)
    Top-2 not optimized method types for send (100.0% of total 4,896,274):
      iseq: 4,893,452 (99.9%)
      null:     2,822 ( 0.1%)
    Top-4 not optimized method types for send_without_block (100.0% of total 782,296):
            optimized_send: 479,562 (61.3%)
            optimized_call: 256,609 (32.8%)
                      null:  41,967 ( 5.4%)
      optimized_block_call:   4,158 ( 0.5%)
    Top-4 instructions with uncategorized fallback reason (100.0% of total 7,250,555):
                 invokesuper: 5,038,443 (69.5%)
                 invokeblock: 1,381,332 (19.1%)
                 sendforward:   798,924 (11.0%)
      opt_send_without_block:    31,856 ( 0.4%)
    Top-18 send fallback reasons (100.0% of total 43,885,845):
                              send_without_block_polymorphic: 18,533,639 (42.2%)
                                               uncategorized:  7,250,555 (16.5%)
                              send_not_optimized_method_type:  4,896,274 (11.2%)
                              send_without_block_no_profiles:  4,741,871 (10.8%)
                                            send_no_profiles:  2,865,577 ( 6.5%)
                                one_or_more_complex_arg_pass:  2,825,240 ( 6.4%)
      send_without_block_not_optimized_method_type_optimized:    740,329 ( 1.7%)
                              send_without_block_megamorphic:    709,818 ( 1.6%)
                                            send_polymorphic:    541,186 ( 1.2%)
            send_without_block_not_optimized_need_permission:    382,622 ( 0.9%)
                                       too_many_args_for_lir:    173,244 ( 0.4%)
                                         argc_param_mismatch:     50,382 ( 0.1%)
                send_without_block_not_optimized_method_type:     41,967 ( 0.1%)
                     send_without_block_cfunc_array_variadic:     36,302 ( 0.1%)
                                    obj_to_string_not_string:     34,169 ( 0.1%)
                  send_without_block_direct_keyword_mismatch:     32,436 ( 0.1%)
                                            send_megamorphic:     28,613 ( 0.1%)
                              ccall_with_frame_too_many_args:      1,621 ( 0.0%)
    Top-4 setivar fallback reasons (100.0% of total 2,343,571):
                not_monomorphic: 2,120,856 (90.5%)
                   not_t_object:   125,163 ( 5.3%)
                    too_complex:    97,531 ( 4.2%)
      new_shape_needs_extension:        21 ( 0.0%)
    Top-2 getivar fallback reasons (100.0% of total 5,908,168):
      not_monomorphic: 5,658,909 (95.8%)
          too_complex:   249,259 ( 4.2%)
    Top-3 definedivar fallback reasons (100.0% of total 405,079):
      not_monomorphic: 397,150 (98.0%)
          too_complex:   5,122 ( 1.3%)
         not_t_object:   2,807 ( 0.7%)
    Top-6 invokeblock handler (100.0% of total 1,381,332):
       monomorphic_iseq: 685,359 (49.6%)
            polymorphic: 521,992 (37.8%)
      monomorphic_other: 104,640 ( 7.6%)
      monomorphic_ifunc:  55,505 ( 4.0%)
            no_profiles:   9,164 ( 0.7%)
            megamorphic:   4,672 ( 0.3%)
    Top-9 popular complex argument-parameter features not optimized (100.0% of total 3,097,538):
           param_kw_opt: 1,333,367 (43.0%)
            param_block:   632,885 (20.4%)
      param_forwardable:   600,601 (19.4%)
             param_rest:   329,020 (10.6%)
           param_kwrest:   119,971 ( 3.9%)
        caller_kw_splat:    39,001 ( 1.3%)
           caller_splat:    36,785 ( 1.2%)
        caller_blockarg:     5,798 ( 0.2%)
           caller_kwarg:       110 ( 0.0%)
    Top-1 compile error reasons (100.0% of total 186,900):
      exception_handler: 186,900 (100.0%)
    Top-7 unhandled YARV insns (100.0% of total 186,598):
           getblockparam: 99,414 (53.3%)
      invokesuperforward: 81,667 (43.8%)
           setblockparam:  2,837 ( 1.5%)
             getconstant:  1,537 ( 0.8%)
              checkmatch:    616 ( 0.3%)
             expandarray:    360 ( 0.2%)
                    once:    167 ( 0.1%)
    Top-3 unhandled HIR insns (100.0% of total 236,962):
              throw: 198,474 (83.8%)
      invokebuiltin:  35,767 (15.1%)
          array_max:   2,721 ( 1.1%)
    Top-19 side exit reasons (100.0% of total 15,427,184):
                       guard_type_failure: 6,865,696 (44.5%)
                      guard_shape_failure: 6,779,586 (43.9%)
      block_param_proxy_not_iseq_or_ifunc: 1,030,319 ( 6.7%)
                       unhandled_hir_insn:   236,962 ( 1.5%)
                            compile_error:   186,900 ( 1.2%)
                      unhandled_yarv_insn:   186,598 ( 1.2%)
                     fixnum_mult_overflow:    50,739 ( 0.3%)
               block_param_proxy_modified:    28,119 ( 0.2%)
            patchpoint_no_singleton_class:    14,903 ( 0.1%)
             unhandled_newarray_send_pack:    14,481 ( 0.1%)
                   fixnum_lshift_overflow:    10,085 ( 0.1%)
         patchpoint_stable_constant_names:     9,198 ( 0.1%)
                  patchpoint_no_ep_escape:     7,815 ( 0.1%)
                      expandarray_failure:     4,533 ( 0.0%)
              patchpoint_method_redefined:       662 ( 0.0%)
                   obj_to_string_fallback:       277 ( 0.0%)
                       guard_less_failure:       163 ( 0.0%)
                                interrupt:       128 ( 0.0%)
                 guard_greater_eq_failure:        20 ( 0.0%)
                                 send_count: 151,233,937
                         dynamic_send_count:  43,885,845 (29.0%)
                       optimized_send_count: 107,348,092 (71.0%)
                      dynamic_setivar_count:   2,343,571 ( 1.5%)
                      dynamic_getivar_count:   5,908,168 ( 3.9%)
                  dynamic_definedivar_count:     405,079 ( 0.3%)
                  iseq_optimized_send_count:  37,324,023 (24.7%)
          inline_cfunc_optimized_send_count:  46,056,028 (30.5%)
           inline_iseq_optimized_send_count:   3,756,875 ( 2.5%)
    non_variadic_cfunc_optimized_send_count:  11,618,909 ( 7.7%)
        variadic_cfunc_optimized_send_count:   8,592,257 ( 5.7%)
    compiled_iseq_count:                              5,289
    failed_iseq_count:                                    0
    compile_time:                                   1,664ms
    profile_time:                                      13ms
    gc_time:                                           20ms
    invalidation_time:                                479ms
    vm_write_pc_count:                          127,571,422
    vm_write_sp_count:                          127,571,422
    vm_write_locals_count:                      122,781,971
    vm_write_stack_count:                       122,781,971
    vm_write_to_parent_iseq_local_count:            689,945
    vm_read_from_parent_iseq_local_count:        14,721,820
    guard_type_count:                           167,633,896
    guard_type_exit_ratio:                             4.1%
    guard_shape_count:                                    0
    code_region_bytes:                           38,912,000
    zjit_alloc_bytes:                            40,542,102
    total_mem_bytes:                             79,454,102
    side_exit_count:                             15,427,184
    total_insn_count:                           927,373,567
    vm_insn_count:                              156,976,359
    zjit_insn_count:                            770,397,208
    ratio_in_zjit:                                    83.1%
    ```

    </details>

    <details>

    <summary>after patch</summary>

    ```
    ***ZJIT: Printing ZJIT statistics on exit***
    Top-20 not inlined C methods (55.0% of total 18,012,630):
                                                   Hash#fetch: 3,184,101 (17.7%)
                                                Regexp#match?:   707,150 ( 3.9%)
                                                    Hash#key?:   689,871 ( 3.8%)
                                                  String#sub!:   489,841 ( 2.7%)
                                               Array#include?:   470,648 ( 2.6%)
                                                 Set#include?:   397,520 ( 2.2%)
                                                    String#<<:   396,279 ( 2.2%)
                                           String#start_with?:   382,538 ( 2.1%)
                                                   Kernel#dup:   352,617 ( 2.0%)
                                                   Array#any?:   350,454 ( 1.9%)
                                                  Hash#delete:   331,802 ( 1.8%)
                                                   String.new:   307,248 ( 1.7%)
                                                  Integer#===:   262,336 ( 1.5%)
                                             Symbol#end_with?:   255,540 ( 1.4%)
                                                 Kernel#is_a?:   247,292 ( 1.4%)
                                        Process.clock_gettime:   221,588 ( 1.2%)
                                                    Integer#>:   219,718 ( 1.2%)
                                                String#match?:   216,905 ( 1.2%)
                                              String#downcase:   213,107 ( 1.2%)
                                                   Integer#<=:   202,617 ( 1.1%)
    Top-20 calls to C functions from JIT code (80.1% of total 130,218,934):
                                 rb_vm_opt_send_without_block: 28,073,153 (21.6%)
                                                 rb_hash_aref:  8,992,167 ( 6.9%)
                                              rb_vm_env_write:  8,526,089 ( 6.5%)
                                                   rb_vm_send:  8,337,453 ( 6.4%)
                         rb_zjit_writebarrier_check_immediate:  7,786,426 ( 6.0%)
                                            rb_obj_is_kind_of:  6,098,927 ( 4.7%)
                                    rb_vm_getinstancevariable:  5,783,053 ( 4.4%)
                                            rb_vm_invokesuper:  5,038,444 ( 3.9%)
                               rb_ivar_get_at_no_ractor_check:  4,762,093 ( 3.7%)
                                                 rb_ary_entry:  4,283,965 ( 3.3%)
                                                 rb_hash_aset:  2,429,864 ( 1.9%)
                                    rb_vm_setinstancevariable:  2,343,573 ( 1.8%)
                                   rb_vm_opt_getconstant_path:  2,284,809 ( 1.8%)
                                                   Hash#fetch:  1,778,510 ( 1.4%)
                                                        fetch:  1,405,591 ( 1.1%)
                                            rb_vm_invokeblock:  1,381,329 ( 1.1%)
                                            rb_str_buf_append:  1,362,272 ( 1.0%)
                                    rb_ec_ary_new_from_values:  1,325,005 ( 1.0%)
                                   rb_class_allocate_instance:  1,288,944 ( 1.0%)
                                        rb_hash_new_with_size:    998,629 ( 0.8%)
    Top-2 not optimized method types for send (100.0% of total 4,896,276):
      iseq: 4,893,454 (99.9%)
      null:     2,822 ( 0.1%)
    Top-3 not optimized method types for send_without_block (100.0% of total 525,687):
            optimized_send: 479,562 (91.2%)
                      null:  41,967 ( 8.0%)
      optimized_block_call:   4,158 ( 0.8%)
    Top-4 instructions with uncategorized fallback reason (100.0% of total 7,250,556):
                 invokesuper: 5,038,444 (69.5%)
                 invokeblock: 1,381,329 (19.1%)
                 sendforward:   798,924 (11.0%)
      opt_send_without_block:    31,859 ( 0.4%)
    Top-18 send fallback reasons (100.0% of total 43,629,303):
                              send_without_block_polymorphic: 18,533,669 (42.5%)
                                               uncategorized:  7,250,556 (16.6%)
                              send_not_optimized_method_type:  4,896,276 (11.2%)
                              send_without_block_no_profiles:  4,741,899 (10.9%)
                                            send_no_profiles:  2,865,579 ( 6.6%)
                                one_or_more_complex_arg_pass:  2,825,242 ( 6.5%)
                              send_without_block_megamorphic:    709,818 ( 1.6%)
                                            send_polymorphic:    541,187 ( 1.2%)
      send_without_block_not_optimized_method_type_optimized:    483,720 ( 1.1%)
            send_without_block_not_optimized_need_permission:    382,623 ( 0.9%)
                                       too_many_args_for_lir:    173,244 ( 0.4%)
                                         argc_param_mismatch:     50,382 ( 0.1%)
                send_without_block_not_optimized_method_type:     41,967 ( 0.1%)
                     send_without_block_cfunc_array_variadic:     36,302 ( 0.1%)
                                    obj_to_string_not_string:     34,169 ( 0.1%)
                  send_without_block_direct_keyword_mismatch:     32,436 ( 0.1%)
                                            send_megamorphic:     28,613 ( 0.1%)
                              ccall_with_frame_too_many_args:      1,621 ( 0.0%)
    Top-4 setivar fallback reasons (100.0% of total 2,343,573):
                not_monomorphic: 2,120,858 (90.5%)
                   not_t_object:   125,163 ( 5.3%)
                    too_complex:    97,531 ( 4.2%)
      new_shape_needs_extension:        21 ( 0.0%)
    Top-2 getivar fallback reasons (100.0% of total 5,908,165):
      not_monomorphic: 5,658,912 (95.8%)
          too_complex:   249,253 ( 4.2%)
    Top-3 definedivar fallback reasons (100.0% of total 405,079):
      not_monomorphic: 397,150 (98.0%)
          too_complex:   5,122 ( 1.3%)
         not_t_object:   2,807 ( 0.7%)
    Top-6 invokeblock handler (100.0% of total 1,381,329):
       monomorphic_iseq: 685,363 (49.6%)
            polymorphic: 521,984 (37.8%)
      monomorphic_other: 104,640 ( 7.6%)
      monomorphic_ifunc:  55,505 ( 4.0%)
            no_profiles:   9,164 ( 0.7%)
            megamorphic:   4,673 ( 0.3%)
    Top-9 popular complex argument-parameter features not optimized (100.0% of total 3,094,719):
           param_kw_opt: 1,333,367 (43.1%)
            param_block:   632,886 (20.5%)
      param_forwardable:   600,605 (19.4%)
             param_rest:   329,019 (10.6%)
           param_kwrest:   119,971 ( 3.9%)
        caller_kw_splat:    39,001 ( 1.3%)
           caller_splat:    33,962 ( 1.1%)
        caller_blockarg:     5,798 ( 0.2%)
           caller_kwarg:       110 ( 0.0%)
    Top-1 compile error reasons (100.0% of total 186,917):
      exception_handler: 186,917 (100.0%)
    Top-7 unhandled YARV insns (100.0% of total 186,598):
           getblockparam: 99,414 (53.3%)
      invokesuperforward: 81,667 (43.8%)
           setblockparam:  2,837 ( 1.5%)
             getconstant:  1,537 ( 0.8%)
              checkmatch:    616 ( 0.3%)
             expandarray:    360 ( 0.2%)
                    once:    167 ( 0.1%)
    Top-3 unhandled HIR insns (100.0% of total 236,969):
              throw: 198,475 (83.8%)
      invokebuiltin:  35,773 (15.1%)
          array_max:   2,721 ( 1.1%)
    Top-19 side exit reasons (100.0% of total 15,450,102):
                       guard_type_failure: 6,888,596 (44.6%)
                      guard_shape_failure: 6,779,586 (43.9%)
      block_param_proxy_not_iseq_or_ifunc: 1,030,319 ( 6.7%)
                       unhandled_hir_insn:   236,969 ( 1.5%)
                            compile_error:   186,917 ( 1.2%)
                      unhandled_yarv_insn:   186,598 ( 1.2%)
                     fixnum_mult_overflow:    50,739 ( 0.3%)
               block_param_proxy_modified:    28,119 ( 0.2%)
            patchpoint_no_singleton_class:    14,903 ( 0.1%)
             unhandled_newarray_send_pack:    14,481 ( 0.1%)
                   fixnum_lshift_overflow:    10,085 ( 0.1%)
         patchpoint_stable_constant_names:     9,198 ( 0.1%)
                  patchpoint_no_ep_escape:     7,815 ( 0.1%)
                      expandarray_failure:     4,533 ( 0.0%)
              patchpoint_method_redefined:       662 ( 0.0%)
                   obj_to_string_fallback:       277 ( 0.0%)
                       guard_less_failure:       163 ( 0.0%)
                                interrupt:       122 ( 0.0%)
                 guard_greater_eq_failure:        20 ( 0.0%)
                                 send_count: 150,986,368
                         dynamic_send_count:  43,629,303 (28.9%)
                       optimized_send_count: 107,357,065 (71.1%)
                      dynamic_setivar_count:   2,343,573 ( 1.6%)
                      dynamic_getivar_count:   5,908,165 ( 3.9%)
                  dynamic_definedivar_count:     405,079 ( 0.3%)
                  iseq_optimized_send_count:  37,324,039 (24.7%)
          inline_cfunc_optimized_send_count:  46,056,046 (30.5%)
           inline_iseq_optimized_send_count:   3,756,881 ( 2.5%)
    non_variadic_cfunc_optimized_send_count:  11,618,958 ( 7.7%)
        variadic_cfunc_optimized_send_count:   8,601,141 ( 5.7%)
    compiled_iseq_count:                              5,289
    failed_iseq_count:                                    0
    compile_time:                                   1,700ms
    profile_time:                                      13ms
    gc_time:                                           21ms
    invalidation_time:                                519ms
    vm_write_pc_count:                          127,557,549
    vm_write_sp_count:                          127,557,549
    vm_write_locals_count:                      122,768,084
    vm_write_stack_count:                       122,768,084
    vm_write_to_parent_iseq_local_count:            689,953
    vm_read_from_parent_iseq_local_count:        14,730,705
    guard_type_count:                           167,853,730
    guard_type_exit_ratio:                             4.1%
    guard_shape_count:                                    0
    code_region_bytes:                           38,928,384
    zjit_alloc_bytes:                            41,103,415
    total_mem_bytes:                             80,031,799
    side_exit_count:                             15,450,102
    total_insn_count:                           927,432,364
    vm_insn_count:                              157,182,251
    zjit_insn_count:                            770,250,113
    ratio_in_zjit:                                    83.1%
    ```

    </details>

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 8a586af33b59cae93a1bee13c39e87dd087a4a6b
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-16 11:02:05 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-17 07:02:03 +0900

    Don't force major GC when there are allocatable slots

    [Bug #21838]

    When we have allocatable slots, we can grow the heap instead of forcing
    a major GC. This prevents major GC to be ran very often in certain situations.
    See the ticket for more details.

    On ruby-bench, we can see that this patch doesn't cause any significant
    regressions:

        --------------  -----------  ----------  ---------  -----------  ----------  ---------  --------------  -------------
        bench           master (ms)  stddev (%)  RSS (MiB)  branch (ms)  stddev (%)  RSS (MiB)  branch 1st itr  master/branch
        activerecord    148.2        0.3         59.2       150.0        0.8         69.7       1.015           0.988
        chunky-png      435.2        0.3         72.9       438.8        0.1         66.7       0.993           0.992
        erubi-rails     733.8        1.2         118.7      704.8        0.2         98.3       1.077           1.041
        hexapdf         1400.4       1.1         247.0      1405.0       0.9         223.7      0.986           0.997
        liquid-c        32.5         3.3         32.8       32.5         2.1         30.7       1.042           0.999
        liquid-compile  31.0         1.7         35.1       33.4         3.9         32.8       0.938           0.928
        liquid-render   84.7         0.4         30.8       86.3         0.4         30.8       0.981           0.982
        lobsters        594.7        0.6         310.5      596.6        0.4         306.0      1.057           0.997
        mail            75.6         2.8         53.3       76.9         0.7         53.2       0.968           0.982
        psych-load      1122.8       1.2         29.2       1145.1       0.4         31.7       0.964           0.981
        railsbench      1244.7       0.3         115.5      1254.8       1.1         115.2      0.939           0.992
        rubocop         103.7        0.5         94.1       104.3        0.5         92.4       0.985           0.994
        ruby-lsp        88.3         0.6         78.5       88.5         1.2         77.9       0.992           0.997
        sequel          26.9         0.9         33.6       28.3         1.4         32.1       0.954           0.952
        shipit          1119.3       1.5         171.4      1075.7       2.1         162.5      1.873           1.040
        --------------  -----------  ----------  ---------  -----------  ----------  ---------  --------------  -------------

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15882

commit 1f3c52dc155fb7fbc42fc8e146924091ba1dfa20
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-17 05:15:05 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-17 06:44:38 +0900

    Fix rb_interned_str: create strings with BINARY (akak ASCII_8BIT) encoding

    [Bug #21842]

    The documentation always stated as much, and it's consistent with the
    rb_str_* family of functions.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15888

commit c56ce8a6c19334265b1a4a64876fffff9b98b2b1
  Author:     John Hawthorn <john@hawthorn.email>
  AuthorDate: 2026-01-17 05:01:15 +0900
  Commit:     John Hawthorn <john@hawthorn.email>
  CommitDate: 2026-01-17 05:46:20 +0900

    Remove objspace->flags.has_newobj_hook

    We aren't using this anymore and the hook is called in gc.c

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15887

commit 87147ba5e983f554fb56f859af0d858d5eff0896
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-16 18:47:18 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-17 05:19:26 +0900

    [ruby/prism] Make the ripper shim work with rdoc

    The filter class is a 1:1 copy of ruby.

    rdoc has 32 test failures. It seems to expect `on_sp` in some cases to render code as written.

    https://github.com/ruby/prism/commit/74bb12c825

commit 1c7e19f961a3e9051cf728deeea196d4d72a89cd
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-17 04:37:42 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-17 05:11:17 +0900

    rb_free_tmp_buffer: use ruby_sized_xfree

    We know the buffer length, we might as well feed that information
    back to the GC.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15886

commit 3164d4e8a26b591c6e22a0deeb750b6f21db1345
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-17 02:43:08 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-17 02:52:54 +0900

    [ruby/json] Extract json_fast_memcpy16 for readability

    https://github.com/ruby/json/commit/1b276c8623

commit 456ef9140acbdf643c5537ee0f5d67429f2332b6
  Author:     Scott Myron <samyron@gmail.com>
  AuthorDate: 2026-01-16 10:12:41 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-17 02:52:54 +0900

    [ruby/json] Use __builtin_memcpy, if available, to copy overlapping byte ranges in copy_remaining_bytes to avoid a branch to MEMCPY. Additionally use a space as padding byte instead of an 'X' so it can be represented diretly on AArch64 with a single instruction.

    https://github.com/ruby/json/commit/643ee11fed

commit bc6c895d7bce16871321fcb22147a2d35179caaf
  Author:     Jacob <jacob.denbeaux@shopify.com>
  AuthorDate: 2026-01-17 02:08:20 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-17 02:08:20 +0900

    ZJIT: Create HIR effect system (#15359)

    **Progress**
    I've added a new directory, `zjit/src/hir_effect`. It follows the same structure as `zjit/src/hir_type` and includes:
    - a ruby script to generate a rust file containing a bitset of effects we want to track
    - a modified `hir.rs` to include an `effects_of` function that catalogs effects for each HIR instruction, similar to `infer_type`. Right now these effects are not specialized, all instructions currently return the top of the lattice (any effect)
    - a module file for effects at `zjit/src/hir_effect/mod.rs` that again, mirrors `zjit/src/hir_type/mod.rs`. This contains a lot of helper functions and lattice operations like union and intersection

    **Design Idea**
    The effect system is bitset-based rather than range-based. This is the first kind of effect system described in [Max's blog post](https://bernsteinbear.com/blog/compiler-effects/).
    Practically, having effects defined for each HIR instruction should allow us to have better generalization than the implicit effect system we have for c functions that we annotation as elidable, leaf, etc. Additionally, this could allow us to reason about the effects of multiple HIR instructions unioned together, something I don't believe currently exists.

    **Practical Goals**
    This PR replaces `has_effects` with a new effects-based `is_elidable` function. This has no behavior change to the JIT, but will make it easier to reason about effects of basic blocks and CCalls with the new design. We may be able to accomplish other quality of life improvements, such as consolidation of `nogc`, `leaf`, and other annotations.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 91744cd2025b3c18cd48b9ac3eec8412c932fac6
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-17 00:15:20 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-17 00:15:20 +0900

    Include abi.h in the dependency of rubyspec-capiext

commit 074a23ab77a94a5388958c573ab33d5ea5a46ecc
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-16 19:52:39 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-16 21:07:41 +0900

    [ruby/prism] Add `Ripper.tokenize` to translation layer

    It's public API and trivial to implement.

    https://github.com/ruby/prism/commit/e77545f8b5

commit f872901bb263e01768ac64e6d063377c3b633e27
  Author:     Andrii Furmanets <furmanets.andriy@gmail.com>
  AuthorDate: 2026-01-16 19:52:16 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-16 19:52:16 +0900

    MatchData: Avoid large stack allocations in MatchData (GH-15872)

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15872

    Merged-By: nobu <nobu@ruby-lang.org>

commit 16cd9daa39c5488a7ee3f60ebc6f5b3cf1ee50e4
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-16 18:27:17 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-16 18:27:17 +0900

    Rust interface is out of our scope

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15883

commit 67d4ceb5255310feefac473265ef713214554708
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-16 16:52:32 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-16 16:52:32 +0900

    Expand `rb_data_type_t::reserved` for future use

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15883

commit f7d3f675fe9f5f9b4667e0f2a77db6349d9da4ae
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-16 11:12:32 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-16 11:12:32 +0900

    Win32: refine handing of missing-baseruby failure

    `exit` in `cmd.exe` ignores non-option, non-digits argument, and exits with the current %ERRORLEVEL%.

commit 8c39d8d34313550cb72d491ad2a834c772b44734
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-16 11:08:53 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-16 11:08:53 +0900

    Win32: fix baseruby at reconfig

    Get rid of the built `ruby.exe` in the current directory.

commit 81420d6e13b99fae5f111b8172fe156b42bf8af3
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-16 11:01:27 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-16 11:01:27 +0900

    Win32: split `-basic-vars-` step

commit 5d2fd5088da68cd5dc71d2343c88e5451d29ff17
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-15 07:56:06 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-16 07:57:27 +0900

    Fix duplicate static assert names in imemo.h

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15857

commit f7ae32ed3b5b93247f9f62a58e3dd129098d0b27
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-15 07:09:26 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-16 07:57:27 +0900

    Pin ID symbols

    Symbols with a corresponding ID should be pinned because they can be used
    by things that don't support compaction.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15857

commit 6e480e6714f0e63bc065f4d931f76e087131c743
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-13 11:20:12 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-16 07:57:27 +0900

    Allow symbols to move in compaction

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15857

commit c34c7def5a13bcc60b09c1fc11267a6fdca700ba
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-16 05:47:26 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-16 06:15:34 +0900

    [ruby/prism] Fix locations for invalid syntax when using `expect1_opening`

    Followup to https://github.com/ruby/prism/pull/3827

    It sets the start to the opening but it should instead just
    continue on as usual.
    Fixes https://github.com/ruby/prism/issues/3851

    Notice how the AST actually contains "123" in both the body and end keyword.

    https://github.com/ruby/prism/commit/8f69c5af08

commit 15939e3c30b9ab5e8623a8f78e4249b0e935bf3f
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-14 03:35:21 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-16 06:03:55 +0900

    [ruby/prism] Make irb work with the ripper shim

    This is everything that `irb` uses. It works in their test-suite, but there are 20 failures when using the shim that I haven't looked into at all.

    `parse` is not used by `irb`. `scan` is, and it's basically `parse` but also including errors. `irb` doesn't seem to care about the errors, so I didn't implement that.

    https://github.com/ruby/prism/commit/2c5826b39f

commit ce390f19954edda3874ed62768440953b40be0da
  Author:     nozomemein <b8yukifsukeo999n@gmail.com>
  AuthorDate: 2026-01-15 07:18:31 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-16 02:00:53 +0900

    ZJIT: Remove redundant unboxing

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15833

commit 844f072ce16235c0f10df73bb79d40cc01223c28
  Author:     nozomemein <b8yukifsukeo999n@gmail.com>
  AuthorDate: 2026-01-14 15:04:46 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-16 02:00:53 +0900

    ZJIT: Inline ArrayAref

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15833

commit 256c806a1d7adfeeec1b97eecc66448122fdecfb
  Author:     nozomemein <b8yukifsukeo999n@gmail.com>
  AuthorDate: 2026-01-10 09:13:49 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-16 02:00:53 +0900

    ZJIT: Write the result of UnboxFixnum HIR as type spec so that we can make use of it later (e.g. fold_constants for ArrayAref)

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15833

commit 065db7cf61cfb69d869f4b403b49b1efc314eead
  Author:     nozomemein <b8yukifsukeo999n@gmail.com>
  AuthorDate: 2026-01-09 09:56:11 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-16 02:00:53 +0900

    ZJIT: Rename ArrayArefFixnum -> ArrayAref

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15833

commit 11edc286d837f66b37433e7d51c8b8f500e1be84
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-15 20:32:20 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-15 20:32:20 +0900

    Make `Array#map` and `Array#select` more tolerant

    Only when YJIT is enabled, the redefinition of `Array#<<` affects
    these methods.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15875

commit 6afac93c5c7178c4d836e0ec2b4b3092373ca121
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-15 16:52:01 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-15 17:20:34 +0900

    Restore irb to warning target

    Users should add `irb` to their Gemfile.
    `Gem::BUNDLED_GEMS.force_activate 'irb'` is workaround for short term.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15374

commit ca9c61800bce426ea9c4b15911a4f639370f3ec4
  Author:     Daisuke Aritomo <osyoyu@osyoyu.com>
  AuthorDate: 2025-12-03 03:41:21 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-15 17:20:34 +0900

    Suppress bundled gem warning on `binding.irb'

    This patch silences the "this won't work in the next version of Ruby"
    warning displayed when irb is autoloaded via `binding.irb`.

        main.rb:1: warning: irb used to be loaded from the standard library, but is not part of the default gems since Ruby 4.0.0.
        You can add irb to your Gemfile or gemspec to fix this error.
        /.../irb.rb:9: warning: reline used to be loaded from the standard library, but is not part of the default gems since Ruby 4.0.0.
        You can add reline to your Gemfile or gemspec to fix this error.

        From: main.rb @ line 1 :

         => 1: binding.irb

        /.../input-method.rb:284: warning: rdoc used to be loaded from the standard library, but is not part of the default gems since Ruby 4.0.0.
        You can add rdoc to your Gemfile or gemspec to fix this error.

    This warning is incorrect and misleading: users should not need to
    include irb (and its dependencies) to their Gemfiles to use
    `binding.irb`, even in future versions of Ruby. It is agreed that the
    runtime takes care of that.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15374

commit 2d79cc9bfc3fdd27e3de9d540c37d0367ed16d1e
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-15 15:29:22 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-15 16:16:16 +0900

    Added example for bundle/inline

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15373

commit a28c8561835038d564a418c6d5dbd7cabfbcad4f
  Author:     Daisuke Aritomo <osyoyu@osyoyu.com>
  AuthorDate: 2025-12-04 21:02:36 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-15 16:16:16 +0900

    Add comments

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15373

commit 270c7fcec126d9de07488205cfa11b6ab37bc191
  Author:     Daisuke Aritomo <osyoyu@osyoyu.com>
  AuthorDate: 2025-12-04 20:56:31 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-15 16:16:16 +0900

    Fake BUNDLE_GEMFILE and BUNDLE_LOCKFILE to let checks pass

    Bundler::Runtime#setup requires a real existing lockfile (see
    Bundler::SharedHelpers#default_lockfile).

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15373

commit 943b0859498c5a49242e6f8563b1f518599fff0f
  Author:     Daisuke Aritomo <osyoyu@osyoyu.com>
  AuthorDate: 2025-12-03 02:25:46 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-15 16:16:16 +0900

    [Bug #21723] Let `binding.irb` properly load irb by fixing force_activate()

    This patch fixes a problem where `binding.irb` (= force_activate('irb'))
    fails under `bundle exec` when the Gemfile does not contain `irb` and
    does contain a gem which is (1) not installed in GEM_HOME (2) sourced
    using `path:`/`git:`.

    The original approach constructing a temporary definition fails since
    it does not set the equalivent of `path:`/`git:`.

    Always reconstructing a definition from a Gemfile and applying lockfile
    constraints should be a more robust approach.

    [Bug #21723]

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15373

commit de17b84a3d557007bbaf00b4f17d843ed854ee7a
  Author:     git[bot] <svn-admin@ruby-lang.org>
  AuthorDate: 2026-01-15 15:55:51 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-15 15:55:51 +0900

    Update bundled gems list as of 2026-01-15

commit 886202bac80130ec6f2f3f67f306f9d5f860fb01
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-15 12:30:29 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-15 12:30:29 +0900

    Count assertions in child processes

    Fix up GH-15785.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15874

commit 189bb64af8951d79bd812f2dca18a0104339b56e
  Author:     OKURA Masafumi <masafumi.o1988@gmail.com>
  AuthorDate: 2023-12-14 17:52:27 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-15 11:36:18 +0900

    [ci-skip] Shorter example for `Module#instance_method`

    The previous example code was too complex and includes extra logics
    that's not relevant to its main usage: `bind`.
    The new example code focuses on `bind_call` so that readers can
    understand how it works more easily.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/9233

commit 806031d2ce9cb26e146ce47f6811ca038f1ffe27
  Author:     Lars Kanis <lars.kanis@sincnovation.com>
  AuthorDate: 2024-12-18 23:13:18 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-15 11:14:54 +0900

    Windows: Remove workaround for LLVM windres

    It was introduced as part of the Arm64-on-Windows patch:
      https://github.com/ruby/ruby/pull/8995

    But a few days later it was fixed on the LLVM side for llvm-18 and backported to MSYS2:
      https://github.com/msys2/MINGW-packages/pull/19157#issuecomment-1825285063

    Now this code is only unnecessary complexity.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/12388

commit 4a21b83693fdc0e976da209047ba286b2f4084e5
  Author:     Kevin Menard <kevin@nirvdrum.com>
  AuthorDate: 2026-01-15 09:10:06 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-15 09:10:06 +0900

    ZJIT: Optimize common `invokesuper` cases (#15816)

    * ZJIT: Profile `invokesuper` instructions

    * ZJIT: Introduce the `InvokeSuperDirect` HIR instruction

    The new instruction is an optimized version of `InvokeSuper` when we know the `super` target is an ISEQ.

    * ZJIT: Expand definition of unspecializable to more complex cases

    * ZJIT: Ensure `invokesuper` optimization works when the inheritance hierarchy is modified

    * ZJIT: Simplify `invokesuper` specialization to most common case

    Looking at ruby-bench, most `super` calls don't pass a block, which means we can use the already optimized `SendWithoutBlockDirect`.

    * ZJIT: Track `super` method entries directly to avoid GC issues

    Because the method entry isn't typed as a `VALUE`, we set up barriers on its `VALUE` fields. But, that was insufficient as the method entry itself could be collected in certain cases, resulting in dangling objects. Now we track the method entry as a `VALUE` and can more naturally mark it and its children.

    * ZJIT: Optimize `super` calls with simple argument forms

    * ZJIT: Report the reason why we can't optimize an `invokesuper` instance

    * ZJIT: Revise send fallback reasons for `super` calls

    * ZJIT: Assert `super` calls are `FCALL` and don't need visibily checks

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit cdb2b0eed50e1c837adeb85ef8978e533f056327
  Author:     Alan Wu <XrXr@users.noreply.github.com>
  AuthorDate: 2026-01-14 13:15:47 +0900
  Commit:     Alan Wu <XrXr@users.noreply.github.com>
  CommitDate: 2026-01-15 07:19:52 +0900

    YJIT: A64: In CPopAll, pop into the register before using MSR

    Or else we put garbage into the flags.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15831

commit 9f3225d0c5c64c4aac9fd196061f8cfd3f25f271
  Author:     Alan Wu <XrXr@users.noreply.github.com>
  AuthorDate: 2026-01-14 13:01:47 +0900
  Commit:     Alan Wu <XrXr@users.noreply.github.com>
  CommitDate: 2026-01-15 07:19:52 +0900

    YJIT: Properly preserve register mapping in cpush_all() and cpop_all()

    Previously, cpop_all() did not in fact restore the register mapping
    state since it was effectively doing a no-op
    `self.ctx.set_reg_mapping(self.ctx.get_reg_mapping())`. This desync in
    bookkeeping led to issues with the --yjit-dump-insns option because
    print_str() used to use cpush_all() and cpop_all().

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15831

commit 993046847931c6c26ca518dfaf9be6c23c34fc78
  Author:     Alan Wu <XrXr@users.noreply.github.com>
  AuthorDate: 2026-01-14 13:08:33 +0900
  Commit:     Alan Wu <XrXr@users.noreply.github.com>
  CommitDate: 2026-01-15 07:19:52 +0900

    YJIT: Fix --yjit-dump-insns by removing {cpush,cpop}_all() in printers

    cpush_all() and cpop_all() in theory enabled these `print_*` utilities
    to work in more spots, but with automatically spilling in asm.ccall(),
    the benefits are now limited. They also have a bug at the moment. Stop
    using them to dodge the bug.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15831

commit ac229890660d023c423869601d1ab404187824f4
  Author:     Alan Wu <XrXr@users.noreply.github.com>
  AuthorDate: 2026-01-09 12:42:38 +0900
  Commit:     Alan Wu <XrXr@users.noreply.github.com>
  CommitDate: 2026-01-15 07:19:52 +0900

    YJIT: Add crashing test for --yjit-dump-insns

    Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15831

commit 068713964a3949c9221da291e5e5f5167e692239
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-14 07:59:59 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-15 07:08:40 +0900

    [DOC] Add docs for WeakMap#inspect

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15866

commit b21edc13236320b6dd46cee1cc8907bd9ac2fb38
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-01-15 06:58:10 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-15 06:58:10 +0900

    ZJIT: Add assume_no_singleton_classes to avoid invalidation loops (#15871)

    Make sure we check if we have seen a singleton for this class before assuming we have not. Port the API from YJIT.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 1ca066059f3435485fbb8e51559fb9a4617cb2ed
  Author:     Jeff Zhang <jeff.j.zhang@shopify.com>
  AuthorDate: 2026-01-15 03:37:14 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-15 03:37:14 +0900

    ZJIT: Add Type::has_value method (#15867)

    Resolves TODO added in #15863 (See https://github.com/ruby/ruby/pull/15863#discussion_r2687769112)

    Adds a method `Type::has_value` for comparing value specialized types with a `Const`.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit a650c90fab6370a4abb9a1903186f350376aeb38
  Author:     Scott Myron <samyron@gmail.com>
  AuthorDate: 2026-01-14 13:17:16 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-14 16:59:32 +0900

    [ruby/json] initialize search.chunk_end to silence a warning about it being potentially uninitialized

    https://github.com/ruby/json/commit/73818b80c8

commit 24ad90d3e06ee9bcfc56d91358eb3d4792912a46
  Author:     Scott Myron <samyron@gmail.com>
  AuthorDate: 2026-01-13 09:57:09 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-14 16:59:32 +0900

    [ruby/json] use a conditional to select SIMD implementation rather than pointer

    https://github.com/ruby/json/commit/86a5cce405

commit 875dce2f5989c67b93e420d08939a74aa11d6199
  Author:     git[bot] <svn-admin@ruby-lang.org>
  AuthorDate: 2026-01-14 15:55:49 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-14 15:55:49 +0900

    Update bundled gems list as of 2026-01-13

commit 323ad363ca0b27da781c3bc8edb7b98b94520d83
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-14 15:21:54 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-14 15:22:04 +0900

    Switch filename of release and publish workflows

commit ab522c8876da582fe3d100ef398d59ffdd875130
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-14 14:47:06 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-14 14:47:06 +0900

    Stop to sync tsort changes

commit 3aa4aed0cb496b2cc1bf32cbda62093a89fa3a6d
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-14 14:44:14 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-14 14:44:14 +0900

    Skip Onigmo to check latest version

commit 6e61496531afea45ec53ebfd1a5db12635fc6ed9
  Author:     Chris Hasiński <krzysztof.hasinski@gmail.com>
  AuthorDate: 2026-01-14 10:41:00 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-14 10:41:00 +0900

    Pre-allocate IO.select result arrays based on input size (#15850)

    io.c: pre-allocate IO.select result arrays based on input size

    The ternary (rp?rb_ary_new():rb_ary_new2(0)) became pointless after
    commit a51f30c671 (Variable Width Allocation, Mar 2022) made both
    rb_ary_new() and rb_ary_new2(0) equivalent.

    Instead of just removing the dead code, improve on the original intent
    by pre-allocating based on the actual input array size. This avoids
    reallocations when many FDs are ready.

    Benchmark (100 ready FDs): ~8% improvement (5.59 -> 5.11 us/op)

  Notes:
    Merged-By: ioquatix <samuel@codeotaku.com>

commit 65a484578072f86586f250ae28712930da14cf53
  Author:     Jeff Zhang <jeff@39bytes.dev>
  AuthorDate: 2026-01-14 10:06:01 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-14 10:06:01 +0900

    ZJIT: Constant-fold LoadField/GuardBitEquals from known-frozen object

    Resolves https://github.com/Shopify/ruby/issues/915

    When we have `LoadField` with a `Shape` return type, we can fold it similar to the object case.
    `GuardBitEquals` can be removed when the argument is `Const` and the values are equal.

    The behaviors for loading instances variables from frozen/dynamic objects are already covered in existing tests so no new tests were added.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15863

    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 4f8478f50cd12e1144addcef0cbff35e9ee1e3db
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-01-14 08:27:22 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-14 08:27:45 +0900

    misc/.vscode/settings.json: Fix rust-analyzer warnings

commit 9f8505f06cd491e5635c40a9baa7d377bb258c5b
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-13 07:30:33 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-14 07:59:22 +0900

    [ruby/mmtk] Implement object movement support for finalizer table

    https://github.com/ruby/mmtk/commit/e5e2c1c347

commit 6f38d3de7f4f5073f3aed4a0f75f3e918d0a7f0c
  Author:     Max Bernstein <tekknolagi@gmail.com>
  AuthorDate: 2026-01-14 05:47:26 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-14 05:47:26 +0900

    ZJIT: Only print bold text in TTY (#15864)

    This is really irritating when piping to a file or pager.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 1a0b356d4069d4f8f0a0b805c2a15e61e4ab0d08
  Author:     Randy Stauner <randy@r4s6.net>
  AuthorDate: 2026-01-13 10:35:12 +0900
  Commit:     Aaron Patterson <aaron.patterson@gmail.com>
  CommitDate: 2026-01-14 04:18:19 +0900

    Add pushtoarray insn to fix segfault with forwarding + splat

    Example insns diff for `def x = [3]; def a(...) = b(*x, 2, 3, ...)`

         == disasm: #<ISeq:a@-e:1 (1,13)-(1,42)>
         local table (size: 1, argc: 0 [opts: 0, rest: -1, post: 0, block: -1, kw: -1@-1, kwrest: -1])
         [ 1] "..."@0
         0000 putself                                                          (   1)[Ca]
         0000 putself
         0000 opt_send_without_block                 <calldata!mid:x, argc:0, FCALL|VCALL|ARGS_SIMPLE>
         0000 splatarray                             true
         0000 putobject                              2
         0000 putobject                              3
        +0000 pushtoarray                            2
         0000 getlocal_WC_0                          "..."@0
         0000 sendforward                            <calldata!mid:b, argc:1, ARGS_SPLAT|ARGS_SPLAT_MUT|FCALL|FORWARDING>, nil
         0000 leave                                  [Re]

    This matches the insns produced by parse.y

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15855

commit 9db0a8c7db52856b1b048350360f262e8acd8c64
  Author:     tkling <tyler@tkling.lol>
  AuthorDate: 2026-01-14 00:10:08 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-01-14 00:36:15 +0900

    [DOC] zjit: small typo fix
    prerequists -> prerequisites

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15861

commit 6a0a3d605b9e42e3ea9eaab5a4d5deade60f8500
  Author:     Jun Aruga <jaruga@redhat.com>
  AuthorDate: 2026-01-13 22:59:58 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-14 00:22:09 +0900

    [ruby/openssl] Fix test_digest.rb in FIPS.

    https://github.com/ruby/openssl/commit/27a9a92309

commit b722d37f21ff0b148bdadb1b6aed6532f9beb9bf
  Author:     Edouard CHIN <chin.edouard@gmail.com>
  AuthorDate: 2026-01-12 23:09:36 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-13 20:12:00 +0900

    [ruby/rubygems] Add a missing "require 'etc'" statement:

    - Ref https://github.com/ruby/rubygems/pull/9171#discussion_r2658056892
    - Referencing the constant Etc may raise a `NameError` depending on
      whether other Rubygems/Bundler codepath have evaluated a prior
      "require 'etc'". This can be reproduced with this Gemfile:

      ```ruby
      source "https://rubygems.org"

      gem 'prism', github: "ruby/prism"
      ```

    https://github.com/ruby/rubygems/commit/5d435e6863

commit b7dbdfe23ad443ca796f471144be99c00d5ce583
  Author:     eileencodes <eileencodes@gmail.com>
  AuthorDate: 2025-12-17 03:28:06 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-13 16:12:47 +0900

    [ruby/rubygems] Refactor atomic file write

    This refactoring is based off the changes in
    test/rubygems/test_gem_remote_fetcher.rb. It no longer uses tempfile as
    a result.

    https://github.com/ruby/rubygems/commit/be6fd6550b

commit 60cf8598b2f0e9548fd30761276f655569d3daf9
  Author:     卜部昌平 <shyouhei@ruby-lang.org>
  AuthorDate: 2026-01-13 11:50:01 +0900
  Commit:     卜部昌平 <shyouhei@ruby-lang.org>
  CommitDate: 2026-01-13 11:53:43 +0900

    [nit] refactor rename inline functions

    Pretty sure commit 0f64da9672d88921439f6fdb306d16fece9b9c90 didn't
    intend to welcome extension libraries to use these functions.

commit ead107f0d7bd3cf1f30428b7907b9871a9a4542b
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-01-13 10:29:29 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-13 10:52:48 +0900

    [ruby/prism] Bump to v1.8.0

    https://github.com/ruby/prism/commit/9c12be6e6a

commit 910fcfad14e3e7464815afc14a5f2b7b87502ab9
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-13 10:34:38 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-13 10:34:38 +0900

    mk_builtin_loader: Count local variable definition lines

commit 5de4cc56086493689701e86aa0ccf6a4a4a87d75
  Author:     Chris Hasiński <krzysztof.hasinski@gmail.com>
  AuthorDate: 2026-01-11 22:12:07 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-01-13 10:19:44 +0900

    Fix regexp performance regression for patterns starting with s/k

    Commit 981ee02c7c ("Fix performance problem with /k/i and /s/i") was
    merged for Ruby 4.0 to enable partial Boyer-Moore optimization for
    patterns containing 's' or 'k' by using the prefix before those
    characters.

    However, when 's' or 'k' appears at the start of a pattern (no usable
    prefix), set_bm_skip() returns 0 and the code returned early without
    setting any optimization mode, leaving reg->optimize at
    ONIG_OPTIMIZE_NONE. This caused up to 30x slowdown for patterns like
    /slackware/i when matched against strings with non-ASCII characters.

    This patch keeps the improvement from 981ee02c7c for patterns with
    3+ char prefix, while fixing the regression by falling back to
    ONIG_OPTIMIZE_EXACT_IC with the full pattern when the usable prefix
    is less than 3 characters.

    Before: /\bslackware\b/i with non-ASCII string: 2.24 us/op
    After:  /\bslackware\b/i with non-ASCII string: 0.70 us/op (3.2x faster)

    [Bug #21824]

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15848

commit 09cd13114a7c30a7fecae1bda726a419cd1b4bf2
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-01-13 09:55:40 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-13 09:55:53 +0900

    redmine-backporter.rb: Check remote-tracking branch

    on `has_commit` check for the `backport` command.

    I don't maintain local "master" branch on my ruby repository for stable
    branch maintenance. I want just running `git fetch origin` to make it
    work. It should work for those who pull origin/master into their local
    master too.

commit 7c91db9ea020f297f99095765a962284d3d08f3d
  Author:     Randy Stauner <randy@r4s6.net>
  AuthorDate: 2026-01-13 08:28:06 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-13 08:28:06 +0900

    ZJIT: Check arg limit before pushing SendWithoutBLockDirect insn (#15854)

    This reduces some processing and makes the HIR more accurate.

  Notes:
    Merged-By: k0kubun <takashikkbn@gmail.com>

commit 2daed3c02258e32fb2f0b25f3f0dc0461478de5b
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-10 11:22:08 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-13 07:23:34 +0900

    [ruby/mmtk] Clear slot when object is freed

    https://github.com/ruby/mmtk/commit/87290e45b2

commit 328655633bc46887f46d7be2df974beb4ff89b7c
  Author:     Max Bernstein <ruby@bernsteinbear.com>
  AuthorDate: 2026-01-13 00:32:10 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-01-13 07:11:47 +0900

    ZJIT: Optimize Integer#[]

    This is used a lot in optcarrot.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15853

commit ee1aa78bee5f5c46ebcd75a3fe3eff03787b0b44
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-12 22:21:42 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-13 07:08:25 +0900

    [ruby/prism] Correctly expose ripper state

    It is for example used by `irb`, `rdoc`, `syntax_suggest`

    https://github.com/ruby/prism/commit/255aeb2485

commit d81a11d4e61f67b6fb0aaa44aaa7ead4022148dd
  Author:     Randy Stauner <randy@r4s6.net>
  AuthorDate: 2026-01-09 02:01:43 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-01-13 06:50:48 +0900

    ZJIT: Snapshot FrameState with reordered args before direct send

    You can see the reordered args in the new Snapshot right before the
    DirectSend insn:

           v14:Any = Snapshot FrameState { pc: 0x00, stack: [v6, v11, v13], locals: [] }
           PatchPoint MethodRedefined(Object@0x00, a@0x00, cme:0x00)
           PatchPoint NoSingletonClass(Object@0x00)
           v22:HeapObject[class_exact*:Object@VALUE(0x00)] = GuardType v6, HeapObject[class_exact*:Object@VALUE(0x00)]
        -  v23:BasicObject = SendWithoutBlockDirect v22, :a (0x00), v13, v11
        -  v16:Any = Snapshot FrameState { pc: 0x00, stack: [v23], locals: [] }
        +  v23:Any = Snapshot FrameState { pc: 0x00, stack: [v6, v13, v11], locals: [] }
        +  v24:BasicObject = SendWithoutBlockDirect v22, :a (0x00), v13, v11
        +  v16:Any = Snapshot FrameState { pc: 0x00, stack: [v24], locals: [] }

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15827

commit 351616af8c92329e143db24969125ca62f8b6ffc
  Author:     Randy Stauner <randy@r4s6.net>
  AuthorDate: 2026-01-10 06:32:28 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-01-13 06:50:48 +0900

    ZJIT: Add snapshot tests for direct send

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15827

commit 41d9eb784b4beba681205f7443e6c6454d0fca6e
  Author:     Max Bernstein <ruby@bernsteinbear.com>
  AuthorDate: 2026-01-13 01:49:13 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-01-13 06:43:49 +0900

    ZJIT: Inline Array#empty?

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15852

commit 5cec11f45a9b6282e9bc402b599dd95159b86649
  Author:     Max Bernstein <max@bernsteinbear.com>
  AuthorDate: 2026-01-12 06:25:13 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-01-13 06:43:49 +0900

    ZJIT: Inline Array#length

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15852

commit a1ba9f5733711a7665b57977d78940e07ff281a5
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-12 22:36:13 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-13 01:13:08 +0900

    [ruby/prism] Use one file for versioned `parser` classes

    One per version seems excessive.

    Do note that `rubocop-ast` used to require individual parser files. I wouldn't consider that to be part of the API since everything is autoloaded.
    From a GitHub code search, I didn't find anyone else doing it like that.

    https://github.com/ruby/prism/commit/458f622c34

commit f34297604f2b43bcec7f57b1f0ac1e2813ce58e3
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-12 18:57:20 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:24:56 +0900

    Remove a direct call of `rb_raise` in Onigmo

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit aaf47cca03c4c7561fd931e0aa1a76adfdb23eba
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-12 18:39:15 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:24:55 +0900

    Now onigenc_single_byte_code_to_mbclen checks out-of-bound

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit 76b1d4a4814eefa9bf50a1d3d0bf4e7094d5936b
  Author:     K.Takata <kentkt@csc.jp>
  AuthorDate: 2019-08-02 01:03:11 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:01:43 +0900

    [k-takata/Onigmo] Disable error message for capture history when not needed

    Add `#ifdef USE_CAPTURE_HISTORY`.

    https://github.com/k-takata/Onigmo/commit/8217be2c3a

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit 81c13349049a3674819842e87b14cf35b8755392
  Author:     K.Takata <kentkt@csc.jp>
  AuthorDate: 2019-08-01 21:27:51 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:01:43 +0900

    [k-takata/Onigmo] Fix out-of-bounds read in parse_char_class()
    (Close
    https://github.com/k-takata/Onigmo/pull/139)

    /[\x{111111}]/ causes out-of-bounds read when encoding is a single byte
    encoding. \x{111111} is an invalid codepoint for a single byte encoding.
    Check if it is a valid codepoint.

    https://github.com/k-takata/Onigmo/commit/d4cf99d30b

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit 16086128ccb5fa9133ef57c0e16bd9eaa82d818c
  Author:     K.Takata <kentkt@csc.jp>
  AuthorDate: 2019-07-30 23:15:05 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:01:43 +0900

    [k-takata/Onigmo] Suppress warning on 64-bit builds

    https://github.com/k-takata/Onigmo/commit/ced209d5e9

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit ac379278e818eb92e87a8f82e6841d7ab59baeb2
  Author:     K.Takata <kentkt@csc.jp>
  AuthorDate: 2019-07-29 20:16:46 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:01:43 +0900

    [k-takata/Onigmo] Fix stack overflow with X+++++++++++++++++++…

    Imported the fix from:
    https://github.com/kkos/oniguruma/commit/4097828d7cc87589864fecf452f2cd46c5f37180

    https://github.com/k-takata/Onigmo/commit/786b4849c1

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit f0b31a5898ae8101286dc47085139c56ba0bda54
  Author:     K.Takata <kentkt@csc.jp>
  AuthorDate: 2019-07-29 20:15:26 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:01:43 +0900

    [k-takata/Onigmo] Fix SEGV in onig_error_code_to_str() (Fix
    https://github.com/k-takata/Onigmo/pull/132)

    When onig_new(ONIG_SYNTAX_PERL) fails with ONIGERR_INVALID_GROUP_NAME,
    onig_error_code_to_str() crashes.
    onig_scan_env_set_error_string() should have been used when returning
    ONIGERR_INVALID_GROUP_NAME.

    https://github.com/k-takata/Onigmo/commit/00cc7e28a3

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit 496e74d0ccedd513eca9a156b207a36ed88e484f
  Author:     K.Takata <kentkt@csc.jp>
  AuthorDate: 2019-01-31 19:04:02 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:01:42 +0900

    [k-takata/Onigmo] Fix that onig_new() may crash

    When onig_reg_init() returns an error, onig_free_body() which is called
    via onig_new() may crash because some members are not properly
    initialized.  Fix it.

    https://github.com/k-takata/Onigmo/commit/d2a090a57e

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit ad150e90397ef85c1dbcf3ef54c0b1338fde4204
  Author:     K.Takata <kentkt@csc.jp>
  AuthorDate: 2019-01-30 19:47:54 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:01:42 +0900

    [k-takata/Onigmo] Update version number (6.2.0)

    * Update the version number to 6.2.0
    * Update LTVERSION to 6:5:0.

    https://github.com/k-takata/Onigmo/commit/9e0f7ceee0

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit a097878ed4fdecc347909f1cd62089bf6ab554c0
  Author:     K.Takata <kentkt@csc.jp>
  AuthorDate: 2019-01-30 19:02:41 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:01:42 +0900

    [k-takata/Onigmo] Comment out unused errors

    https://github.com/k-takata/Onigmo/commit/5555ee4c81

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit 916fbf1063268e27e241363d81e68bf132e7602b
  Author:     K.Takata <kentkt@csc.jp>
  AuthorDate: 2019-01-30 10:31:10 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:01:42 +0900

    [k-takata/Onigmo] Update copyright information

    * Update our copyright information.
    * Import the latest information from oniguruma.

    Related: #95

    https://github.com/k-takata/Onigmo/commit/0d8662b500

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit 85a7171b413305c4bfaca72ad958b8404353f723
  Author:     K.Takata <kentkt@csc.jp>
  AuthorDate: 2019-01-30 18:51:56 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:01:42 +0900

    [k-takata/Onigmo] Add USE_CASE_MAP_API config

    The case_map API is mainly (only?) used in Ruby.
    Make it possible to disable the API.

    https://github.com/k-takata/Onigmo/commit/80e289d6bb

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit f9131412f874aa348df383266cee7dc2cc82a9ca
  Author:     K.Takata <kentkt@csc.jp>
  AuthorDate: 2019-01-29 19:00:12 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:01:42 +0900

    [k-takata/Onigmo] Revise set_bm_skip()

    https://github.com/k-takata/Onigmo/commit/6875da50f7

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit bbf9bf3fc5c322ab8e622714b0178aca58e82191
  Author:     K.Takata <kentkt@csc.jp>
  AuthorDate: 2019-01-29 19:00:02 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:01:42 +0900

    [k-takata/Onigmo] Remove code for backward BM search

    The code has not been used for long.
    (Oniguruma also removed this code.)

    https://github.com/k-takata/Onigmo/commit/8796781fdd

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit fb7f344b09a8351544f9b4bbb593917b552b07ca
  Author:     K.Takata <kentkt@csc.jp>
  AuthorDate: 2019-01-29 18:59:50 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:01:42 +0900

    [k-takata/Onigmo] Remove code for reg->int_map

    https://github.com/k-takata/Onigmo/commit/6c58de82d2

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit 6484a71a4fee654e73f377a01db331500222dd13
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-12 10:23:10 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:01:41 +0900

    Add Onigmo to sync_default_gems.rb

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit bf36ad9c12481461031a2dbde39e27d96e5a86e4
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-11 18:37:30 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-01-12 16:44:26 +0900

    ZJIT: remove unused rb_RSTRUCT_LEN()

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15845

commit 916c0a810552b4c2c9a7fce2a50dc8c6efd5bb2f
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-11 18:29:32 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-01-12 16:44:26 +0900

    ZJIT: remove unused rb_RSTRUCT_SET()

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15845

commit d57c3296a9f49dfa2c853194e4267edd794d405b
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-12 11:21:35 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 11:28:06 +0900

    Re-fix `VCS::GIT#branch_beginning`

    Count the last release date from the whole working directory, not
    only the version headers.

commit 61c372a1b7fe045adc9b67196503f29b79bff376
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-08 08:10:10 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-12 00:46:56 +0900

    [DOC] Improve docs for ObjectSpace.count_symbols

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15820

commit 1267a3ab565523f5181cd33321897e47944e5771
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-07 09:06:13 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-12 00:46:56 +0900

    [DOC] Improve docs for ObjectSpace.count_imemo_objects

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15820

commit cf5c5abe1e7057532d1c945372b68d55cfaf163c
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-07 07:24:45 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-12 00:46:56 +0900

    [DOC] Improve docs for ObjectSpace.count_tdata_objects

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15820

commit 8baaece6d9a64e8cc51d8d0c9839546e3d039eee
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-11 22:46:06 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-11 22:53:12 +0900

    [ruby/prism] [Bug #21831] Fix denominator of rational float literal

    Denominators can contain underscores in fraction part as well as other
    numeric literals.

    [Bug #21831]: https://bugs.ruby-lang.org/issues/21831

    https://github.com/ruby/prism/commit/e247cb58c7

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15847

commit a071078e907af99db737799410d713d5ec953eb7
  Author:     Chris Hasiński <krzysztof.hasinski@gmail.com>
  AuthorDate: 2026-01-11 11:45:44 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-01-11 21:42:37 +0900

    pack.c: remove wasted allocation in BER integer packing

    The 'w' format (BER compressed integer) was allocating an empty
    string with rb_str_new(0, 0) then immediately overwriting it with
    the correctly-sized allocation. Remove the wasted first allocation.

    ~50% improvement on BER pack benchmarks.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15842

commit 3363861a5af679e7027bdd744fc05d7a797ba33c
  Author:     Heath Dutton🕴️ <heathdutton@gmail.com>
  AuthorDate: 2026-01-11 12:28:07 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-01-11 21:06:51 +0900

    Remove RUBY_API_VERSION check in cxxanyargs.hpp

    The version check used undefined macros, causing -Wundef warnings.
    The conditional is no longer needed as Ruby is past version 3.1.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15843

commit 73be9992e93072be803ffd5173e29dcf597e04ef
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-11 17:54:18 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-11 21:03:03 +0900

    Disambiguate private and public RSTRUCT_ helpers

    RSTRUCT_LEN / RSTRUCT_GET / RSTRUCT_SET all existing in two
    versions, one public that does type and frozens checks
    and one private that doesn't.

    The problem is that this is error prone because the public version
    is always accessible, but the private one require to include
    `internal/struct.h`. So you may have some code that rely on the
    public version, and later on the private header is included and
    changes the behavior.

    This already led to introducing a bug in YJIT & ZJIT:
    https://github.com/ruby/ruby/pull/15835

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15844

commit 463a806fb10e4631012d616a3133b4f8cce7938f
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-11 15:12:58 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-11 15:12:58 +0900

    Fix `VCS::GIT#branch_beginning` to search since the last relase

    The ChangeLog in ruby-4.0.0 did not contain entries for 3.5.0.

commit acd0c68a074cd47fba486d4d77895e2709be873a
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-11 14:51:49 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-11 14:51:49 +0900

    Relax the flaky test threshold on RHEL 10.0 x86_64

commit 0d4538b57d5f835af27d8d29464c32dbdf4593f3
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-10 08:00:27 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-10 23:31:35 +0900

    [DOC] Improve docs for Module#>=

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15838

commit f0f4a683b4dddf870491607396a564dec55a4d6e
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-10 07:56:47 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-10 23:31:35 +0900

    [DOC] Improve docs for Module#<=

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15838

commit 0b83346f1c1f6e54c344307c2ec5f9d0a6f80317
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-10 07:54:22 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-10 23:31:35 +0900

    [DOC] Improve docs for Module#<

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15838

commit 98c414a678c2497dc522abf3802b2f78bfc856c4
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-10 07:48:27 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-10 23:31:35 +0900

    [DOC] Improve docs for Module#>

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15838

commit 0b69f7fa347e3aadb7998e3f33257e6c83787c8b
  Author:     Jun Aruga <jaruga@redhat.com>
  AuthorDate: 2026-01-10 01:51:04 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-10 16:20:55 +0900

    [ruby/openssl] Fix test_cipher.rb in FIPS.

    https://github.com/ruby/openssl/commit/11bd2efb2a

commit c3f6fcc4c5d59aa12ce82148502b17b4bbe6877d
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-09 09:17:09 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-10 08:05:43 +0900

    Skip ObjectSpaceTest#test_count_nodes for RBS

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15766

commit e8c61f513928c411859df1d4fe0c201157d4f129
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-30 00:19:19 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-10 08:05:43 +0900

    Remove ObjectSpace.count_nodes

    ObjectSpace.count_nodes has been a no-op and returning an empty hash since
    Ruby 2.5 because parser nodes are not GC managed.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15766

commit ef488bff987dcc1044bd1d98f2aa7013081f66d8
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-01-10 07:47:13 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-10 08:05:33 +0900

    [DOC] Doc for Enumerator.new

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15837

commit 77cad87dc176273a3b646330e0e9b50e3451a1a9
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-01-10 06:06:57 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-10 07:36:32 +0900

    [DOC] Doc for Enumerator class

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15836

commit 3d242a82a38f60664b5fab815a786901d57c11ca
  Author:     Burdette Lamar <BurdetteLamar@Yahoo.com>
  AuthorDate: 2026-01-10 07:36:26 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-10 07:36:26 +0900

    [DOC] Harmonize #> methods

commit e08f316f28b1ce32b154582ce6ac1d2e1471a5b7
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-01-10 04:25:48 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-10 04:25:48 +0900

    YJIT: Add frozen guard for struct aset (#15835)

    We used to just skip this check (oops), but we should not allow
    modifying frozen objects.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 51ab7b0405e39d6defe0b236e23f43b42aa6c1da
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-09 17:21:45 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-10 01:31:10 +0900

    YJIT: gen_struct_aset check for frozen status

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15722

commit 7379b9ed780bc8fcf8c50ae2d33816523327608c
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-24 23:17:21 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-10 01:31:10 +0900

    Optimize rb_mark_generic_ivar for T_DATA and T_STRUCT

    T_DATA and T_STRUCT could have ivars but might not use the generic_fields_tbl.
    This commit skips lookup in the generic_fields_tbl for those cases.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15722

commit c794a97940a36269cffcb6ad35ef7ff209fe2720
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-09 14:24:38 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-01-09 20:02:54 +0900

    Rename `alloca_overflow` to `stack_overflow`

    `alloca` is an implementation detail to raise a stack overflow.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15832

commit e01e13c23999f0e43d8a0874003c73a1cdd68f1e
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-02 11:05:07 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-09 17:16:22 +0900

    Use `assert_ruby_status` if no assertion

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15785

commit fc0c67deb2195c51661b6c35eb41cfb2cb92e3f8
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-03 12:20:35 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-09 17:16:22 +0900

    Make `assert_separately` to count assertions in forked processes

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15785

commit 364e25b1c3b7771c84b27e572796165c9b11b969
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-02 09:37:59 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-09 16:06:13 +0900

    Make `assert_separately` tolerant to core method redefinitions

    And split `TestRubyOptimization#test_objtostring` for each target
    class.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15785

commit 3185786874315ab4f1cfcc73c3d1b14613452905
  Author:     Jörmungandrk <github@zerodaysec.org>
  AuthorDate: 2026-01-09 12:22:01 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-01-09 15:04:05 +0900

    Fix integer overflow checks in enumerator

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15829

commit b61e18d76b939d7e5e18f61a426b14a110f95b7c
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-08 19:40:56 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-09 11:36:46 +0900

    Win32: configure without an intermediate makefile

    This batch file used `nmake` on the old `command.com` to extract the
    parent directory name of this file and to get around the command line
    argument length limit.  However, Windows 9X support as a build host
    ended over a decade ago, and this file now utilizes the functionality
    of `cmd.exe` already.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15830

commit e89db8567c20692eabea70a4997a6ba325a347f8
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-09 09:10:08 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-09 10:33:41 +0900

    [ruby/mmtk] Assert that objects are not T_NONE in the write barrier

    https://github.com/ruby/mmtk/commit/59d27203e2

commit aa7eb97d062e260f0d704b78e93c470ac8444129
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-09 09:09:59 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-09 10:33:41 +0900

    [ruby/mmtk] Add MMTK_ASSERT

    https://github.com/ruby/mmtk/commit/e34d5cf32f

commit b3216bc1e19c4b49a352793cc60ab06743ad58f2
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-08 19:46:29 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-01-09 09:33:16 +0900

    Fix Ripper::Lexer::State#[] for to_s

    The instance variable is called `to_s`, not `event`.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15826

commit 50b719115af8344888ef2735788ebc9f32c05a54
  Author:     Stan Lo <stan001212@gmail.com>
  AuthorDate: 2026-01-09 08:07:50 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-09 08:07:50 +0900

    Remove ruby-bench excludes (#15828)

    These benchmarks should be working fine now.

  Notes:
    Merged-By: st0012 <stan001212@gmail.com>

commit c6f9a4d3936ff9a2f9db8a3548a7dbc8fadd18d9
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-08 09:56:49 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-09 07:33:32 +0900

    Remove check for rb_obj_gen_fields_p in rb_hash_dup

    rb_copy_generic_ivar already checks for it, so we don't need to call
    rb_obj_gen_fields_p twice.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15823

commit 523857bfcb0f0cdfd1ed7faa09b9c59a0266e7e2
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-01-09 04:57:55 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-09 04:57:55 +0900

    ZJIT: Replace GuardShape with LoadField+GuardBitEquals (#15821)

    GuardShape is just load+guard, so use the existing HIR instructions for load+guard. Probably makes future analysis slightly easier.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 16863f2ec1c8cefd852965e58acfcfd61b0194b9
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-08 21:47:35 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-09 03:35:26 +0900

    [ruby/prism] Decouple ripper translator from ripper library

    Ripper exposes Ripper::Lexer:State in its output, which is a bit of a problem. To make this work, I basically copy-pasted the implementation.

    I'm unsure if that is acceptable and added a test to make sure that these values never go out of sync.
    I don't imagine them changing often, prism maps them 1:1 for its own usage.

    This also fixed the shim by accident. `Ripper.lex` went to `Translation::Ripper.lex` when it should have been the original. Removing the need for the original resolves that issue.

    https://github.com/ruby/prism/commit/2c0bea076d

commit fc66de3e6b5e28c017c3cffac77a66d680d679a4
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-08 19:12:15 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-09 03:35:25 +0900

    [ruby/prism] Remove unneeded `ripper` requires

    Ripper is either not used or loaded where it is actually needed

    https://github.com/ruby/prism/commit/a73a4fb00c

commit 3bfc86558b7a314417399470b5204a914f2ca3ff
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-08 18:53:42 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-09 03:35:25 +0900

    [ruby/prism] Move `LexRipper` into its own file

    It has a hard dependency on ripper that can't be removed.
    This makes it so that ripper can be loaded only when the class is actually used.

    https://github.com/ruby/prism/commit/3b5b4a8a6d

commit dcfbbdc38c2c0502f2eeb9172d1a82721b5ca45b
  Author:     git[bot] <svn-admin@ruby-lang.org>
  AuthorDate: 2026-01-08 18:48:38 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-08 18:48:38 +0900

    Update bundled gems list as of 2026-01-08

commit 19d3f2da668ad0bdb1c6077cf1d9a86432ea8889
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-08 18:06:45 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-08 18:48:00 +0900

    Skip collection install test

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15825

commit eaa9902ca7d5752fddd2e6d31b6880d9f82de536
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-08 17:01:54 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-08 18:48:00 +0900

    Exclude ruby-lsp benchmark because released version of rbs didn't have tsort dependency

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15825

commit 4a988b7f480d30fbc06e3e3399611172072bf58e
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-08 16:35:34 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-08 18:48:00 +0900

    Inject tsort path before rdoc

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15825

commit 9c49084a203a4b8a3abca653dee6781b9e5ed5fb
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-08 15:45:41 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-08 18:48:00 +0900

    Update tsort entries under the doc

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15825

commit 9580c7d07bb048386f75be994ea33d2870d2e177
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-08 15:43:28 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-08 18:48:00 +0900

    Migrate tsort as bundled gems

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15825

commit 946b1c1ba19e708d54a3f9eee00d4ea06434876c
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-08 13:41:07 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-08 13:41:07 +0900

    Move parentheses around macro arguments

commit 1852ef43778d59a64881b293b0b887e2bc5af37a
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-07 09:39:55 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-08 13:30:47 +0900

    Fail if the Ruby specified with `--with-baseruby` is too old

    If the baseruby is explicitly specified, fail because the option is
    not accepted if it does not meet the requirements.  If the option is
    not specified, just display the warning and continue, in the hope that
    it is not needed.

    Follow up GH-15809

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15817

commit 725e3d0aa7ffe47765a973904b72eac65763834b
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-08 12:26:27 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-08 13:29:23 +0900

    Fluent and/or is supported by Prism too now

commit 768862868472fb1800e556effb0e37be2fbaec52
  Author:     Chris Hasiński <krzysztof.hasinski@gmail.com>
  AuthorDate: 2026-01-08 09:13:38 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-08 13:15:29 +0900

    Fix incorrect bundled gems warning for hyphenated gem names

    When requiring a file like "benchmark/ips", the warning system would
    incorrectly warn about the "benchmark" gem not being a default gem,
    even when the user has "benchmark-ips" (a separate third-party gem)
    in their Gemfile.

    The fix checks if a hyphenated version of the require path exists in
    the bundle specs before issuing a warning. For example, requiring
    "benchmark/ips" now checks for both "benchmark" and "benchmark-ips"
    in the Gemfile.

    [Bug #21828]

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15822

commit 080d66beca71d6cc290a8be4acd49e5a70594f9c
  Author:     Misaki Shioi <31817032+shioimm@users.noreply.github.com>
  AuthorDate: 2026-01-08 09:41:42 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-08 09:41:42 +0900

    Avoid flaky test failures by retrying on local port conflicts (#15818)

    This test obtains an available port number by calling `TCPServer.new`,
    then closes it and passes the same port number as `local_port` to `TCPSocket.new`.

    However, `TCPSocket.new` could occasionally fail with `Errno::EADDRINUSE`
    at the bind(2) step.
    I believe this happens when tests are run in parallel and another process
    on the same host happens to bind the same port in the short window between
    closing the `TCPServer` and calling `TCPSocket.new`.

    To address this race condition, the test now retries with a newly selected
    available port when such a conflict occurs.

  Notes:
    Merged-By: shioimm <shioi.mm@gmail.com>

commit 950ffa90b7939885cc35d376a2e10aabfdc7170d
  Author:     Nozomi Hijikata <121233810+nozomemein@users.noreply.github.com>
  AuthorDate: 2026-01-08 08:24:29 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-08 08:24:29 +0900

    ZJIT: Add ArrayAset instruction to HIR (#15747)

    Inline `Array#[]=` into `ArrayAset`.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 3ea6ec8344a07e2d10ba248c69039dd4d27fd8fb
  Author:     Burdette Lamar <BurdetteLamar@Yahoo.com>
  AuthorDate: 2026-01-08 08:02:22 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-08 08:02:22 +0900

    [DOC] Harmonize #=~ methods (#15814)

  Notes:
    Merged-By: peterzhu2118 <peter@peterzhu.ca>

commit 5230f835e807b7b6935b758de58ee26da6cb6a60
  Author:     Burdette Lamar <BurdetteLamar@Yahoo.com>
  AuthorDate: 2026-01-08 08:01:56 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-08 08:01:56 +0900

    [DOC] Harmonize #[] methods

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15815

    Merged-By: peterzhu2118 <peter@peterzhu.ca>

commit 7d4983803887a45c311ab954de4527333b976500
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-07 17:00:14 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-07 17:49:23 +0900

    [ruby/rubygems] bin/rubocop -A

    https://github.com/ruby/rubygems/commit/e3f418aa11

commit 3657700c4069ffd5d9e9b900e75f484f80eb8e3f
  Author:     Takuya Noguchi <takninnovationresearch@gmail.com>
  AuthorDate: 2022-09-06 16:37:50 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-07 17:49:23 +0900

    [ruby/rubygems] Bundler: validate more options for add sub-command

    Signed-off-by: Takuya Noguchi <takninnovationresearch@gmail.com>

    https://github.com/ruby/rubygems/commit/6ca2e28680

commit 88467996862a15f64ee05e49c9df9b18296c66d6
  Author:     neimadTL <damientalbot26@gmail.com>
  AuthorDate: 2025-02-13 22:32:33 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-07 16:44:55 +0900

    [ruby/rubygems] Update custom errors with Exception#full_message

    The use of `Exception#full_message` makes more sense as it shows
    the cause and the backstrace.

    https://github.com/ruby/rubygems/commit/62a92c3f5e

commit e1087c1226f0a98c83842613066ba9ff48710887
  Author:     eileencodes <eileencodes@gmail.com>
  AuthorDate: 2025-12-20 01:27:28 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-07 16:30:26 +0900

    [ruby/rubygems] Fix dependency source bug in bundler

    I stumbled across a bundler bug that had me scratching my head for
    awhile, because I hadn't experienced it before.

    In some cases when changing the source in a gemfile from a
    `Source::Gemspec` to either a `Source::Path` or `Source::Git` only the
    parent gem will have it's gem replaced and updated and the child
    components will retain the original version. This only happens if the gem
    version of the `Source::Gemspec` and `Source::Git` are the same. It also
    requires another gem to share a dependency with the one being updated.

    For example if I have the following gemfile:

    ```
    gem "rails", "~> 8.1.1"
    gem "propshaft"
    ```

    Rails has a component called `actionpack` which `propshaft` depends on.

    If I change `rails` to point at a git source (or path source), only the
    path for `rails` gets updated:

    ```
    gem "rails", github: "rails/rails", branch: "8-1-stable"
    gem "propshaft"
    ```

    Because `actionpack` is a dependency of `propshaft`, it will remain in
    the rubygems source in the lock file WHILE the other gems are correctly
    pointing to the git source.

    Gemfile.lock:

    ```
    GIT
      remote: https://github.com/rails/rails.git
      revision: https://github.com/ruby/rubygems/commit/9439f463e0ef
      branch: 8-1-stable
      specs:
        actioncable (8.1.1)
          ...
        actionmailbox (8.1.1)
          ...
        actionmailer (8.1.1)
          ...
        actiontext (8.1.1)
          ...
        activejob (8.1.1)
          ...
        activemodel (8.1.1)
          ...
        activerecord (8.1.1)
          ...
        activestorage (8.1.1)
          ...
        rails (8.1.1)
          ...
        railties (8.1.1)
          ...

    GEM
      remote: https://rubygems.org/
      specs:
        action_text-trix (2.1.15)
          railties
        actionpack (8.1.1) <===== incorrectly left in Rubygems source
          ...
    ```

    The gemfile will contain `actionpack` in the rubygems source, but will
    be missing in the git source so the path will be incorrect. A bundle
    show on Rails will point to the correct place:

    ```
    $ bundle show rails
    /Users/eileencodes/.gem/ruby/3.4.4/bundler/gems/rails-9439f463e0ef
    ```

    but a bundle show on actionpack will be incorrect:

    ```
    $ bundle show actionpack
    /Users/eileencodes/.gem/ruby/3.4.4/gems/actionpack-8.1.1
    ```

    This bug requires the following to reproduce:

    1) A gem like Rails that contains components that are released as their
    own standalone gem is added to the gemfile pointing to rubygems
    2) A second gem is added that depends on one of the gems in the first
    gem (like propshaft does on actionpack)
    3) The Rails gem is updated to use a git source, pointing to the same
    version that is being used by rubygems (ie 8.1.1)
    4) `bundle` will only update the path for Rails component gems if no
    other gem depends on it.

    This incorrectly leaves Rails (or any gem like it) using two different
    codepaths / gem source code.

    https://github.com/ruby/rubygems/commit/dff76ba4f6

commit 25c72b0e8e206e5baec71d4ece7551b7da7da445
  Author:     Jarek Prokop <jprokop@redhat.com>
  AuthorDate: 2025-12-22 18:13:34 +0900
  Commit:     Alan Wu <XrXr@users.noreply.github.com>
  CommitDate: 2026-01-07 13:55:06 +0900

    Support customizable rustc_flags for rustc builds.

    Add `rustc_flags` option for configure that appends to RUSTC_FLAGS
    flags used when compiling with rustc for customizable build flags.
    It appends to existing defaults in RUSTC_FLAGS.

    Co-authored-by: Alan Wu <XrXr@users.noreply.github.com>

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15695

commit 1abb609d667d4e07fb30192ef9da376bb288e230
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-06 08:32:02 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-07 09:58:14 +0900

    [ruby/mmtk] Check that a and b are valid objects in write barrier

    https://github.com/ruby/mmtk/commit/350625ebb3

commit 08f6b8673adea23d2e96ca983f5d843c17b9a0e7
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-06 08:31:38 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-07 09:58:14 +0900

    [ruby/mmtk] Set MMTK_DEBUG in C compiler for debug builds

    https://github.com/ruby/mmtk/commit/12a3904b04

commit a024dca391695d07b24598677ddd6509ae3febfb
  Author:     yui-knk <spiketeika@gmail.com>
  AuthorDate: 2026-01-06 12:08:48 +0900
  Commit:     yui-knk <spiketeika@gmail.com>
  CommitDate: 2026-01-07 09:26:37 +0900

    Remove `in_masgn` field from `struct iseq_compile_data`

    `in_masgn` has not been used since fb6e3a80009a744a4e0b75660f1ce6da65e20e6c.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15812

commit b2ed4cdced26f8840e181960c776e950e8bb0396
  Author:     Philip Hallstrom <philip@pjkh.com>
  AuthorDate: 2026-01-07 07:29:58 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-07 08:05:30 +0900

    [ruby/time] Add changelog URI to time.gemspec

    https://github.com/ruby/time/commit/08f896ca0d

commit 5c24f4081d0d163ed91dd20692d09d0c88ac46b1
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-06 10:25:52 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-07 07:16:38 +0900

    Add potential missing GC guard in iseq_data_to_ary

    The iseq object might be optimized away by the compiler in iseq_data_to_ary
    because we mainly only use the iseq_body. With MMTk, this crash occasionally
    happens:

        TestIseqLoad#test_stressful_roundtrip [test/-ext-/iseq_load/test_iseq_load.rb:20]:
        pid 106677 killed by SIGSEGV (signal 11) (core dumped)
        | -:10: [BUG] Segmentation fault at 0x0000000000f1410c
        | ruby 4.1.0dev (2026-01-05T23:31:16Z master 5d26a2aeea) +PRISM +GC[mmtk] [x86_64-linux]
        |
        | -- Control frame information -----------------------------------------------
        | c:0005 p:---- s:0022 e:000021 l:y b:---- CFUNC  :to_a
        | c:0004 p:0039 s:0018 e:000017 l:y b:0001 METHOD -:10
        | c:0003 p:0013 s:0010 e:000009 l:y b:0001 METHOD -:16
        | c:0002 p:0054 s:0006 e:000005 l:n b:---- EVAL   -:26 [FINISH]
        | c:0001 p:0000 s:0003 E:0003a0 l:y b:---- DUMMY  [FINISH]
        |
        | -- Ruby level backtrace information ----------------------------------------
        | -:26:in '<main>'
        | -:16:in 'test_bug8543'
        | -:10:in 'assert_iseq_roundtrip'
        | -:10:in 'to_a'
        |
        | -- Threading information ---------------------------------------------------
        | Total ractor count: 1
        | Ruby thread count for this ractor: 1
        |
        | -- Machine register context ------------------------------------------------
        |  RIP: 0x000055b581f866f5 RBP: 0x0000000000000000 RSP: 0x00007ffccce2ffe0
        |  RAX: 0x00000200ffee2b08 RBX: 0x0000000000f1410c RCX: 0x0000000000000000
        |  RDX: 0x000000000010c7f2 RDI: 0x00000200ffee2b08 RSI: 0x00000200ffee2b08
        |   R8: 0x0000000000000004  R9: 0x00000c0803ffb8ac R10: 0x00007fe9074c0cc8
        |  R11: 0x0000000000000246 R12: 0x0000000000000000 R13: 0x0000000000000001
        |  R14: 0x0000000000000001 R15: 0x00000200ffee2208 EFL: 0x0000000000010246
        |
        | -- C level backtrace information -------------------------------------------
        | ruby(rb_print_backtrace+0x14) [0x55b582119a9f] vm_dump.c:1105
        | ruby(rb_vm_bugreport) vm_dump.c:1450
        | ruby(rb_bug_for_fatal_signal+0x102) [0x55b582409072] error.c:1131
        | ruby(sigsegv+0x46) [0x55b582051bf6] signal.c:948
        | /lib/x86_64-linux-gnu/libc.so.6(0x7fe907645330) [0x7fe907645330]
        | ruby(iseq_data_to_ary+0xe5) [0x55b581f866f5] iseq.c:3380
        | ruby(iseq_data_to_ary+0x6b2) [0x55b581f86cc2] iseq.c:3470
        | ruby(vm_call_cfunc_with_frame_+0x10d) [0x55b5820e4a0d] vm_insnhelper.c:3902

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15810

commit 58fb95af36c86b00b134db5275becf7455ba4790
  Author:     Burdette Lamar <BurdetteLamar@Yahoo.com>
  AuthorDate: 2026-01-07 07:13:15 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-07 07:13:15 +0900

    [DOC] Harmonize #== methods (#15805)

  Notes:
    Merged-By: peterzhu2118 <peter@peterzhu.ca>

commit 49ca241d6d5f589dec8f42fecdc8ecb96690b859
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-01-06 06:30:06 +0900
  Commit:     Matt Valentine-House <matt@eightbitraptor.com>
  CommitDate: 2026-01-07 02:09:27 +0900

    Show a more verbose message if BASERUBY is too old

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15809

commit 925d04108b8fff7dfa14ccd8ac19fd1522cc99c3
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-06 15:16:40 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-06 18:37:41 +0900

    Add `rake` target to run the bundled `rake`

commit bff7c6d9e9a423d4a7158b81658b3e77733b9be3
  Author:     Steve Savio <hi@stevos.dev>
  AuthorDate: 2026-01-06 16:34:44 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-01-06 18:30:33 +0900

    [DOC] Fix minor typo on shareable procs section

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15813

commit ad6b85450db1b252660dae4b514f5be35ccd38b9
  Author:     Schneems <richard.schneeman+foo@gmail.com>
  AuthorDate: 2025-12-27 03:21:51 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-06 13:38:13 +0900

    [ruby/rubygems] Retain current bundler version on `bundle clean`

    Previously: In #9218 a reproduction is shared where running `bundle clean` using a binstub (`bin/bundle`) results in bundler removing itself. This results in Ruby falling back to its default bundler version. This behavior seems to be present for as long as there has been a default version of bundler (Ruby 2.6+).

    Now: Bundler will explicitly add its current version number to the specs to be preserved. This prevents `bundle clean` from removing the current bundler version.

    close https://github.com/ruby/rubygems/pull/9218

    https://github.com/ruby/rubygems/commit/e3f0167ae4

commit 4377249bbf1a27b3d860ab8948b508f1b024ba1c
  Author:     Schneems <richard.schneeman+foo@gmail.com>
  AuthorDate: 2025-12-27 03:21:51 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-06 13:38:13 +0900

    [ruby/rubygems] Test for removing current bundler version

    https://github.com/ruby/rubygems/commit/675342e6d0

commit 16bdfa1b2a6b4cb40417e7673ad9eaa80664e4f0
  Author:     Schneems <richard.schneeman+foo@gmail.com>
  AuthorDate: 2025-12-27 03:21:51 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-06 13:38:12 +0900

    [ruby/rubygems] Split logic to two lines

    https://github.com/ruby/rubygems/commit/5a6eca4cf9

commit 3143543f958d4fa90d0423f84c598286098f1704
  Author:     lolwut <lol@wut.com>
  AuthorDate: 2025-12-26 12:05:50 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-06 13:38:12 +0900

    [ruby/rubygems] Compare like values in find_bundler

    The input to this method is not guaranteed to be a string, it could be a `Gem::Version` this normalizes the comparison.

    https://github.com/ruby/rubygems/commit/1f43c7a988

commit 1b476606f2294d0ce52a7429c597491ff68b11ce
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-06 13:07:49 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-06 13:07:49 +0900

    Update the latest versions of actions

commit 5d26a2aeea1368c5e37cb75ca511e62c5e21960f
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-05 04:14:26 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-06 08:31:16 +0900

    [ruby/mmtk] Assert pinning object is not moved

    https://github.com/ruby/mmtk/commit/8813e76bf8

commit dd67874ad9ef1beb57e2c76528ff715c525163c6
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-01-06 03:29:04 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-06 08:30:40 +0900

    [DOC] Harmonize #=== methods

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15807

commit a25f4689175b5b0f7da0831dbcedf86b62f67e19
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-01-06 01:18:16 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-06 08:23:55 +0900

    [DOC] Harmonize #>= methods

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15803

commit 7a1180afb665286556315bcf27188263854b213b
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-01-06 06:33:57 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-06 06:33:58 +0900

    ruby-bench: Prefer --excludes over rm -rf

    to remind us of skipped benchmarks in the CI job names

commit 23765a5e094f61b11bddce98f7fdd425d1c8ed87
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-01-06 05:16:48 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-06 05:16:48 +0900

    ZJIT: Update Iongraph (#15806)

    Fix some rendering bugs and remove React.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 7e81bf5c0c8f43602e6d901f4253dca2f3d71745
  Author:     Luke Gruber <luke.gruber@shopify.com>
  AuthorDate: 2026-01-06 02:18:47 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-06 02:18:47 +0900

    Fix sleep spurious wakeup from sigchld (#15802)

    When sleeping with `sleep`, currently the main thread can get woken up from sigchld
    from any thread (subprocess exited). The timer thread wakes up the main thread when this
    happens, as it checks for signals. The main thread then executes the ruby sigchld handler
    if one is registered and is supposed to go back to sleep immediately. This is not ideal but
    it's the way it's worked for a while. In commit 8d8159e7d8 I added writes to `th->status`
    before and after `wait_running_turn` in `thread_sched_to_waiting_until_wakeup`, which is
    called from `sleep`. This is usually the right way to set the thread's status, but `sleep`
    is an exception because the writes to `th->status` are done in `sleep_forever`. There's a
    loop that checks `th->status` in `sleep_forever`. When the main thread got woken up from
    sigchld it saw the changed `th->status` and continued to run the main thread instead of
    going back to sleep.

    The following script shows the error. It was returning instead of sleeping forever.

    ```ruby
    t = Thread.new do
      sleep 0.3
      `echo hello`  # Spawns subprocess
      puts "Subprocess exited"
    end

    puts "Main thread sleeping..."
    result = sleep  # Should block forever
    puts "sleep returned: #{result.inspect}"
    ```

    Fixes [Bug #21812]

  Notes:
    Merged-By: luke-gru <luke.gru@gmail.com>

commit c65a5548a80f955ad71decabf0f29183fef8d6d7
  Author:     Brandon Zylstra <9854+brandonzylstra@users.noreply.github.com>
  AuthorDate: 2026-01-05 12:26:21 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-01-05 17:11:06 +0900

    Update box.md

    "Code" (when used to refer to what we create in Ruby or any other programming language) is an abstract non-count noun, so it cannot be pluralized.  ("Codes" would be used when referring to specific countable things like PIN codes, which is a different use of the word "code".)

    This is somewhat confusing because English allows converting count nouns into non-count nouns, and converting non-count nouns into count nouns, and because many words have both forms.

    For an example of converting a non-count noun to a count noun, "water" is normally a non-count noun:

    > The world is covered with water.

    but people who work in restaurants often use the word as a count noun, as a shorthand for "cup of water":

    > I need 7 waters on the big table by the window.

    For an example of the opposite conversion, "worm" is normally a count noun:

    > There are lots of worms in the puddle.

    but someone might use it as a non-count noun when talking about non-distinct remains of worms:

    > You have worm all over the bottom of your shoe!

    So although a given noun can be flexible enough to be used in either way—even when it is unconventional—there is a definite change of meaning when using a word as a count noun or a non-count noun.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15799

commit 32674606102d21ec56635ff4b496544dd01775a6
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-05 16:16:29 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-01-05 16:47:14 +0900

    Update bindgen

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15800

commit 28b0e5125f1dd62b202a28aaa1e79190dad7eb02
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-05 15:47:40 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-01-05 16:47:14 +0900

    [Bug #18433] Remove unneeded declaration

    This `rb_cObject` declaration was only for `rb_cData()` that was
    removed at 7c738ce5e649b82bdc1305d5c347e81886ee759a.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15800

commit d3ecd9d2ab4478ca29db20c1ab6c425a24bee83d
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-05 15:36:06 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-05 16:22:11 +0900

    [ruby/rubygems] Lock minitest ~> 5.1

    https://github.com/ruby/rubygems/commit/7b9bfb4e18

commit b87b6edf2e557db7b2787d7a213a6aa03f93a146
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-05 14:15:46 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-05 16:22:10 +0900

    [ruby/rubygems] Update vendored net-http to 0.9.1

    https://github.com/ruby/rubygems/commit/12072e8d23

commit 8c8561adbc3d8761ef70983c01d6ade0004d0fb8
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-05 14:15:05 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-05 16:22:10 +0900

    [ruby/rubygems] Update vendored connection_pool to 2.5.5

    https://github.com/ruby/rubygems/commit/4c1eb2b274

commit 05f791bf41d9a14cb4db2d529413928db539affc
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-05 13:59:47 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-05 16:22:09 +0900

    [ruby/rubygems] rake update

    https://github.com/ruby/rubygems/commit/aa7632161e

commit 99bd18b5b8071659ac9f035eea173b445326f8ad
  Author:     Tsutomu Katsube <tsuto.katsube@gmail.com>
  AuthorDate: 2026-01-02 20:10:16 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-05 13:48:29 +0900

    Unskip RBS test on Windows for NoMemoryError workaround

    test-unit 3.7.7 has been fixed this problem.

    See also:
    https://github.com/test-unit/test-unit/releases/tag/3.7.7

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15786

commit e6762d23cb14411ec026b324c5c15c339158ddc4
  Author:     Shugo Maeda <shugo@ruby-lang.org>
  AuthorDate: 2026-01-05 11:49:48 +0900
  Commit:     Shugo Maeda <shugo@ruby-lang.org>
  CommitDate: 2026-01-05 11:49:48 +0900

    [DOC] Fix a typo and trim trailing whitespace per .editorconfig

commit 01e8b38f601c4866738a76df4361f2b4df0fc300
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-05 10:55:47 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-05 11:32:42 +0900

    Use RUBY_VERSION in specs instead of hardcoded 'Ruby 4.0.0' to make tests version-independent

commit 699813b65f8504c6bb787ac3c8b7fe6419e76cdf
  Author:     Jeremy Evans <code@jeremyevans.net>
  AuthorDate: 2026-01-04 03:12:19 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-05 09:58:13 +0900

    [ruby/rubygems] Remove date require from rebuild command

    As far as I can see, this isn't used.

    https://github.com/ruby/rubygems/commit/67c97e7180

commit 7d5c0247eb2fb67bb0ac2fd6060bf2996c8c4c46
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-04 23:33:39 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-05 02:26:06 +0900

    Dump fstr and frozen status in rb_raw_obj_info_buitin_type

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15797

commit 6eadc01cdaa70895d464843de5b6c4d35cab2e27
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-05 02:13:08 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-01-05 02:13:08 +0900

    Fix condition for UTF-8 default in magic_comment_spec.rb

commit 9888a3e8bda75a417f15e3936d5d9a16051c9256
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-05 02:10:42 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-01-05 02:10:42 +0900

    UNIXSocket#recvfrom only returns the path on Linux

    * Notably it does not on BSD, macOS and Windows.

commit 2bf954305323857418b917f4a987c300245ee0eb
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-05 00:04:02 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-01-05 00:04:02 +0900

    Remove assertion which does not hold

    * https://github.com/ruby/ruby/actions/runs/20694508956/job/59407571754
      1)
      UNIXSocket.pair emulates unnamed sockets with a temporary file with a path FAILED
      Expected "C:\\a\\_temp\\102424668889-2384.($)".match? /\\AppData\\Local\\Temp\\\d+-\d+\.\(\$\)\z/
      to be truthy but was false

commit e79f8974b55de2ef8135c3fad03860e8ad36dfb0
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-04 23:39:31 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-01-04 23:39:31 +0900

    Get better error if UNIXSocket.socketpair spec fails

commit 29e7973e055cc82622cdd4511d78d74ad784c80e
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-04 23:36:02 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-01-04 23:36:02 +0900

    Update to ruby/spec@94dbd55

commit 6939f03f4cec6c50cbc1d214a38cdcdcf1d3f705
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-31 06:03:35 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-04 23:02:40 +0900

    Add field handle_weak_references to TypedData

    This commit adds a field handle_weak_references to rb_data_type_struct for
    the callback when handling weak references. This avoids TypedData objects
    from needing to expose their rb_data_type_struct and weak references function.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15773

commit 1b3382cbab83f0dbf21b0d3683d4ab5335f6c342
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-04 22:53:24 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-01-04 22:53:24 +0900

    Update to ruby/spec@f54296d

commit 18672b392b7164c783381979ad34d550955d0416
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-04 16:00:23 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-04 16:01:27 +0900

    [DOC] Add `base-url` to ChangeLog by default

    It is used to expand repository references to URL.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15796

commit 912cf819b96a7ada89db044add26e94746f3ebb5
  Author:     Augustin Gottlieb <33221555+aguspe@users.noreply.github.com>
  AuthorDate: 2026-01-03 01:54:42 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-04 15:56:57 +0900

    [ruby/openssl] Improve Argument Error Message in EC:Group.new

    Before, passing the wrong number of arguments (e.g., 2) to
    OpenSSL::PKey::EC::Group.new raised a generic "wrong number of
    arguments"
    error.

    This change updates it to show the actual argument count and the
    expected
    options (1 or 4), making debugging easier for the user.

    Example:
    ArgumentError: wrong number of arguments (given 2, expected 1 or 4)

    I hope it helps!

    https://github.com/ruby/openssl/commit/783c99e6c7

commit ca0fece56a3ddfa6b9ec9cf1652e414929040614
  Author:     Koichi ITO <koic.ito@gmail.com>
  AuthorDate: 2025-12-21 04:47:55 +0900
  Commit:     Satoshi Tagomori <tagomoris@gmail.com>
  CommitDate: 2026-01-04 12:53:42 +0900

    [DOC] Tweak an example in language/box.md

    Although the example code comments indicate that it returns `false`,
    a non-matching result for `=~` is actually `nil`.

    ```ruby
    Foo.foo.blank? #=> false
    "foo".blank?   #=> false
    ```

    https://github.com/ruby/ruby/blob/v4.0.0-preview3/doc/language/box.md?plain=1#L115-L122

    This PR replaces `=~` with `match?` so that it returns the expected `false`.
    Since this makes the result a boolean, it also aligns with the expected behavior of
    a predicate method name like `blank?`.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15671

commit d8d41d7441aabae5e5948f89cd759bbdc3bf5532
  Author:     Koichi ITO <koic.ito@gmail.com>
  AuthorDate: 2025-12-21 23:14:22 +0900
  Commit:     Satoshi Tagomori <tagomoris@gmail.com>
  CommitDate: 2026-01-04 12:52:40 +0900

    [DOC] Use `Ruby::Box#require_relative` in box.md examples

    Based on the example, it appears that `foo.rb` and `main.rb` are expected to be in the same directory.
    Since Ruby 1.9, the current directory is not included in `$LOAD_PATH` by default.
    As a result, running `box.require('foo')` as shown in the sample code raises a `LoadError`:

    ```console
    main.rb:2:in `Ruby::Box#require': cannot load such file -- foo (LoadError)
            from main.rb:2:in `<main>'
    ```

    To avoid this, it seems simplest to show either `box.require('./foo')` or `box.require_relative('foo')`.
    In this PR, `box.require('foo')` is replaced with `box.require_relative('foo')` to make the intention of
    using a relative path explicit.

    This should reduce the chance that users trying Ruby Box will run into an unexpected error.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15687

commit 5064af7ed120b1d14ad5020ea39a4a6ff2a4a4ec
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-03 23:39:54 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-01-04 10:26:54 +0900

    [ruby/mmtk] Process obj_free candidates in parallel

    Redos commit 544770d which seems to have accidentally been undone in b27d935.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15793

commit a0c483fcfb9b8a2009cf21a8bce5fa2ad54d4fda
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-03 23:51:00 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-04 00:43:24 +0900

    Also output GC thread backtrace in rb_mmtk_gc_thread_bug

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15794

commit 5b87294d2fc84b7039a703cbbd02c7cf50c5b560
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-03 23:27:15 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-04 00:43:24 +0900

    Add rb_gc_print_backtrace

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15794

commit 65f9c4a06a17368c452bcda7f0e6325ea1d51eba
  Author:     Shannon Skipper <shannonskipper@gmail.com>
  AuthorDate: 2026-01-02 11:15:11 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-01-03 18:12:44 +0900

    Drop memberless Data/Struct#inspect trailing space

    Anonymous memberless Structs and Data were returning `#<struct >` and
    `#<data >` with a trailing space. Now they return `#<struct>` and
    `#<data>` to match attrless class behavior and look a bit more compact.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15784

commit b6463d59e7c52dd4493796ff1cbd10b5e25caaca
  Author:     Scott Myron <samyron@gmail.com>
  AuthorDate: 2026-01-03 11:47:59 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-03 17:30:20 +0900

    [ruby/json] Directly write to the output buffer when converting UTF32 to UTF8.

    https://github.com/ruby/json/commit/a51317c949

commit d7a6ff8224519005d2deeb3f4e98689a8a0835ad
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-03 15:03:57 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-03 15:03:57 +0900

    [Bug #21819] Data objects without members should also be frozen

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15792

commit a8a989b6f651b878c690f5fd0a728e19a54dd2b9
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-03 12:28:00 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-03 13:28:58 +0900

    Test net-imap with ruby/net-imap#593

    Delete test/net/imap/test_data_lite.rb, because the target of this
    test file has been deleted by [ruby/net-imap#543].

    [ruby/net-imap#543]: https://github.com/ruby/net-imap/pull/543

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15791

commit 2f4119eaea5416ae69c9256a72ab98237e221b91
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-03 06:37:25 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-03 09:02:22 +0900

    [ruby/mmtk] Use rb_mmtk_gc_thread_bug for rb_mmtk_call_object_closure

    https://github.com/ruby/mmtk/commit/308936296a

commit 60d9b10dab9c9e92518f5579e6d36006c0dd359d
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-03 06:36:05 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-03 09:02:22 +0900

    [ruby/mmtk] Propagate crash of GC thread to mutator thread

    This allows the mutator thread to dump its backtrace when a GC thread crashes.

    https://github.com/ruby/mmtk/commit/40ff9ffee7

commit 16feb46fa27fdbdec4f7a0914787300b77fa232a
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-02 20:33:34 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-03 08:07:44 +0900

    Convert Queue and SizedQueue to rb builtin

    A large part of `thread_sync.c` was migrated already, might as well
    go all the way. It also allow to remove a bunch of Rdoc commands.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15789

commit e7695ba3d9f0e8ee17025af4d42ecaf2dad47f29
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-03 01:41:24 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-03 05:42:11 +0900

    [ruby/mmtk] Check for T_NONE during marking

    https://github.com/ruby/mmtk/commit/c3e338bb25

commit 31fb970c18734455c2a2e6eb93bdc67db1edb88c
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-01 23:04:15 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-03 02:58:49 +0900

    [ruby/mmtk] Assert target is not pinned during normal tracing

    https://github.com/ruby/mmtk/commit/58210c88ed

commit c47a8052f6ecd3fb981416d6bfd918590572bb37
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-02 18:47:55 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-03 00:59:00 +0900

    Add a test case for complex argument forward reference

    Using `eval` it's possible to reference a later argument, and
    this requires careful initialization of the stack.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15777

commit 1596853428393136ee9964ad4c11b0120ed648d1
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2025-12-31 22:52:16 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-03 00:59:00 +0900

    Skip initializing optional arguments to `nil`

    They are optional because they have a default value, so I don't
    understand why we'd need to initialize them to nil.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15777

commit b9819ad06c883e6ea4f9e903c5bab06f175efb62
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-02 06:36:17 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-02 22:54:56 +0900

    Register a dupped identity hash as pinning

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15781

commit 177949c8b28587a0e0c0709d726cef846bdc51aa
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-02 20:57:00 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-02 21:51:36 +0900

    Speedup Queue initialization

    Rather than to push items one by one we can directly memcpy.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15787

commit 0ec5678cd55aa0f2d900d028497bb444c4ce4b7b
  Author:     git[bot] <svn-admin@ruby-lang.org>
  AuthorDate: 2026-01-02 15:55:45 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-02 15:55:45 +0900

    Update bundled gems list as of 2026-01-02

commit dd34d6273a08b821d049fd653db43b032674c7d8
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-02 09:26:54 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-02 13:13:40 +0900

    Extract git version only

    The version message may contain other info such as the distribution.
    e.g.:
    ```console
    $ /usr/bin/git --version
    git version 2.50.1 (Apple Git-155)
    ```

commit 0e9d69893007b1a17372fbc2fbcc7f0ee92be5fb
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-07-08 21:12:32 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-02 11:40:27 +0900

    Prefer dedicated assertions

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15783

commit acda63debc1e7d056d2fe934caa05a930f8f3f2d
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-01 05:02:25 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-01 23:03:49 +0900

    [ruby/mmtk] Format imports to be each on a new line

    https://github.com/ruby/mmtk/commit/42adba630e

commit 26a5bcd6de806fa460cafd0906651a66cac33e7e
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-01 02:29:01 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-01 21:30:20 +0900

    [ruby/prism] Fix spacing in the generated #each_child_node

    https://github.com/ruby/prism/commit/91f60cb736

commit 8ce61f90ba4aea3d52e92e258c3803b8b885726e
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2025-12-31 21:54:00 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-01 18:20:08 +0900

    Thread::Queue use a ring buffer

    Thread::Queue spends a significant amount of time in array functions,
    checking for invariants we know aren't a problem, and whether the backing
    array need to reordered.

    By using a ring buffer we can remove a lot of overhead (~23% faster).

    ```
    $ hyperfine './miniruby --yjit /tmp/q.rb' './miniruby-qrb --yjit /tmp/q.rb'
    Benchmark 1: ./miniruby --yjit /tmp/q.rb
      Time (mean ± σ):      1.050 s ±  0.191 s    [User: 0.988 s, System: 0.004 s]
      Range (min … max):    0.984 s …  1.595 s    10 runs

    Benchmark 2: ./miniruby-qrb --yjit /tmp/q.rb
      Time (mean ± σ):     844.2 ms ±   3.1 ms    [User: 840.4 ms, System: 2.8 ms]
      Range (min … max):   838.6 ms … 848.9 ms    10 runs

    Summary
      ./miniruby-qrb --yjit /tmp/q.rb ran
        1.24 ± 0.23 times faster than ./miniruby --yjit /tmp/q.rb
    ```

    ```
    q = Queue.new([1, 2, 3, 4, 5, 6, 7, 8])
    i = 2_000_000
    while i > 0
      i -= 1
      q.push(q.pop)
      q.push(q.pop)
      q.push(q.pop)
      q.push(q.pop)
      q.push(q.pop)
      q.push(q.pop)
      q.push(q.pop)
      q.push(q.pop)
      q.push(q.pop)
      q.push(q.pop)
    end
    ```

commit 41292562141118147c6a4eff5552097b0ecc79f0
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-01 05:41:47 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-01 11:57:01 +0900

    Use STR_SET_SHARED in str_duplicate_setup_heap

    str_duplicate_setup_heap is missing a call to rb_gc_register_pinning_obj
    that STR_SET_SHARED correctly calls.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15779

commit ea05c23ee8f258463156c3e3a276e2e16d777238
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-01 09:24:32 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-01-01 10:00:33 +0900

    Extract `RBIMPL_TYPEDDATA_PRECONDITION`

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15780

commit 7cf6cc83f3d34dbff6a30457fb008d87106f5e0c
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-01 01:36:19 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-01 02:47:43 +0900

    Register imemo_ment as a pinning object

    It sometimes pins itself when it is in the overloaded_cme table.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15778

commit b27d9353a73179f1f8e582d651382b1b4404cab2
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-31 23:56:58 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-31 23:56:58 +0900

    Use `is_obj_encoding` instead of `is_data_encoding`

    The argument to `is_data_encoding` is assumed to be `T_DATA`.

commit dbfedeb3a30be711fa17bf6ab9e1f4a83338f7d9
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-31 04:03:40 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2025-12-31 23:22:38 +0900

    [ruby/mmtk] Split ProcessObjFreeCandidates to parallel and non-parallel

    This makes it easier to visualize in profilers which one is non-parallel.

    https://github.com/ruby/mmtk/commit/ba68b2ef3b

commit 544770d566ae6b9cbdb79b24a555f10f60b3e5e3
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-31 03:42:21 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2025-12-31 23:22:38 +0900

    [ruby/mmtk] Process obj_free candidates in parallel

    This commit allows objects that are safe to be freed in parallel to do so.
    A decrease in object freeing time can be seen in profiles.

    The benchmarks don't show much difference.

    Before:

    --------------  --------------------  ----------  ---------
    bench           sequential free (ms)  stddev (%)  RSS (MiB)
    activerecord    242.3                 7.4         84.3
    chunky-png      439.1                 0.6         75.6
    erubi-rails     1221.2                4.2         132.7
    hexapdf         1544.8                1.8         429.1
    liquid-c        42.7                  7.4         48.5
    liquid-compile  41.4                  8.3         52.2
    liquid-render   100.6                 3.0         56.8
    mail            108.9                 2.1         65.1
    psych-load      1536.9                0.6         43.4
    railsbench      1633.5                2.6         146.2
    rubocop         126.5                 15.8        142.1
    ruby-lsp        129.6                 9.7         112.2
    sequel          47.9                  6.5         44.6
    shipit          1152.0                2.7         315.2
    --------------  --------------------  ----------  ---------

    After:

    --------------  ------------------  ----------  ---------
    bench           parallel free (ms)  stddev (%)  RSS (MiB)
    activerecord    235.1               5.5         87.4
    chunky-png      440.8               0.8         68.1
    erubi-rails     1105.3              0.8         128.0
    hexapdf         1578.3              4.1         405.1
    liquid-c        42.6                7.1         48.4
    liquid-compile  41.5                8.1         52.1
    liquid-render   101.2               2.8         53.3
    mail            109.7               2.7         64.8
    psych-load      1567.7              1.1         44.4
    railsbench      1644.9              1.9         150.9
    rubocop         125.6               15.4        148.5
    ruby-lsp        127.9               5.8         104.6
    sequel          48.2                6.1         44.1
    shipit          1215.3              4.7         320.5
    --------------  ------------------  ----------  ---------

    https://github.com/ruby/mmtk/commit/4f0b5fd2eb

commit 99249cc582177f05baf2a9c45e3fa21b891c70e9
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-31 21:40:16 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2025-12-31 21:44:18 +0900

    [ruby/json] Fix non-portable code

    A plain `char` may be `signed` or `unsigned` depending on the
    implementation.  Also, bitwise ORing of `signed` values ​​is not
    guaranteed to be `signed`.  To ensure portability, should logical-OR
    each comparison, but casting to `signed char` is usually sufficient.

    https://github.com/ruby/json/commit/8ad744c532

commit c97f5d591b17b8194b8ddfccc6fb9d94b66c6bce
  Author:     Scott Myron <samyron@gmail.com>
  AuthorDate: 2025-12-31 12:32:03 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2025-12-31 19:07:33 +0900

    [ruby/json] Simplify unescape_unicode

    https://github.com/ruby/json/commit/976ba36629

    Co-Authored-By: Jean Boussier <jean.boussier@gmail.com>

commit 61d45c857b6f92ef0df853cdeba02aefd0e6ffc4
  Author:     Scott Myron <samyron@gmail.com>
  AuthorDate: 2025-12-31 11:48:18 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2025-12-31 18:54:25 +0900

    [ruby/json] Keep track of the the number of additional backslashes to avoid an extra memchr searching the remaining characters when no more backslashes exist.

    https://github.com/ruby/json/commit/d21d9362fa

commit 094145fbc11afc444c8cd641e0715172f1c8a3db
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-31 17:54:42 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-31 17:54:42 +0900

    [DOC] Move typed-data related macros

    The flags for `rb_data_type_t::flags` are public constants for
    defining `rb_data_type_t`.  The embedded data flag and mask are
    internal implementation detail.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15775

commit d95bebe06c076cdf6951b81665e2b2e779937123
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-31 11:29:29 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-31 11:29:29 +0900

    Make `RTYPEDDATA_EMBEDDABLE_P` internal-use only

    It should not be exposed because it is so implementation specific that
    it is only used in gc.c even within the entire Ruby source tree.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15774

commit c352808fa9eb650ce8c1b268a348ad553df55caa
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-31 11:27:46 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-31 11:27:46 +0900

    Introduce typed-data embeddable predicate macros

    The combination of `&` and `&&` is confusing.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15774

commit 9d37155cfc74258374134cbcc64f796b01f807d5
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-31 03:01:06 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2025-12-31 03:02:00 +0900

    [ruby/mmtk] Use MMTK_HEAP_COUNT for SIZE_POOL_COUNT

    https://github.com/ruby/mmtk/commit/290a2aec4e

commit d40e056cc8cb5c21fb3f7c25bf9463548dd14873
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-31 02:24:21 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-31 02:24:21 +0900

    Skip the hang-up test on Windows

commit 3086d58263b36d364a1187cd7678e6020806e6f3
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-31 01:34:43 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-31 02:24:03 +0900

    Run also test-tool on mingw

commit b7bf8c20b045c4dce5daa894d95d48c0983b9481
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-30 23:48:20 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-31 00:59:21 +0900

    Add RVALUE_OLD_AGE to GC::INTERNAL_CONSTANTS for MMTk

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15772

commit f2833e358cf58c3e69038cab80e87e40b7694541
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-30 23:46:42 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-31 00:59:21 +0900

    Fix generational GC for weak references

    Fixes issue pointed out in https://bugs.ruby-lang.org/issues/21084#note-7.
    The following script crashes:

        wmap = ObjectSpace::WeakMap.new

        GC.disable # only manual GCs
        GC.start
        GC.start

        retain = []
        50.times do
          k = Object.new
          wmap[k] = true
          retain << k
        end

        GC.start # wmap promoted, other objects still young

        retain.clear

        GC.start(full_mark: false)

        wmap.keys.each(&:itself) # call method on keys to cause crash

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15772

commit c05e10605e46106397fb4af4ea0f322c4d6d68ea
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2025-12-30 23:30:31 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2025-12-31 00:02:39 +0900

    Exclude rbs tests which need updates for {Method,UnboundMethod,Proc}#source_location

    * See https://github.com/ruby/ruby/pull/15580

commit a7fec4d6619384b0b0277e751a56f7b91e5d8d5b
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2025-12-30 20:47:01 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2025-12-31 00:02:39 +0900

    Update version guards in ruby/spec

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15580

commit c970d2941d56a862bb9bb3b808cb588c2982f436
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2025-12-16 05:46:17 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2025-12-31 00:02:39 +0900

    [Bug #21784] Fix the Proc#source_location start_column for stabby lambdas

    * Consistent with plain `blocks` and `for` blocks and methods
      where the source_location covers their entire definition.
    * Matches the documentation which mentions
      "where the definition starts/ends".
    * Partially reverts d357d50f0a74409446f4cccec78593373f5adf2f
      which was a workaround to be compatible with parse.y.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15580

commit cd66d15858a06406d1de854f3e9690d3557a9864
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2025-12-16 17:52:31 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2025-12-31 00:02:39 +0900

    [Bug #21783] Fix documentation of {Method,UnboundMethod,Proc}#source_location

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15580

commit d82fc3360d7cfa7e1e1a4dddb668b4c38808538a
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2025-12-16 17:48:41 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2025-12-31 00:02:39 +0900

    Reapply "[Feature #6012] Extend `source_location` for end position

    * This reverts commit 065c48cdf11a1c4cece84db44ed8624d294f8fd5.
    * This functionality is very valuable and has already taken 14 years
      to agree on the API.
    * Let's just document it's byte columns (in the next commit).
    * See https://bugs.ruby-lang.org/issues/21783#note-9

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15580

commit 19e539c9ee1701b34189fa0c1feb942adeb0e326
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-30 23:00:18 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-30 23:00:18 +0900

    [Bug #21814] Fix negative bignum modulo

    If modulo is zero, do not  apply bias even if the divisor is zero.
    `BIGNUM_POSITIVE_P` is true even on bignum zero.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15771

commit 966dbba8db970f13065a35d893662a981d0abae5
  Author:     Satoshi Tagomori <s-tagomori@sakura.ad.jp>
  AuthorDate: 2025-12-30 22:01:54 +0900
  Commit:     Satoshi Tagomori <tagomoris@gmail.com>
  CommitDate: 2025-12-30 22:31:51 +0900

    Box: skip checking the current box is the root box

    Because checking the current box is not a cheap process.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15769

commit 27d6c966583c65c9ffd02f931d9c4efe8d7232e0
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-30 17:58:44 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-30 18:33:20 +0900

    Add 4.0 to the spec_guards workflow

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15768

commit 3f616d5701592360cf07dae885aa706596ad07fd
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-30 18:33:03 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-30 18:33:03 +0900

    Update ruby/setup-ruby action to v1.276.0

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15768

commit d5af8d785888f3af5efb844be5948df71d777b22
  Author:     Satoshi Tagomori <s-tagomori@sakura.ad.jp>
  AuthorDate: 2025-12-30 14:46:19 +0900
  Commit:     Satoshi Tagomori <tagomoris@gmail.com>
  CommitDate: 2025-12-30 17:06:34 +0900

    Box: allocate classes as boxable when it happens in the root box

    Without this change, classes (including iclass) are allocated
    as un-boxable classes after initializing user boxes (after starting
    script evaluation). Under this situation, iclasses are created as
    un-boxabled class when core modules are included by a class in the
    root box, then it causes problems because it's in the root box but
    it can't have multiple classexts.

    This change makes it possible to allocate boxable classes even after
    initializing user boxes. Classes create in the root box will be
    boxable, and those can have 2 or more classexts.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15767

commit 65634d8df57ea1636efffb5f040fa31c156d307f
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2025-12-23 22:41:09 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2025-12-29 23:14:00 +0900

    [ruby/prism] Optimize ruby visitor

    `compact_child_nodes` allocates an array. We can skip that step by simply yielding the nodes.

    Benchmark for visiting the rails codebase:

    ```rb
    require "prism"
    require "benchmark/ips"

    files = Dir.glob("../rails/**/*.rb")
    results = files.map { Prism.parse_file(it) }
    visitor = Prism::Visitor.new

    Benchmark.ips do |x|
      x.config(warmup: 3, time: 10)

      x.report do
        results.each do
          visitor.visit(it.value)
        end
      end
    end

    RubyVM::YJIT.enable

    Benchmark.ips do |x|
      x.config(warmup: 3, time: 10)

      x.report do
        results.each do
          visitor.visit(it.value)
        end
      end
    end
    ```

    Before:
    ```
    ruby 3.4.8 (2025-12-17 revision https://github.com/ruby/prism/commit/995b59f666) +PRISM [x86_64-linux]
    Warming up --------------------------------------
                             1.000 i/100ms
    Calculating -------------------------------------
                              2.691 (± 0.0%) i/s  (371.55 ms/i) -     27.000 in  10.089422s
    ruby 3.4.8 (2025-12-17 revision https://github.com/ruby/prism/commit/995b59f666) +YJIT +PRISM [x86_64-linux]
    Warming up --------------------------------------
                             1.000 i/100ms
    Calculating -------------------------------------
                              7.278 (±13.7%) i/s  (137.39 ms/i) -     70.000 in  10.071568s
    ```
    After:
    ```
    ruby 3.4.8 (2025-12-17 revision https://github.com/ruby/prism/commit/995b59f666) +PRISM [x86_64-linux]
    Warming up --------------------------------------
                             1.000 i/100ms
    Calculating -------------------------------------
                              3.429 (± 0.0%) i/s  (291.65 ms/i) -     35.000 in  10.208580s
    ruby 3.4.8 (2025-12-17 revision https://github.com/ruby/prism/commit/995b59f666) +YJIT +PRISM [x86_64-linux]
    Warming up --------------------------------------
                             1.000 i/100ms
    Calculating -------------------------------------
                             16.815 (± 0.0%) i/s   (59.47 ms/i) -    169.000 in  10.054668s
    ```

    ~21% faster on the interpreter, ~56% with YJIT

    https://github.com/ruby/prism/commit/bf631750cf

commit 14fbcf0e6ed37c4a0d15fd3f016778465f774f2c
  Author:     Thomas Marshall <thomas@thomasmarshall.com>
  AuthorDate: 2025-12-29 21:55:18 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2025-12-29 23:12:20 +0900

    [ruby/prism] Report missing end errors at opening token

    This commit adds an `expect1_opening` function that expects a token and
    attaches the error to the opening token location rather than the current
    position. This is useful for errors about missing closing tokens, where
    we want to point to the line with the opening token rather than the end
    of the file.

    For example:

    ```ruby
    def foo
    def bar
    def baz
           ^ expected an `end` to close the `def` statement
           ^ expected an `end` to close the `def` statement
           ^ expected an `end` to close the `def` statement
    ```

    This would previously produce three identical errors at the end of the
    file. After this commit, they would be reported at the opening token
    location:

    ```ruby
    def foo
    ^~~ expected an `end` to close the `def` statement
    def bar
    ^~~ expected an `end` to close the `def` statement
    def baz
    ^~~ expected an `end` to close the `def` statement
    ```

    I considered using the end of the line where the opening token is
    located, but in some cases that would be less useful than the opening
    token location itself. For example:

    ```ruby
    def foo def bar def baz
    ```

    Here the end of the line where the opening token is located would be the
    same for each of the unclosed `def` nodes.

    https://github.com/ruby/prism/commit/2d7829f060

commit 8afd4fade69b3a53a5e309499595f7b192f87726
  Author:     Thomas Marshall <thomas@thomasmarshall.com>
  AuthorDate: 2025-12-29 21:54:28 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2025-12-29 23:12:20 +0900

    [ruby/prism] Add unterminated construct tests

    https://github.com/ruby/prism/commit/166764f794

commit 782d959f674b5088377191a4b34ed2f5bbb7c022
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-27 01:55:42 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-29 23:03:31 +0900

    Implement moving Immix in MMTk

    This commit implements moving Immix in MMTk, which allows objects to move
    in the GC.

    The performance of this implementation is not yet amazing. It is very
    similar to non-moving Immix in many of them and slightly slower in others.
    The benchmark results is shown below.

        --------------  -----------------  ----------  ---------
        bench           Moving Immix (ms)  stddev (%)  RSS (MiB)
        activerecord    241.9              0.5         86.6
        chunky-png      447.8              0.8         74.9
        erubi-rails     1183.9             0.8         136.1
        hexapdf         1607.9             2.6         402.3
        liquid-c        45.4               6.7         44.9
        liquid-compile  44.1               9.3         53.0
        liquid-render   105.4              4.5         55.9
        lobsters        650.1              9.7         418.4
        mail            115.4              2.1         64.4
        psych-load      1656.8             0.8         43.6
        railsbench      1653.5             1.3         149.8
        rubocop         127.0              15.6        142.1
        ruby-lsp        130.7              10.5        99.4
        sequel          52.8               7.2         45.6
        shipit          1187.0             3.9         311.0
        --------------  -----------------  ----------  ---------

        --------------  ---------------------  ----------  ---------
        bench           Non-moving Immix (ms)  stddev (%)  RSS (MiB)
        activerecord    218.9                  2.7         86.1
        chunky-png      464.6                  0.8         66.7
        erubi-rails     1119.0                 4.3         132.7
        hexapdf         1539.8                 1.8         425.2
        liquid-c        40.6                   6.9         45.2
        liquid-compile  40.6                   8.1         52.9
        liquid-render   99.3                   2.3         48.3
        mail            107.4                  5.3         65.4
        psych-load      1535.6                 1.0         39.5
        railsbench      1565.6                 1.1         149.6
        rubocop         122.5                  14.3        146.7
        ruby-lsp        128.4                  10.7        106.4
        sequel          44.1                   4.0         45.7
        shipit          1154.5                 2.7         358.5
        --------------  ---------------------  ----------  ---------

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15744

commit 7902ae34d01a142fcbc0f669d93b1af5664ece42
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-25 10:38:22 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-29 23:03:31 +0900

    Add rb_gc_move_obj_during_marking

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15744

commit 01cd9c9fade0c1c6f13f11c86e86c0caeefd38bc
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-24 01:45:16 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-29 23:03:31 +0900

    Add rb_gc_register_pinning_obj

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15744

commit 56147001ec439a7d6b887402c8a66d3ee625e598
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-23 09:38:47 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-29 23:03:31 +0900

    Move MEMO_NEW to imemo.c and rename to rb_imemo_memo_new

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15744

commit da89f7f58d6e0a662dfdeaf7df7aea9e3e7c02b5
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-29 20:26:00 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-29 20:26:00 +0900

    Prefer `ALLOCV` over `ALLOCA` for unknown size

    `ALLOCA` with too large size may result in stack overflow.
    Incidentally, this suppresses the GCC false maybe-uninitialized
    warning in `product_each`.

    Also shrink `struct product_state` when `sizeof(int) < sizeof(VALUE)`.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15765

commit 26088dcd4a1f1784ae24387ce6a98fcad48749c5
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-29 18:41:58 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-29 18:41:58 +0900

    [DOC] State that `rb_unexpected_type` is private

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15764

commit 56a6a21f28bd2b47bc96c58ae276b272933e7f62
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-29 18:19:28 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-29 18:40:48 +0900

    Return `NULL` in a `void *` function

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15764

commit 0f64da9672d88921439f6fdb306d16fece9b9c90
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-29 18:14:28 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-29 18:40:47 +0900

    Make `rb_check_typeddata` and `rbimpl_check_typeddata` identical

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15764

commit 72627d85e337e5d8c7fa5738dc4ec7f253f0738e
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-29 12:52:29 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-29 18:20:36 +0900

    Declare `rb_data_typed_t` parameters and return values as  nonull

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15764

commit 4e0bb58a0a374b40b7691e7b7aa88e759a0fc9f2
  Author:     Luke Jahnke <luke.jahnke@gmail.com>
  AuthorDate: 2025-12-29 14:51:17 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2025-12-29 17:21:33 +0900

    fix underflow

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15763

commit 38701a4de83c72d855ce79f898526d5f079c96c5
  Author:     Jeremy Evans <code@jeremyevans.net>
  AuthorDate: 2025-12-29 11:48:45 +0900
  Commit:     Jeremy Evans <code@jeremyevans.net>
  CommitDate: 2025-12-29 14:54:41 +0900

    Remove deprecated support for to_set taking arguments

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15761

commit cb01b9023ec2007c03bddc992416c33f2c59a0e1
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-29 03:15:03 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-29 10:33:31 +0900

    rtypeddata.h: Add missing `RBIMPL_CAST`

    In public headers, casts should be enclosed in `RBIMPL_CAST` for
    compilation in C++.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15760

commit 9e78353c0f840bf4aa7cceb4d1676f4d090d0096
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-29 05:43:36 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-29 06:25:49 +0900

    Fix maybe uninitialized warnings in random.c

    Fixes the following compiler warnings:

        random.c: In function `random_init`:
        random.c:416:38: warning: `rng` may be used uninitialized in this function [-Wmaybe-uninitialized]
          416 |     unsigned int major = rng->version.major;
              |                          ~~~~~~~~~~~~^~~~~~
        random.c: In function `random_bytes`:
        random.c:1284:8: warning: `rng` may be used uninitialized in this function [-Wmaybe-uninitialized]
        1284 |     rng->get_bytes(rnd, ptr, n);
             |     ~~~^~~~~~~~~~~
        random.c:1299:34: note: `rng` was declared here
        1299 |     const rb_random_interface_t *rng;
             |                                  ^~~
        random.c: In function `rand_random_number`:
        random.c:1606:12: warning: `rng` may be used uninitialized in this function [-Wmaybe-uninitialized]
        1606 |     return rand_range(obj, rng, rnd, vmax);
             |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        random.c:1624:34: note: `rng` was declared here
        1624 |     const rb_random_interface_t *rng;
              |                                  ^~~
        random.c: In function `random_rand`:
        random.c:1120:15: warning: `rng` may be used uninitialized in this function [-Wmaybe-uninitialized]
        1120 |     return rng->get_int32(rnd);
             |            ~~~^~~~~~~~~~~
        random.c:1573:34: note: `rng` was declared here
        1573 |     const rb_random_interface_t *rng;
             |                                  ^~~

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15759

commit d615dbf4e28d26c3fd7a54ad58d7365521378599
  Author:     Burdette Lamar <BurdetteLamar@Yahoo.com>
  AuthorDate: 2025-12-29 05:51:10 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2025-12-29 05:51:10 +0900

    [DOC] Japanese for multi-byte characters

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15752

    Merged-By: peterzhu2118 <peter@peterzhu.ca>

commit 44e762a99c2234756594382f36fc64db1d6c31d0
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-28 13:49:02 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-29 02:01:12 +0900

    Extract `rb_random_interface_t`  alongside `rb_random_t` as well

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15758

commit 68cd46353c34cd87917930f80925b2ac8ddaaa9b
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-28 13:38:39 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-29 02:01:12 +0900

    Ensure `T_DATA` before `RTYPEDDATA_P`

    For the precondition of `RTYPEDDATA_P` that the argument must be a
    Ruby object of `::RUBY_T_DATA`.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15758

commit eaa83e505fdcddd1d354f1d9a375b22f33748060
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-28 03:19:56 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-28 22:55:38 +0900

    Always allocate Fiber objects in Thread

    Currently, root fibers of threads do not have a corresponding Ruby object
    backing it by default (it does have one when an object is required, such
    as when Fiber.current is called). This is a problem for the new GC weak
    references design in #12606 since Thread is not declared as having weak
    references but it does hold weak references (the generic ivar cache).

    This commit changes it to always allocate a Fiber object for the root
    fiber.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15753

commit 3fe2ebf8e4127bca0a57d4ed8eb6035792420a26
  Author:     Misaki Shioi <31817032+shioimm@users.noreply.github.com>
  AuthorDate: 2025-12-28 17:23:50 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2025-12-28 17:23:50 +0900

    Remove unnecessary comparison from is_local_port_fixed (#15757)

    Simplify the conditions:
    - Return false if the port is 0 or a negative number
    - Return true if the port is a positive number

  Notes:
    Merged-By: shioimm <shioi.mm@gmail.com>

commit 6544c89708d94b894012e0587f770f33bbce4a3b
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-27 18:32:07 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-28 10:34:17 +0900

    Skip the hang-up test on mingw

commit 8415f8faccffd426ed9c1168abddc2b3e727b659
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2025-12-27 06:24:52 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-28 03:28:57 +0900

    [DOC] Use Japanese for multi-byte characters

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15746

commit a92c0342dd35efac8c08845b23412e5f70ecd769
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2025-12-27 23:12:02 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-28 00:59:48 +0900

    [DOC] Japanese only for multi-byte chars examples

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15750

commit 38d24294acdf2fba8ab54fc05483e881b16dc7f1
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2025-12-27 22:50:32 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-28 00:59:23 +0900

    [DOC] Multibyte chars Japanese only

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15749

commit a8c3d5e127776d74eb068c95610277feb99adcf0
  Author:     Misaki Shioi <31817032+shioimm@users.noreply.github.com>
  AuthorDate: 2025-12-27 18:26:56 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2025-12-27 18:26:56 +0900

    Fix: Do not fast_fallback if local_port is explicitly specified (#15732)

    `fast fallback` cannot be used with explicitly specified local port,
    because concurrent binds to the same `local_host:local_port`
    can raise `Errno::EADDRINUSE`.

    This issue is more likely to occur on hosts with `IPV6_V6ONLY` disabled,
    because IPv6 binds can also occupy IPv4-mapped IPv6 address space.

  Notes:
    Merged-By: shioimm <shioi.mm@gmail.com>

commit 3c9e61f5ef8190e082b36e056f59be49692ae8aa
  Author:     Kazuki Yamaguchi <k@rhe.jp>
  AuthorDate: 2025-12-27 16:18:58 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2025-12-27 16:46:03 +0900

    [ruby/openssl] cipher: remove incorrect assertion in Cipher#update

    Commit https://github.com/ruby/openssl/commit/1de3b80a46c2 (cipher: make output buffer String independent,
    2024-12-10) ensures the output buffer String has sufficient capacity,
    but the length can be shorter. The assert() is simply incorrect and
    should be removed.

    Also remove a similar assert() in Cipher#final. While not incorrect, it
    is not useful either.

    https://github.com/ruby/openssl/commit/0ce6ab97dd

commit b8201a09e026b3f2948a19eddf1341eb4b9668cf
  Author:     git[bot] <svn-admin@ruby-lang.org>
  AuthorDate: 2025-12-27 15:53:51 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2025-12-27 15:53:51 +0900

    Update bundled gems list as of 2025-12-27

commit dedde996762dbed72d3f1e11a02d69a9d080edc4
  Author:     Burdette Lamar <BurdetteLamar@Yahoo.com>
  AuthorDate: 2025-12-27 05:06:21 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2025-12-27 05:06:21 +0900

    [DOC] Use Japanese for multi-byte characters (#15745)

  Notes:
    Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>

commit 7b3b1a1442a6665ab300207bf064ae360272525a
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-27 00:04:51 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-27 00:14:04 +0900

    [DOC] Use self in call-seq for Method#call

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15743

commit 6ae69e9ac1db89c0ee2e8ced251cc31e7f0c96d2
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-27 00:03:49 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-27 00:14:04 +0900

    [DOC] Remove args from call-seq of Method#call

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15743

commit b304c149aa2fe845872ccdf6ea88e7fe155c61f3
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2025-12-26 17:14:57 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2025-12-26 21:05:29 +0900

    [DOC] Remove outdated documentation about command injection

    [Feature #19630]

    This dangerous behavior was removed in 4.0 (996cae65f3cc8fed60c6bb758b00882cac49389d)
    but the documentation wasn't updated.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15740

commit c3424615821192488f644d41eff21fa349a1eb2f
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-26 19:33:03 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-26 19:33:03 +0900

    Remove an useless macro definition `RSTRUCT_PTR`

    The underlying definition, `rb_struct_ptr`, was removed four years
    ago.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15741

commit 8c7b1401a50687dfd1d0c253c03eefdb8815154a
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-08 14:16:11 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-26 17:53:23 +0900

    Remove `rb_iterate` deprecated since 1.9

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15739

commit 2ac4cc0a1bcd55be456aa12c1b6d7f52a5725fed
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-08 14:01:39 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-26 17:53:23 +0900

    Remove `RUBY_FL_DUPPED` deprecated for 4 years

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15739

commit a3ac83b7b86f61f3bb9f82bba69e06e7cbc6a592
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-08 13:59:50 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-26 17:53:22 +0900

    Remove taintedness/trustedness enums/macros deprecated for 4 years

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15739

commit a447d39da267cff10a4e8d07e74d65b6c4e64207
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-08 13:47:51 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-26 17:02:42 +0900

    Remove `rb_gc_force_recycle` deprecated as "removed soon"

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15739

commit cf60dc2642b6c84794e7b6a1a2a1eff4b2e0f1cf
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-08 13:44:46 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-26 17:02:42 +0900

    Remove `rb_clone_setup` and `rb_dup_setup` deprecated for 4 years

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15739

commit a41b1540291d1469caae58d2271f3671aee7431c
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-08 13:25:52 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-26 17:02:42 +0900

    Remove `rb_complex_polar` deprecated for 7 years

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15739

commit f84110e601399c389f6d0c4b3c59be97e6dff935
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-08 13:19:20 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-26 17:02:41 +0900

    Remove old APIs to allocate a data object deprecated for 5 years

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15739

commit 5c2f6639c53c2dcde60544b1b53ab8f5d10cd12f
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-08 13:05:02 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-26 16:48:16 +0900

    Remove `rb_clear_constant_cache` deprecated for 3 years

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15739

commit 1ca464347a526ec6539df37146a0005f95f6e3db
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2024-06-04 09:27:35 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-26 15:11:23 +0900

    CI: Warn deprecated features to be removed at this version

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15738

commit ccc8610b660ef225b304aae7b820bad036621a87
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2024-06-04 00:21:33 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-26 15:11:23 +0900

    Remove `RUBY_GC_HEAP_INIT_SLOTS` environment variable

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15738

commit 4c07e61bc937b39774862e33bbac8c9c234f3dbf
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2024-10-24 19:35:05 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-26 15:11:23 +0900

    Deprecate old VC

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15738

commit 0b65ac6daff08dd30ee66e85f9bcfe756d27b742
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2024-10-24 18:39:51 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-26 15:11:23 +0900

    Remove a no longer used prototype declaration in re.c

    Include internal/error.h instead.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15738

commit 704ac72fb67bc431c7d77d0d0aaa7e5b5331b096
  Author:     Yusuke Endoh <mame@ruby-lang.org>
  AuthorDate: 2025-12-25 00:08:38 +0900
  Commit:     Yusuke Endoh <mame@ruby-lang.org>
  CommitDate: 2025-12-26 14:20:00 +0900

    Clarify the intent of the test for "ruby -h" to fit in 80x25

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15724

commit b01fd2d8c3195cc9936f6be6f89df0de12394a28
  Author:     Andrii Furmanets <furmanets.andriy@gmail.com>
  AuthorDate: 2025-12-25 19:05:06 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2025-12-26 14:05:11 +0900

    Fix RSET_IS_MEMBER macro parameter mismatch

    The RSET_IS_MEMBER macro had a parameter named 'sobj' but the macro
    body used 'set' instead, causing the first argument to be ignored.

    This worked by accident because all current callers use a variable
    named 'set', but would cause compilation failure if called with a
    differently named variable:

        error: use of undeclared identifier 'set'

    Changed the parameter name from 'sobj' to 'set' to match the macro
    body and be consistent with other RSET_* macros.

commit bad7dd5d74e9d14e84faf8cc8907dcdfdb8751e8
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-26 09:16:36 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-26 13:27:32 +0900

    [DOC] Separate updated gems lists into sections in NEWS.md

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15735

commit 594dd8bfd4c2b380dc7185d421d71b29c379356b
  Author:     Takashi Sakaguchi <takashi.sakaguchi@ummm.info>
  AuthorDate: 2025-12-26 12:37:46 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2025-12-26 12:38:16 +0900

    [ruby/pp] Support private instance_variables_to_inspect
    (https://github.com/ruby/pp/pull/70)

    * Support private instance_variables_to_inspect in pp

    Ruby supports calling instance_variables_to_inspect even when
    it is defined as a private method ([ruby/ruby#13555](https://github.com/ruby/ruby/pull/13555)).

    This change aligns pp with Ruby's behavior.

    https://github.com/ruby/pp/commit/8450e76db6

commit 9824724b2ffe583302e9318c6eff7a440478125f
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2025-12-26 11:39:43 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 12:12:05 +0900

    Skip test_write_binary(GemSingletonTest) at rbs tests

    ```
    Errno::EACCES: Permission denied @ rb_file_s_rename
    ...
    D:/a/ruby/ruby/src/lib/rubygems/util/atomic_file_writer.rb:42:in 'File.rename'
    ```

    It may caused with atomic_file_writer.rb

commit 02275b1e53339f34e46b7e69e1512895ea105042
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2025-12-26 11:11:56 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 12:12:05 +0900

    uutils-coreutils 0.5.0 has been removed uutils wrapper

commit 565ea26ad10ea8c3c6ce9bdae6cbb78353a9ad36
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2025-12-26 10:14:16 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    Disabled to run lobsters benchmark because it didn't work with Ruby 4.1 yet

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 89af235435a911d86e04abdb1a54f4fe25dcaa6a
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2025-12-26 09:44:55 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    Added ruby_41? platform

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 93df96684860ea437de982d6778fc9d845d0505a
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2025-12-26 09:37:17 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    Mark development version for unreleased gems

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 70c7f3ad77c09e379b9e7ffb8009ccc2cb47f234
  Author:     Sutou Kouhei <kou@clear-code.com>
  AuthorDate: 2025-12-17 14:28:48 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/strscan] Bump version

    https://github.com/ruby/strscan/commit/747a3b5def

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit fda7019c80c1026ee89ba772fb7db547c89e541a
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2025-12-08 21:06:08 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/net-protocol] Add Net::Protocol::TCP_SOCKET_NEW_HAS_OPEN_TIMEOUT

    * To find out efficiently if TCPSocket#initialize supports the open_timeout keyword argument.

    https://github.com/ruby/net-protocol/commit/738c06f950

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 4d7db86a794581f1be405dcc70bb06549b8cf28f
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2025-12-22 17:16:09 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/json] Add missing documentation for `allow_control_characters` parsing option

    https://github.com/ruby/json/commit/a5c160f372

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 8ccfb375b9ade4504c4012ce8c31adc7e12dc49c
  Author:     久我山菜々 <nna@nna774.net>
  AuthorDate: 2025-12-19 01:30:37 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/json] Update `fpconv_dtoa` definition to use `dest[32]`

    https://github.com/ruby/json/commit/4808fee9af

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 1f526b348978bf71efc75f562227c1e872df27fd
  Author:     Taketo Takashima <t.taketo1113@gmail.com>
  AuthorDate: 2025-12-17 23:39:43 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/ipaddr] Follow-up fix for InvalidAddressError messages

    https://github.com/ruby/ipaddr/commit/b92ef74b91

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit f3149af35a30c4eb334006faef729a6e514d4cf2
  Author:     Koichi ITO <koic.ito@gmail.com>
  AuthorDate: 2025-12-21 05:58:23 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/prism] Sync `Prism::Translation::ParserCurrent` with Ruby 4.0

    This PR updates the fallback version for `Prism::Translation::ParserCurrent` from 3.4 to 4.0.

    Currently, the fallback resolves to `Parser34`, as shown below:

    ```console
    $ ruby -v -rprism -rprism/translation/parser_current -e 'p Prism::Translation::ParserCurrent'
    ruby 3.0.7p220 (2024-04-23 revision https://github.com/ruby/prism/commit/724a071175) [x86_64-darwin23]
    warning: `Prism::Translation::Current` is loading Prism::Translation::Parser34, but you are running 3.0.
    Prism::Translation::Parser34
    ```

    Following the comment "Keep this in sync with released Ruby.",
    it seems like the right time to set this to Ruby 4.0, which is scheduled for release this week.

    https://github.com/ruby/prism/commit/115f0a118c

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 44a17656842a567eb82c43024daaf9fcaff61e5d
  Author:     t-mangoe <m.takashi.xpair@gmail.com>
  AuthorDate: 2025-12-21 09:16:58 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/timeout] add test case for string argument

    https://github.com/ruby/timeout/commit/fef9d07f44

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit f8d0960af260219ab7c10a797ac62ecad25b2974
  Author:     Jean-Samuel Aubry-Guzzi <js.aubry@shopify.com>
  AuthorDate: 2025-12-09 01:22:55 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/resolv] Handle TCP Requester #recv_reply incomplete data

    https://github.com/ruby/resolv/commit/9c640bdc4a

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 4b7bbd43408f230997e216a557d586edd492172d
  Author:     Jean-Samuel Aubry-Guzzi <js.aubry@shopify.com>
  AuthorDate: 2025-10-29 21:31:26 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/resolv] Fix TCP Requester #recv_reply

    https://github.com/ruby/resolv/commit/96dc3d15fe

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 74becf1b61272c66e835c446525920eae0b8574a
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2025-12-26 09:32:02 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    Start to develop 4.1.0.dev

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit bdbe8d50150447748eaa92a0cce7327d8dec9903
  Author:     eileencodes <eileencodes@gmail.com>
  AuthorDate: 2025-11-26 04:17:03 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/rubygems] Write gem files atomically

    This change updates `write_binary` to use a new class,
    `AtomicFileWriter.open` to write the gem's files. This implementation
    is borrowed from Active Support's [`atomic_write`](https://github.com/rails/rails/blob/main/activesupport/lib/active_support/core_ext/file/atomic.rb).

    Atomic write will write the files to a temporary file and then once
    created, sets permissions and renames the file. If the file is corrupted
    - ie on failed download, an error occurs, or for some other reason, the
    real file will not be created. The changes made here make `verify_gz`
    obsolete, we don't need to verify it if we have successfully created the
    file atomically. If it exists, it is not corrupt. If it is corrupt, the
    file won't exist on disk.

    While writing tests for this functionality I replaced the
    `RemoteFetcher` stub with `FakeFetcher` except for where we really do
    need to overwrite the `RemoteFetcher`. The new test implementation is much
    clearer on what it's trying to accomplish versus the prior test
    implementation.

    https://github.com/ruby/rubygems/commit/0cd4b54291

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit c5376a3a167cbb90023e7610a4fafda22a5c381c
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2025-12-05 11:11:31 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/rubygems] Remove deprecated, unused Gem::List

    https://github.com/ruby/rubygems/commit/43371085f4

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 8024245854ac9e92947e7bd4a58223d8998d3893
  Author:     Maciej Mensfeld <maciej@mensfeld.pl>
  AuthorDate: 2025-12-18 22:03:00 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/date] remove conditional for uint64_t

    https://github.com/ruby/date/commit/47778c32d8

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 5960fb9fa000898b863565a8f48b81fd25bff88a
  Author:     Maciej Mensfeld <maciej@mensfeld.pl>
  AuthorDate: 2025-12-18 20:43:22 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/date] remove redundant code

    https://github.com/ruby/date/commit/5e6a458179

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit bcaa127ecd4f408299c8514569329df1b124f556
  Author:     Maciej Mensfeld <maciej@mensfeld.pl>
  AuthorDate: 2025-12-18 20:36:36 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/date] code remarks, macros and r2.6 support

    https://github.com/ruby/date/commit/2682dc79c0

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit ea03f263b51cfae3163e19dad5800c3a54d7cd1c
  Author:     Maciej Mensfeld <maciej@mensfeld.pl>
  AuthorDate: 2025-12-18 18:38:51 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/date] improve styling

    https://github.com/ruby/date/commit/cd7a329dfd

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit f09e35ee4a5283c1b6185383f9b89eb4caf99868
  Author:     Maciej Mensfeld <maciej@mensfeld.pl>
  AuthorDate: 2025-12-18 17:36:35 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/date] [ruby/date] Optimize Gregorian date conversions with Neri-Schneider algorithm

    Replace floating-point arithmetic and iterative loops with pure integer
    operations for ~40% faster Date operations. Date.ordinal and Date.commercial
    are ~2x faster due to O(1) first-day-of-year calculation.

    Reference: https://arxiv.org/abs/2102.06959

    https://github.com/ruby/date/commit/cc639549d6

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit ae46f916f1e686b5f7cc80402f2e8b5f299abc3c
  Author:     Burdette Lamar <BurdetteLamar@Yahoo.com>
  AuthorDate: 2025-12-23 09:43:58 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/stringio] [DOC] Doc for StringIO#read
    (https://github.com/ruby/stringio/pull/197)

    Previous doc merely linked to `IO#read`; new doc stays local, shows
    examples using `StringIO`.

    https://github.com/ruby/stringio/commit/e8b66f8cdd

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 9a76ccdbabbd7d2814a3106cc10d2740b6120ab9
  Author:     Burdette Lamar <BurdetteLamar@Yahoo.com>
  AuthorDate: 2025-12-23 09:43:00 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/stringio] [DOC] Doc for StringIO#putc
    (https://github.com/ruby/stringio/pull/196)

    Previous doc merely linked to `IO#putc`. The new doc stays local,
    provides examples using `StringIO` objects.

    https://github.com/ruby/stringio/commit/8983f32c50

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 354dc574de421e6cbfb4404abc49a5be462042a9
  Author:     Burdette Lamar <BurdetteLamar@Yahoo.com>
  AuthorDate: 2025-12-23 09:42:36 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/stringio] [DOC] Doc for StringIO#pread
    (https://github.com/ruby/stringio/pull/195)

    Previous doc unhelpfully pointed to `IO#pread`; this PR documents
    locally, with StringIO examples.

    https://github.com/ruby/stringio/commit/806f3d9741

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 67f830e0925c328c19fc1c2f513a174c6e3ca63d
  Author:     Sutou Kouhei <kou@clear-code.com>
  AuthorDate: 2025-12-17 14:18:43 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/stringio] Development of 3.2.1 started.

    https://github.com/ruby/stringio/commit/c9cd1c9947

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 290fa0d8b4e0145f389c6fdaff3ef45b915d706b
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-26 09:30:50 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2025-12-26 09:31:28 +0900

    [ruby/mmtk] Fix cargo fmt

    https://github.com/ruby/mmtk/commit/f4c46cabc7

commit a06a59e3b34cd5227363dc3af14dc6d1ce93e665
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2025-12-26 09:06:11 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 09:06:11 +0900

    Rename and enabled auto-update bundled gems again

commit 2fa02d6d2e325e0c746f353e70403389072b5dee
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2025-12-26 09:06:05 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 09:06:05 +0900

    Enabled auto-update NEWS.md and sync for default gems again

commit 010dcf85567ee1898706a4a8e353ac915a3d8873
  Author:     Yukihiro "Matz" Matsumoto <matz@ruby.or.jp>
  AuthorDate: 2025-12-25 21:14:35 +0900
  Commit:     Yukihiro "Matz" Matsumoto <matz@ruby.or.jp>
  CommitDate: 2025-12-26 08:59:23 +0900

    Development of 4.1.0 started.

commit 99e9ca1f40e7811fd4b162e6c4a7566d3d6bdf11
  Author:     Yukihiro "Matz" Matsumoto <matz@ruby.or.jp>
  AuthorDate: 2025-12-25 21:14:34 +0900
  Commit:     Yukihiro "Matz" Matsumoto <matz@ruby.or.jp>
  CommitDate: 2025-12-26 08:59:22 +0900

    [DOC] Flush NEWS.md

commit 7eb088084a4d6b93de511b359ce457f3559fcec3
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-19 09:21:35 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-25 23:18:17 +0900

    Update zjit bindings

  Notes:
    Merged: https://github.com/ruby/ruby/pull/12606

commit 57637827e6161fcf0a3d999c0f5dda3d8f06ea39
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-17 07:48:27 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-25 23:18:17 +0900

    Implement cont using declare weak references

  Notes:
    Merged: https://github.com/ruby/ruby/pull/12606

commit 0c07a4246c732751b9cfe45a1a29834382a74311
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-09 05:41:43 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-25 23:18:17 +0900

    Implement weak references on gen fields cache

  Notes:
    Merged: https://github.com/ruby/ruby/pull/12606

commit ade779b1e1fbfa7a60da1a3834859665225e310e
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-07 09:26:48 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-25 23:18:17 +0900

    Implement callcache using declare weak references

  Notes:
    Merged: https://github.com/ruby/ruby/pull/12606

commit a7ef2a9b0cedead5971ab91a22b2947a31555cca
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-01-22 01:45:45 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-25 23:18:17 +0900

    Implement declarative weak references in MMTk

  Notes:
    Merged: https://github.com/ruby/ruby/pull/12606

commit b2feb09efeb931ce0647c6d237256451ee3b6dfa
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-01-22 01:45:25 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-25 23:18:17 +0900

    Implement WeakMap and WeakKeyMap using declare weak references

  Notes:
    Merged: https://github.com/ruby/ruby/pull/12606

commit 10b97f52fd2cba189b8952fcb02c4d6dd9b1b6f2
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-01-22 01:42:00 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-25 23:18:17 +0900

    Implement declaring weak references

    [Feature #21084]

     # Summary

    The current way of marking weak references uses `rb_gc_mark_weak(VALUE *ptr)`.
    This presents challenges because Ruby's GC is incremental, meaning that if the
    `ptr` changes (e.g. realloc'd or free'd), then we could have an invalid memory
    access. This also overwrites `*ptr = Qundef` if `*ptr` is dead, which prevents
    any cleanup to be run (e.g. freeing memory or deleting entries from hash
    tables). This ticket proposes `rb_gc_declare_weak_references` which declares
    that an object has weak references and calls a cleanup function after marking,
    allowing the object to clean up any memory for dead objects.

     # Introduction

    In [[Feature #19783]](https://bugs.ruby-lang.org/issues/19783), I introduced an
    API allowing objects to mark weak references, the function signature looks like
    this:

    ```c
    void rb_gc_mark_weak(VALUE *ptr);
    ```

    `rb_gc_mark_weak` is called during the marking phase of the GC to specify that
    the memory at `ptr` holds a pointer to a Ruby object that is weakly referenced.
    `rb_gc_mark_weak` appends this pointer to a list that is processed after the
    marking phase of the GC. If the object at `*ptr` is no longer alive, then it
    overwrites the object reference with a special value (`*ptr = Qundef`).

    However, this API resulted in two challenges:

    1. Ruby's default GC is incremental, which means that the GC is not ran in one
       phase, but rather split into chunks of work that interleaves with Ruby
       execution. The `ptr` passed into `rb_gc_mark_weak` could be on the malloc
       heap, and that memory could be realloc'd or even free'd. We had to use
       workarounds such as `rb_gc_remove_weak` to ensure that there were no illegal
       memory accesses. This made `rb_gc_mark_weak` difficult to use, impacted
       runtime performance, and increased memory usage.
    2. When an object dies, `rb_gc_mark_weak` only overwites the reference with
       `Qundef`. This means that if we want to do any cleanup (e.g. free a piece of
       memory or delete a hash table entry), we could not do that and had to defer
       this process elsewhere (e.g. during marking or runtime).

    In this ticket, I'm proposing a new API for weak references. Instead of an
    object marking its weak references during the marking phase, the object declares
    that it has weak references using the `rb_gc_declare_weak_references` function.
    This declaration occurs during runtime (e.g. after the object has been created)
    rather than during GC.

    After an object declares that it has weak references, it will have its callback
    function called after marking as long as that object is alive. This callback
    function can then call a special function `rb_gc_handle_weak_references_alive_p`
    to determine whether its references are alive. This will allow the callback
    function to do whatever it wants on the object, allowing it to perform any
    cleanup work it needs.

    This significantly simplifies the code for `ObjectSpace::WeakMap` and
    `ObjectSpace::WeakKeyMap` because it no longer needs to have the workarounds for
    the limitations of `rb_gc_mark_weak`.

     # Performance

    The performance results below demonstrate that `ObjectSpace::WeakMap#[]=` is now
    about 60% faster because the implementation has been simplified and the number
    of allocations has been reduced. We can see that there is not a significant
    impact on the performance of `ObjectSpace::WeakMap#[]`.

    Base:

    ```
    ObjectSpace::WeakMap#[]=
                              4.620M (± 6.4%) i/s  (216.44 ns/i) -     23.342M in   5.072149s
    ObjectSpace::WeakMap#[]
                             30.967M (± 1.9%) i/s   (32.29 ns/i) -    154.998M in   5.007157s
    ```

    Branch:

    ```
    ObjectSpace::WeakMap#[]=
                              7.336M (± 2.8%) i/s  (136.31 ns/i) -     36.755M in   5.013983s
    ObjectSpace::WeakMap#[]
                             30.902M (± 5.4%) i/s   (32.36 ns/i) -    155.901M in   5.064060s
    ```

    Code:

    ```
    require "bundler/inline"

    gemfile do
      source "https://rubygems.org"
      gem "benchmark-ips"
    end

    wmap = ObjectSpace::WeakMap.new
    key = Object.new
    val = Object.new
    wmap[key] = val

    Benchmark.ips do |x|
      x.report("ObjectSpace::WeakMap#[]=") do |times|
        i = 0
        while i < times
          wmap[Object.new] = Object.new
          i += 1
        end
      end

      x.report("ObjectSpace::WeakMap#[]") do |times|
        i = 0
        while i < times
          wmap[key]
          wmap[val] # does not exist
          i += 1
        end
      end
    end
    ```

     # Alternative designs

    Currently, `rb_gc_declare_weak_references` is designed to be an internal-only
    API. This allows us to assume the object types that call
    `rb_gc_declare_weak_references`. In the future, if we want to open up this API
    to third parties, we may want to change this function to something like:

    ```c
    void rb_gc_add_cleaner(VALUE obj, void (*callback)(VALUE obj));
    ```

    This will allow the third party to implement a custom `callback` that gets
    called after the marking phase of GC to clean up any dead references. I chose
    not to implement this design because it is less efficient as we would need to
    store a mapping from `obj` to `callback`, which requires extra memory.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/12606

commit 16626d500da3f8a0536ed86813000cbcfc8acc79
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-01-22 01:38:01 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-25 23:18:17 +0900

    Implement rb_darray_swap_remove

  Notes:
    Merged: https://github.com/ruby/ruby/pull/12606

commit 099da884fe95ccf6c684a1563ed1c4b0fd8e1196
  Author:     Sorah Fukumori <her@sorah.jp>
  AuthorDate: 2025-12-25 21:35:15 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2025-12-25 21:35:15 +0900

    test_box: avoid failure with --program-suffix (#15734)

  Notes:
    Merged-By: sorah <her@sorah.jp>

commit 6a66129d6c289b0da99cd89592f5ee948da6f381
  Author:     NARUSE, Yui <naruse@airemix.jp>
  AuthorDate: 2025-12-25 15:31:50 +0900
  Commit:     NARUSE, Yui <naruse@airemix.jp>
  CommitDate: 2025-12-25 15:31:50 +0900

    fix the condition of www repo

commit d375bcc965d4a0c661785fa94150f6202e99c1ce
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-25 11:56:41 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-25 11:56:41 +0900

    [DOC] Escape capitalized word "data" not to be linked unexpectedly

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15731

commit b908306f99db834470167d569b81661d7b19a02b
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-25 11:45:27 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-25 11:49:32 +0900

    [DOC] Reword "Regular Expression" to "Matched Data"

    `$~` and its accessors are related to regular expressions, but are not
    themselves.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15730

commit 84edb8456e90ae79428bf5e5db3accf29cdc9999
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2025-12-25 11:47:08 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-25 11:47:08 +0900

    Revert "Rollback to minitest-5.27.0"

    This reverts commit 8d097bc472fc66221dee23bb8f9e0dddac16db23.

commit 3c4cda10eb80fa38f2b27d4774e3e3e82bf190c9
  Author:     Godfrey Chan <godfreykfc@gmail.com>
  AuthorDate: 2025-12-25 09:06:50 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2025-12-25 09:06:50 +0900

    [DOC] Add back Rust 1.85.0 requirement to NEWS.md (#15728)

    * [DOC] Add back Rust 1.85.0 requirement to NEWS.md

    Addresses k0kubun's review in https://github.com/ruby/ruby/pull/15711#issuecomment-3690541074

    NEWS.md serves both CRuby developers as well as end-users. As the
    release date closes in, it probably gets seen by more users than
    core developers (on the blog for example).

    Most users probably don't build Ruby by hand, and instead that is
    abstracted through tools like ruby-install or a package manager.
    For some users these tools may install pre-built binaries where
    they exist, in which case the Rust requirement doesn't apply. In
    other instances, the tools merely automate the build, in which case
    the correct rustc version is required to enable support.

    It is also a little confusing to talk about "enabling support for
    the JIT during the build" vs "enabling the JIT at runtime".

    This copy attempts to balance all of the above and hopefully gets
    the correct points across all intended audiences.

    * Apply suggestion from k0kubun

    Co-authored-by: Takashi Kokubun <takashikkbn@gmail.com>

    ---------

    Co-authored-by: Takashi Kokubun <takashikkbn@gmail.com>

  Notes:
    Merged-By: k0kubun <takashikkbn@gmail.com>

commit 3e82da723241b7205dc2b7706c66e9ead1826cde
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2025-12-25 07:37:25 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2025-12-25 07:37:25 +0900

    ZJIT: Don't mark control-flow opcodes as invalidating locals (#15694)

    jump, branchif, etc don't invalidate locals in the JIT; they might in the interpreter because they can execute arbitrary code, but the JIT side exits before that happens.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 8d097bc472fc66221dee23bb8f9e0dddac16db23
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2025-12-25 05:52:41 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-25 06:52:46 +0900

    Rollback to minitest-5.27.0

    Test of 6.0.0 is not working with 4.0.0 stable version.

    https://github.com/ruby/actions/actions/runs/20488398805/job/58875672023#step:20:362

    ```
      rake aborted!
      NoMethodError: undefined method 'cov_filter=' for #<Hoe:0x00007fdb550fc840> (NoMethodError)

        self.cov_filter = %w[ tmp ]
            ^^^^^^^^^^^^^
      /home/runner/work/actions/actions/ruby-4.0.0/gems/src/minitest/Rakefile:20:in 'block in <top (required)>'
      /home/runner/work/actions/actions/ruby-4.0.0/.bundle/gems/hoe-3.20.0/lib/hoe.rb:394:in 'BasicObject#instance_eval'
      /home/runner/work/actions/actions/ruby-4.0.0/.bundle/gems/hoe-3.20.0/lib/hoe.rb:394:in 'Hoe.spec'
      /home/runner/work/actions/actions/ruby-4.0.0/gems/src/minitest/Rakefile:11:in '<top (required)>'
      /home/runner/work/actions/actions/ruby-4.0.0/.bundle/gems/rake-13.3.1/exe/rake:27:in '<top (required)>'
      (See full trace by running task with --trace)
    ```

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15727

commit 26a1a522b76cc9fd2ed2d963fd2df635f59b7a39
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2025-12-25 05:47:34 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-25 05:47:34 +0900

    Revert "Rollback to test-unit 3.7.3"

    This reverts commit c17307ac22f37f74786a4f016121c6ee8cc38915.

commit 8caea03213ff809544271d3135e0873d9c419532
  Author:     Soutaro Matsumoto <matsumoto@soutaro.com>
  AuthorDate: 2025-12-25 02:13:09 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-25 05:46:44 +0900

    rbs_skip_tests_windows

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15725

commit b92bc9654120547f9dd261ce04dacdb17bf720e1
  Author:     Soutaro Matsumoto <matsumoto@soutaro.com>
  AuthorDate: 2025-12-25 01:41:18 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-25 05:46:44 +0900

    Skip test to avoid NoMemoryError

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15725

commit d0193e924003b33ab46ee4ac13fbec5d53d02f1b
  Author:     Soutaro Matsumoto <matsumoto@soutaro.com>
  AuthorDate: 2025-12-25 01:40:57 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-25 05:46:44 +0900

    Bundle test-unit 3.7.5

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15725

commit 96d876534e115ffbb92a72f7378da84fd54a3a87
  Author:     Stan Lo <stan.lo@shopify.com>
  AuthorDate: 2025-12-25 03:54:39 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-25 05:45:16 +0900

    Bump RDoc to 7.0.3

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15726
