summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
7 days[DOC] ZJIT: Add ZJIT to autolink_excluded_wordsStan Lo
This tells RDoc to not automatically link to the `ZJIT` module so we don't need to keep escaping the word ZJIT in the documentation/comments.
7 daysZJIT: Add --zjit-exec-mem-size (#14175)Takashi Kokubun
* ZJIT: Add --zjit-exec-mem-size * Add a comment about the limit
7 daysZJIT: Implement `concatstrings` insn (#14154)Stan Lo
Co-authored-by: Alexander Momchilov <alexander.momchilov@shopify.com>
7 daysYJIT, ZJIT: Fix JITs compiling prelude (#14171)Takashi Kokubun
7 daysZJIT: Add compile/profile/GC/invalidation time stats (#14158)Takashi Kokubun
Co-authored-by: Stan Lo <stan001212@gmail.com>
7 daysZJIT: Add RubyVM::ZJIT.enabled? (#14159)Takashi Kokubun
Co-authored-by: Max Bernstein <tekknolagi@gmail.com>
7 daysYJIT: Fix `mismatched_lifetime_syntaxes`, new in Rust 1.89.0Alan Wu
7 daysZJIT: Fix `mismatched_lifetime_syntaxes`, new in Rust 1.89.0Alan Wu
7 daysFix return value of setting in GC.configPeter Zhu
gc_config_set returned rb_gc_impl_config_get, but gc_config_get also added the implementation key to the return value. This caused the return value of GC.config to differ depending on whether the optional hash argument is provided or not.
7 daysAdd NODE IN locationsS-H-GAMELINKS
Add locations to struct `RNode_IN`. memo: ```bash > ruby -e 'case 1; in 2 then 3; end' --parser=prism --dump=parsetree @ ProgramNode (location: (1,0)-(1,24)) +-- locals: [] +-- statements: @ StatementsNode (location: (1,0)-(1,24)) +-- body: (length: 1) +-- @ CaseMatchNode (location: (1,0)-(1,24)) +-- predicate: | @ IntegerNode (location: (1,5)-(1,6)) | +-- IntegerBaseFlags: decimal | +-- value: 1 +-- conditions: (length: 1) | +-- @ InNode (location: (1,8)-(1,19)) | +-- pattern: | | @ IntegerNode (location: (1,11)-(1,12)) | | +-- IntegerBaseFlags: decimal | | +-- value: 2 | +-- statements: | | @ StatementsNode (location: (1,18)-(1,19)) | | +-- body: (length: 1) | | +-- @ IntegerNode (location: (1,18)-(1,19)) | | +-- IntegerBaseFlags: decimal | | +-- value: 3 | +-- in_loc: (1,8)-(1,10) = "in" | +-- then_loc: (1,13)-(1,17) = "then" +-- else_clause: nil +-- case_keyword_loc: (1,0)-(1,4) = "case" +-- end_keyword_loc: (1,21)-(1,24) = "end" ```
7 days[DOC] Update JIT optionsBurdette Lamar
7 days[DOC] Tweaks for GC.configBurdetteLamar
7 days[DOC] Tweaks for GC.configBurdetteLamar
7 daysUpdate string_casecmp.ymlErim Icel
7 daysUpdate test_string.rbErim Icel
7 daysOptimize `str_casecmp` length check using pointer endErim Icel
7 days[DOC] Fix `vssetup.cmd` argumentsNobuyoshi Nakada
7 daysCI: mingw: Use the official actions for msys2Hiroshi SHIBATA
Because ruby/setup-ruby is affected to test result.
7 daysCI: mingw: Set up msys2 environment variablesNobuyoshi Nakada
7 daysCI: mingw: Set `cmd` as the default shellNobuyoshi Nakada
It is used in more steps than `sh`.
7 daysWin: Use `@` instead of `echo off` in `vssetup.cmd`Nobuyoshi Nakada
`echo off` affects the batch files called from this file as well.
7 daysCI: windows: Windows-2019 or earlier no longer usedNobuyoshi Nakada
7 daysCI: mingw: Tweak misc system & package infoNobuyoshi Nakada
9 daystime.c: fix time_mark_and_move when WIDEVALUE_IS_WIDERJean Boussier
In such case the pointer need to be casted.
9 days[ruby/stringio] Adjust indent [ci skip]Nobuyoshi Nakada
https://github.com/ruby/stringio/commit/ac6292c17f
9 days[ruby/stringio] Fix SEGV at eof? on null StringIONobuyoshi Nakada
https://github.com/ruby/stringio/commit/29b9133332
9 days[ruby/stringio] Fix SEGV at read/pread on null StringIONobuyoshi Nakada
https://github.com/ruby/stringio/commit/113dd5a55e
10 days[ruby/stringio] fix: prevent segfault in StringIO#seek with SEEK_ENDkoh-sh
on null device (https://github.com/ruby/stringio/pull/137) Fixes segmentation fault when calling `seek` with `SEEK_END` on null device StringIO created by `StringIO.new(nil)`. ```bash ruby -e "require 'stringio'; StringIO.new(nil).seek(0, IO::SEEK_END)" ``` I tested with below versions. ```bash [koh@Kohs-MacBook-Pro] ~ % ruby -v;gem info stringio;sw_vers ruby 3.4.5 (2025-07-16 revision https://github.com/ruby/stringio/commit/20cda200d3) +PRISM [arm64-darwin24] *** LOCAL GEMS *** stringio (3.1.2) Authors: Nobu Nakada, Charles Oliver Nutter Homepage: https://github.com/ruby/stringio Licenses: Ruby, BSD-2-Clause Installed at (default): /Users/koh/.local/share/mise/installs/ruby/3.4.5/lib/ruby/gems/3.4.0 Pseudo IO on String ProductName: macOS ProductVersion: 15.5 BuildVersion: 24F74 [koh@Kohs-MacBook-Pro] ~ % ``` https://github.com/ruby/stringio/commit/9399747bf9
10 days[DOC] Array#map! fix to indicate return is selfEthan
10 days[DOC] Array#fill fix to indicate return is selfEthan
doc currently indicates the return value as `new_array` but then in the first sentence explains "always returns +self+ (never a new array)".
10 daysFix Typo in Regular Expressions docs (_regexp.rdoc)Carl Zulauf
Small fix for a typo in the regular expression docs. The line of code above this change does not produce the output shown in the docs. With this change the docs will show the correct output for this example of using regex quantifiers.
10 daysFix id2ref table build when GC in progressJohn Hawthorn
Previously, if GC was in progress when we're initially building the id2ref table, it could see the empty table and then crash when trying to remove ids from it. This commit fixes the bug by only publishing the table after GC is done. Co-authored-by: Aaron Patterson <tenderlove@ruby-lang.org>
10 daysFix lock ordering issue for rb_ractor_sched_wait() and rb_ractor_sched_wakeup()Luke Gruber
In rb_ractor_sched_wait() (ex: Ractor.receive), we acquire RACTOR_LOCK(cr) and then thread_sched_lock(cur_th). However, on wakeup if we're a dnt, in thread_sched_wait_running_turn() we acquire thread_sched_lock(cur_th) after condvar wakeup and then RACTOR_LOCK(cr). This lock inversion can cause a deadlock with rb_ractor_wakeup_all() (ex: port.send(obj)), where we acquire RACTOR_LOCK(other_r) and then thread_sched_lock(other_th). So, the error happens: nt 1: Ractor.receive rb_ractor_sched_wait() after condvar wakeup in thread_sched_wait_running_turn(): - thread_sched_lock(cur_th) (condvar) # acquires lock - rb_ractor_lock_self(cr) # deadlock here: tries to acquire, HANGS nt 2: port.send ractor_wakeup_all() - RACTOR_LOCK(port_r) # acquires lock - thread_sched_lock # tries to acquire, HANGS To fix it, we now unlock the thread_sched_lock before acquiring the ractor_lock in rb_ractor_sched_wait(). Script that reproduces issue: ```ruby require "async" class RactorWrapper def initialize @ractor = Ractor.new do Ractor.recv # Ractor doesn't start until explicitly told to # Do some calculations fib = ->(x) { x < 2 ? 1 : fib.call(x - 1) + fib.call(x - 2) } fib.call(20) end end def take_async @ractor.send(nil) Thread.new { @ractor.value }.value end end Async do |task| 10_000.times do |i| task.async do RactorWrapper.new.take_async puts i end end end exit 0 ``` Fixes [Bug #21398] Co-authored-by: John Hawthorn <john.hawthorn@shopify.com>
10 daysMake rb_gc_impl_writebarrier_remember Ractor-safePeter Zhu
rb_gc_impl_writebarrier_remember is not Ractor safe because it writes to bitmaps and also pushes onto the mark stack during incremental marking. We should acquire the VM lock to prevent race conditions. In the case that the object is not old, there is no performance impact. However, we can see a performance impact in this microbenchmark where the object is old: 4.times.map do Ractor.new do ary = [] 3.times { GC.start } 10_000_000.times do |i| ary.push(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17) ary.clear end end end.map(&:value) Before: Time (mean ± σ): 682.4 ms ± 5.1 ms [User: 2564.8 ms, System: 16.0 ms] After: Time (mean ± σ): 5.522 s ± 0.096 s [User: 8.237 s, System: 7.931 s] Co-Authored-By: Luke Gruber <luke.gruber@shopify.com> Co-Authored-By: John Hawthorn <john@hawthorn.email>
10 daysZJIT: Avoid compiling and direct sends to forwardable ISEQsAlan Wu
These `...` ISEQs have a special calling convention in the interpreter and our stubs and JIT calling convention don't deal well. Reject for now. Debugged with help from `@tekknolagi` and `tool/zjit_bisect.rb`. Merely avoiding direct sends is enough to pass the attached test, but also avoid compiling ISEQs with `...` parameter to limit exposure for now. `SendWithoutBlock`, which does dynamic dispatch using interpreter code, seems to handle calling into forwardable ISEQs correctly, so they are fine -- we can't predict where these dynamic sends land anyways.
10 daysZJIT: Fix "memory operand with non-register base" (#14153)Takashi Kokubun
10 daysZJIT: Add a graphviz dumper for HIR (#14117)Max Bernstein
This is moderately useful just in stdout (copy and paste into a renderer) but potentially more useful alongside a tool that parses stdout looking for `digraph G { ... }` and renders those automatically.
10 daysobject_id_to_ref: complete incremental GC before iteratingJean Boussier
Otherwise dealing with garbage objects is tricky.
10 daysCI: Remove Strawberry Perl pkg-configNobuyoshi Nakada
10 daysRevert "Convert `PKG_CONFIG_PATH` to msys/cygwin path"Nobuyoshi Nakada
This reverts commit 8e9ea4c202fb104d7c17ad1f3cc59d697120501a. The environment variable is converted internally.
10 daysZJII: Address review feedbackMax Bernstein
10 daysZJIT: Actually kill timed-out process in bisectMax Bernstein
10 daysZJIT: Use OptionParser in bisect scriptMax Bernstein
10 daysZJIT: Use shellwords in bisect scriptMax Bernstein
10 daysZJIT: Print out command to repro in bisect scriptMax Bernstein
10 daysRevert "Check if the found pkg-config is usable actually"Nobuyoshi Nakada
This reverts commit 79d8a3159f60d32396c8281fe438e86ab97e3daa. The second argument of `find_executable0` in mkmf is `path`, not arguments to the program like as `EnvUtil.find_executable`.
10 days[ruby/optparse] Use `~/.config` only if `$XDG_CONFIG_HOME` is unset or emptyNobuyoshi Nakada
https://github.com/ruby/optparse/commit/2f9c7500a3
11 daysBump actions/cache in /.github/actions/setup/directoriesdependabot[bot]
Bumps [actions/cache](https://github.com/actions/cache) from 4.2.3 to 4.2.4. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/5a3ec84eff668545956fd18022155c47e93e2684...0400d5f644dc74513175e3cd8d07132dd4860809) --- updated-dependencies: - dependency-name: actions/cache dependency-version: 4.2.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
11 daysZJIT: Remove the need for unwrap() on with_num_bits() (#14144)Takashi Kokubun
* ZJIT: Remove the need for unwrap() on with_num_bits() * Fix arm64 tests * Track the caller of with_num_bits Co-authored-by: Alan Wu <XrXr@users.noreply.github.com> --------- Co-authored-by: Alan Wu <XrXr@users.noreply.github.com>
11 daysZJIT: Implement `defined?` codegen for non-yield calls (#14101)Stan Lo