summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
49 min.ZJIT: CI: Use Rust version built into GitHub Actions imageHEADmasterAlan Wu
Saves the work of installing Rust for most jobs. Keep a job on each platform that tests 1.85.0, the minimum supported version, though.
65 min.[DOC] YJIT: Add YJIT to autolink_excluded_wordsStan Lo
65 min.[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.
66 min.ZJIT: Add --zjit-exec-mem-size (#14175)Takashi Kokubun
* ZJIT: Add --zjit-exec-mem-size * Add a comment about the limit
95 min.ZJIT: Implement `concatstrings` insn (#14154)Stan Lo
Co-authored-by: Alexander Momchilov <alexander.momchilov@shopify.com>
2 hoursYJIT, ZJIT: Fix JITs compiling prelude (#14171)Takashi Kokubun
3 hoursZJIT: Add compile/profile/GC/invalidation time stats (#14158)Takashi Kokubun
Co-authored-by: Stan Lo <stan001212@gmail.com>
3 hoursZJIT: Add RubyVM::ZJIT.enabled? (#14159)Takashi Kokubun
Co-authored-by: Max Bernstein <tekknolagi@gmail.com>
4 hoursYJIT: Fix `mismatched_lifetime_syntaxes`, new in Rust 1.89.0Alan Wu
4 hoursZJIT: Fix `mismatched_lifetime_syntaxes`, new in Rust 1.89.0Alan Wu
9 hoursFix 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.
10 hoursAdd 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" ```
10 hours[DOC] Update JIT optionsBurdette Lamar
10 hours[DOC] Tweaks for GC.configBurdetteLamar
10 hours[DOC] Tweaks for GC.configBurdetteLamar
10 hoursUpdate string_casecmp.ymlErim Icel
10 hoursUpdate test_string.rbErim Icel
10 hoursOptimize `str_casecmp` length check using pointer endErim Icel
12 hours[DOC] Fix `vssetup.cmd` argumentsNobuyoshi Nakada
12 hoursCI: mingw: Use the official actions for msys2Hiroshi SHIBATA
Because ruby/setup-ruby is affected to test result.
12 hoursCI: mingw: Set up msys2 environment variablesNobuyoshi Nakada
12 hoursCI: mingw: Set `cmd` as the default shellNobuyoshi Nakada
It is used in more steps than `sh`.
12 hoursWin: Use `@` instead of `echo off` in `vssetup.cmd`Nobuyoshi Nakada
`echo off` affects the batch files called from this file as well.
12 hoursCI: windows: Windows-2019 or earlier no longer usedNobuyoshi Nakada
12 hoursCI: mingw: Tweak misc system & package infoNobuyoshi Nakada
3 daystime.c: fix time_mark_and_move when WIDEVALUE_IS_WIDERJean Boussier
In such case the pointer need to be casted.
3 days[ruby/stringio] Adjust indent [ci skip]Nobuyoshi Nakada
https://github.com/ruby/stringio/commit/ac6292c17f
3 days[ruby/stringio] Fix SEGV at eof? on null StringIONobuyoshi Nakada
https://github.com/ruby/stringio/commit/29b9133332
3 days[ruby/stringio] Fix SEGV at read/pread on null StringIONobuyoshi Nakada
https://github.com/ruby/stringio/commit/113dd5a55e
3 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
3 days[DOC] Array#map! fix to indicate return is selfEthan
3 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)".
3 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.
3 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>
3 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>
3 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>
3 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.
3 daysZJIT: Fix "memory operand with non-register base" (#14153)Takashi Kokubun
3 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.
3 daysobject_id_to_ref: complete incremental GC before iteratingJean Boussier
Otherwise dealing with garbage objects is tricky.
3 daysCI: Remove Strawberry Perl pkg-configNobuyoshi Nakada
3 daysRevert "Convert `PKG_CONFIG_PATH` to msys/cygwin path"Nobuyoshi Nakada
This reverts commit 8e9ea4c202fb104d7c17ad1f3cc59d697120501a. The environment variable is converted internally.
3 daysZJII: Address review feedbackMax Bernstein
3 daysZJIT: Actually kill timed-out process in bisectMax Bernstein
3 daysZJIT: Use OptionParser in bisect scriptMax Bernstein
3 daysZJIT: Use shellwords in bisect scriptMax Bernstein
3 daysZJIT: Print out command to repro in bisect scriptMax Bernstein
4 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`.
4 days[ruby/optparse] Use `~/.config` only if `$XDG_CONFIG_HOME` is unset or emptyNobuyoshi Nakada
https://github.com/ruby/optparse/commit/2f9c7500a3
4 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>