ml.ruby-lang.org
Sign In Sign Up
Manage this list Sign In Sign Up

Keyboard Shortcuts

Thread View

  • j: Next unread message
  • k: Previous unread message
  • j a: Jump to all threads
  • j l: Jump to MailingList overview

ruby-core

Thread Start a new thread
Download
Threads by month
  • ----- 2026 -----
  • March
  • February
  • January
  • ----- 2025 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2024 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2023 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2022 -----
  • December
  • November
ruby-core@ml.ruby-lang.org

January 2026

  • 5 participants
  • 135 discussions
[ruby-core:124509] [Ruby Feature#21821] Add Stack and SizedStack classes
by Eregon (Benoit Daloze) 13 Jan '26

13 Jan '26
Issue #21821 has been updated by Eregon (Benoit Daloze). BTW `#num_waiting` is always tricky to implement so if we add new classes I would like to not have that, because it's always messy to implement and makes it e.g. impossible to reuse JDK classes for JRuby & TruffleRuby. ---------------------------------------- Feature #21821: Add Stack and SizedStack classes https://bugs.ruby-lang.org/issues/21821#change-116069 * Author: byroot (Jean Boussier) * Status: Open * Target version: 4.1 ---------------------------------------- ### Context `Queue` and `SizedQueue` are very useful and performant constructs, however they only allow for FIFO queues. Some use cases do call for LIFO queues AKA stacks. For instance, in the case of connection pool, it's often preferable to use a stack. ### Feature I'd like to introduce `Stack` and `SizedStack` classes, to mirror `Queue` and `SizedQueue`. They'd have exactly the same method and behavior at the exception of dequeuing order. ### Thread namespace? Currently `Queue` and `SizedQueue` are technically defined under `Thread` and aliased in `Object`. I wonder if that's something we should do for `Stack` too, or just some historical thing we shouldn't perpetuate. -- https://bugs.ruby-lang.org/
1 0
0 0
[ruby-core:124508] [Ruby Feature#21821] Add Stack and SizedStack classes
by Eregon (Benoit Daloze) 13 Jan '26

13 Jan '26
Issue #21821 has been updated by Eregon (Benoit Daloze). From a quick look the closest thing to a concurrent Stack in Java is [LinkedBlockingDeque](https://docs.oracle.com/en/java/javase/25/docs/api/jav…. That implementation uses a single lock and condition variables, so it's not particularly efficient and likely causes significant contention. In comparison [LinkedBlockingQueue](https://docs.oracle.com/en/java/javase/25/docs/api/jav… uses two locks (basically one for push, one for pop) to avoid contention, unless the queue is completely empty and then both locks need to be taken. That illustrates my point that having a `Deque` limits the implementation choices and optimizations significantly. ---------------------------------------- Feature #21821: Add Stack and SizedStack classes https://bugs.ruby-lang.org/issues/21821#change-116068 * Author: byroot (Jean Boussier) * Status: Open * Target version: 4.1 ---------------------------------------- ### Context `Queue` and `SizedQueue` are very useful and performant constructs, however they only allow for FIFO queues. Some use cases do call for LIFO queues AKA stacks. For instance, in the case of connection pool, it's often preferable to use a stack. ### Feature I'd like to introduce `Stack` and `SizedStack` classes, to mirror `Queue` and `SizedQueue`. They'd have exactly the same method and behavior at the exception of dequeuing order. ### Thread namespace? Currently `Queue` and `SizedQueue` are technically defined under `Thread` and aliased in `Object`. I wonder if that's something we should do for `Stack` too, or just some historical thing we shouldn't perpetuate. -- https://bugs.ruby-lang.org/
1 0
0 0
[ruby-core:124507] [Ruby Feature#21821] Add Stack and SizedStack classes
by Eregon (Benoit Daloze) 13 Jan '26

13 Jan '26
Issue #21821 has been updated by Eregon (Benoit Daloze). ko1 (Koichi Sasada) wrote in #note-4: > * If we assume the implementation of `Queue` is based on `Dequeu`, adding `pop_back()` (LIFO operation) seems reasonalbe, and easy to introduce than introducing new classes, and good aligned to Ruby's large-class philosophy. I want to ask Matz again. This would make the implementation of Queue (based on Deque or not) far more complicated and less efficient, as I said in the last paragraph of https://bugs.ruby-lang.org/issues/21721#note-2. I think we should either: * Add nothing because this is not a common need and there are 2 reasonable alternatives: https://bugs.ruby-lang.org/issues/21721#note-2 and https://bugs.ruby-lang.org/issues/21721#note-18 * Add Thread::Stack & Thread::SizedStack. I think it's not good to alias them in `Object` because they should not be used if the stack is used by a single Thread, Array should be used instead. > I'm afraid that expanding the similar idea like `Thread::Heap`, `Thread::PriorityQueue` and so on, atomic containers for each data structure. Yes, it starts to feel like Java. I think there are not enough use cases for concurrent stacks to deserve to be core. It could be in concurrent-ruby perhaps, or maybe the 2 alternatives linked above are good enough. ---------------------------------------- Feature #21821: Add Stack and SizedStack classes https://bugs.ruby-lang.org/issues/21821#change-116067 * Author: byroot (Jean Boussier) * Status: Open * Target version: 4.1 ---------------------------------------- ### Context `Queue` and `SizedQueue` are very useful and performant constructs, however they only allow for FIFO queues. Some use cases do call for LIFO queues AKA stacks. For instance, in the case of connection pool, it's often preferable to use a stack. ### Feature I'd like to introduce `Stack` and `SizedStack` classes, to mirror `Queue` and `SizedQueue`. They'd have exactly the same method and behavior at the exception of dequeuing order. ### Thread namespace? Currently `Queue` and `SizedQueue` are technically defined under `Thread` and aliased in `Object`. I wonder if that's something we should do for `Stack` too, or just some historical thing we shouldn't perpetuate. -- https://bugs.ruby-lang.org/
1 0
0 0
[ruby-core:124506] [Ruby Feature#21821] Add Stack and SizedStack classes
by ko1 (Koichi Sasada) 13 Jan '26

13 Jan '26
Issue #21821 has been updated by ko1 (Koichi Sasada). I heard that C++ has deque: Double-Ended Queue https://en.cppreference.com/w/cpp/container/deque.html * The sound of `Deque` is similar to `dequeue` or `deq` (operation names). so introducing `Dequeue` seems not good idea. * If we assume the implementation of `Queue` is based on `Dequeu`, adding `pop_back()` (LIFO operation) seems reasonalbe, and easy to introduce than introducing new classes, and good aligned to Ruby's large-class philosophy. I want to ask Matz again. I'm afraid that expanding the similar idea like `Thread::Heap`, `Thread::PriorityQueue` and so on, atomic containers for each data structure. ---------------------------------------- Feature #21821: Add Stack and SizedStack classes https://bugs.ruby-lang.org/issues/21821#change-116066 * Author: byroot (Jean Boussier) * Status: Open * Target version: 4.1 ---------------------------------------- ### Context `Queue` and `SizedQueue` are very useful and performant constructs, however they only allow for FIFO queues. Some use cases do call for LIFO queues AKA stacks. For instance, in the case of connection pool, it's often preferable to use a stack. ### Feature I'd like to introduce `Stack` and `SizedStack` classes, to mirror `Queue` and `SizedQueue`. They'd have exactly the same method and behavior at the exception of dequeuing order. ### Thread namespace? Currently `Queue` and `SizedQueue` are technically defined under `Thread` and aliased in `Object`. I wonder if that's something we should do for `Stack` too, or just some historical thing we shouldn't perpetuate. -- https://bugs.ruby-lang.org/
1 0
0 0
[ruby-core:124474] [Ruby Bug#21831] Prism doesn't count underscores in the fraction part of rational float
by nobu (Nobuyoshi Nakada) 13 Jan '26

13 Jan '26
Issue #21831 has been reported by nobu (Nobuyoshi Nakada). ---------------------------------------- Bug #21831: Prism doesn't count underscores in the fraction part of rational float https://bugs.ruby-lang.org/issues/21831 * Author: nobu (Nobuyoshi Nakada) * Status: Open * Backport: 3.2: REQUIRED, 3.3: REQUIRED, 3.4: REQUIRED, 4.0: REQUIRED ---------------------------------------- Good. ```console $ ruby3.3 -e 'p 0.1_2r.to_f' 0.12 $ ruby3.4 --parser=parse.y -e 'p 0.1_2r.to_f' 0.12 ``` Wrong. ```console $ ruby3.4 -e 'p 0.1_2r.to_f' 0.012 ``` -- https://bugs.ruby-lang.org/
3 2
0 0
[ruby-core:124479] [Ruby Misc#21834] Extract `yaml/store` into it's own gem that depends on the `pstore` gem
by postmodern (Hal Brodigan) 13 Jan '26

13 Jan '26
Issue #21834 has been reported by postmodern (Hal Brodigan). ---------------------------------------- Misc #21834: Extract `yaml/store` into it's own gem that depends on the `pstore` gem https://bugs.ruby-lang.org/issues/21834 * Author: postmodern (Hal Brodigan) * Status: Open ---------------------------------------- Ruby 4.0.0 removed the `pstore` gem from the set of default stdlib libraries. However, `yaml/store` is still available from the `yaml` library, but relies on the `pstore` gem which is now no longer part of stdlib. It is odd that a file which is still part of stdlib requires another gem that is not part of stdlib. Perhaps `yaml/store` could be extracted into it's own gem called `yaml-store` which would have an explicit dependency on the `pstore` gem. This would reduce the need to explicitly list `pstore` as a gem dependency in the `Gemfile` or gemspec, if code requires `yaml/store` for `YAML::Store`. -- https://bugs.ruby-lang.org/
2 2
0 0
[ruby-core:124414] [Ruby Bug#21818] Thread backtraces cannot be communicated over Ractor ports
by dazuma (Daniel Azuma) 13 Jan '26

13 Jan '26
Issue #21818 has been reported by dazuma (Daniel Azuma). ---------------------------------------- Bug #21818: Thread backtraces cannot be communicated over Ractor ports https://bugs.ruby-lang.org/issues/21818 * Author: dazuma (Daniel Azuma) * Status: Open * ruby -v: ruby 4.0.0 (2025-12-25 revision 553f1675f3) +PRISM [arm64-darwin25] * Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN, 4.0: UNKNOWN ---------------------------------------- It looks like Thread::Backtrace is confined to the Ractor that produced it: it cannot be copied or moved to another Ractor, nor can it be made shareable. This makes it difficult for a Ractor to communicate exceptions (e.g. the reason for its own failure) to other Ractors. Is this intentional? I would have expected that a Thread::Backtrace is just static data that should not have problems moving between Ractors. Details below: **Thread::Backtrace cannot be moved to another Ractor** Code: ``` def make_trace caller_locations end r1 = Ractor.new do port = receive trace = make_trace puts "**** Original: #{trace.inspect}" port.send(trace, move: true) # Fails here end port = Ractor::Port.new r1.send(port) trace = port.receive # Hangs here puts "**** Received: #{trace.inspect}" ``` Result: ``` **** Original: ["hello.rb:7:in 'block in <main>'"] #<Thread:0x000000010438f770 run> terminated with exception (report_on_exception is true): hello.rb:9:in 'Ractor::Port#send': can not move Thread::Backtrace::Location object. (Ractor::Error) from hello.rb:9:in 'block in <main>' ``` As a result, it is also not possible to move an Exception: ``` r1 = Ractor.new do port = receive begin raise "hello" rescue => e port.send(e, move: true) # Fails here end end port = Ractor::Port.new r1.send(port) e = port.receive # Hangs here ``` Result: ``` #<Thread:0x0000000102a0f570 run> terminated with exception (report_on_exception is true): hello.rb:6:in 'Ractor::Port#send': can not move Thread::Backtrace object. (Ractor::Error) from hello.rb:6:in 'block in <main>' ``` Note that Kernel#caller returns a string array that can be moved successfully: ``` def make_trace caller end r1 = Ractor.new do port = receive trace = make_trace puts "**** Original: #{trace.inspect}" port.send(trace, move: true) end port = Ractor::Port.new r1.send(port) trace = port.receive puts "**** Received: #{trace.inspect}" ``` Result: ``` **** Original: ["hello.rb:7:in 'block in <main>'"] **** Received: ["hello.rb:7:in 'block in <main>'"] ``` **Thread::Backtrace cannot be *copied* to another Ractor either** Code: ``` def make_trace caller_locations end r1 = Ractor.new do port = receive trace = make_trace puts "**** Original: #{trace.inspect}" port.send(trace, move: false) # Fails here end port = Ractor::Port.new r1.send(port) trace = port.receive # Hangs here puts "**** Received: #{trace.inspect}" ``` Result. Note the specific error message "allocator undefined" that might give a clue why this is all happening: ``` **** Original: ["hello.rb:7:in 'block in <main>'"] #<Thread:0x000000010031f5c8 run> terminated with exception (report_on_exception is true): hello.rb:9:in 'Ractor::Port#send': allocator undefined for Thread::Backtrace::Location (TypeError) port.send(trace, move: false) ^^^^^^^^^^^^^^^^^^ from hello.rb:9:in 'block in <main>' ``` Again, Kernel#caller returns a string array that copies successfully: ``` def make_trace caller end r1 = Ractor.new do port = receive trace = make_trace puts "**** Original: #{trace.inspect}" port.send(trace, move: false) # Fails here end port = Ractor::Port.new r1.send(port) trace = port.receive # Hangs here puts "**** Received: #{trace.inspect}" ``` Result: ``` **** Original: ["hello.rb:7:in 'block in <main>'"] **** Received: ["hello.rb:7:in 'block in <main>'"] ``` Interestingly, if an exception is copied when sent over a port, it doesn't fail with an undefined allocator, but the backtrace in the copy is empty: ``` r1 = Ractor.new do port = receive begin raise "hello" rescue => e puts "**** Original: #{e.backtrace.inspect}" port.send(e, move: false) end end port = Ractor::Port.new r1.send(port) e = port.receive puts "**** Received: #{e.backtrace.inspect}" ``` Result: ``` **** Original: ["hello.rb:4:in 'block in <main>'"] **** Received: [] ``` **Thread::Backtrace cannot be made shareable** Code: ``` def make_trace caller_locations end trace = Ractor.make_shareable(make_trace) # Fails here ``` Result: ``` hello.rb:5:in 'Ractor.make_shareable': can not make shareable object for "hello.rb:5:in '<main>'" (Ractor::Error) from hello.rb:5:in '<main>' ``` As a result, exceptions also cannot be made shareable: ``` begin raise "hello" rescue => e e = Ractor.make_shareable(e) # Fails here end ``` Result: ``` hello.rb: can not make shareable object for #<Thread::Backtrace:0x0000000102fdfe28> (Ractor::Error) ``` Interestingly, if the backtrace is empty, make_shareable succeeds, suggesting that it's specifically the Thread::Backtrace::Location that cannot be made shareable: ``` trace = Ractor.make_shareable(caller_locations) puts trace.inspect ``` Result: ``` [] ``` And, of course, the result of Kernel#caller can be made shareable: ``` def make_trace caller end trace = Ractor.make_shareable(make_trace) puts trace.inspect ``` Result: ``` ["hello.rb:5:in '<main>'"] ``` -- https://bugs.ruby-lang.org/
3 3
0 0
[ruby-core:124373] [Ruby Bug#21809] Segmentation fault when running RUBY_BOX=1 gem update --system
by wilsonsilva (Wilson Silva) 13 Jan '26

13 Jan '26
Issue #21809 has been reported by wilsonsilva (Wilson Silva). ---------------------------------------- Bug #21809: Segmentation fault when running RUBY_BOX=1 gem update --system https://bugs.ruby-lang.org/issues/21809 * Author: wilsonsilva (Wilson Silva) * Status: Open * ruby -v: ruby 4.0.0 (2025-12-25 revision 553f1675f3) +PRISM [arm64-darwin25] * Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN, 4.0: UNKNOWN ---------------------------------------- I get a segmentation fault when I run `RUBY_BOX=1 gem update --system`. I'm using RubyGems version `4.0.3`. I've attached the crash report log file to this issue. There is no segfault when `RUBY_BOX=0`, so this really seem like an issue with Ruby Box. System Information: * macOS Version: 26.1 (Build 25B78) * Ruby Version: 4.0.0 (2025-12-25 revision 553f1675f3) +PRISM [arm64-darwin25] * Architecture: arm64 * Hardware: * Model: MacBook Pro (MacBookPro18,2) * Chip: Apple M1 Max * CPU Cores: 10 (8 performance + 2 efficiency) * Memory: 64 GB Output: ``` /Users/wilson/.local/share/mise/installs/ruby/4.0.0/bin/ruby: warning: Ruby::Box is experimental, and the behavior may change in the future! See https://docs.ruby-lang.org/en/4.0/Ruby/Box.html for known issues, etc. /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/dependency_list.rb:22: [BUG] Segmentation fault at 0x0000000000000008 ruby 4.0.0 (2025-12-25 revision 553f1675f3) +PRISM [arm64-darwin25] -- Crash Report log information -------------------------------------------- See Crash Report log file in one of the following locations: * ~/Library/Logs/DiagnosticReports * /Library/Logs/DiagnosticReports for more details. Don't forget to include the above Crash Report log file in bug reports. -- Control frame information ----------------------------------------------- c:0022 p:---- s:0109 e:000108 l:y b:---- CFUNC :append_features c:0021 p:---- s:0106 e:000105 l:y b:---- CFUNC :include c:0020 p:0011 s:0101 e:000100 l:y b:0002 CLASS /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/dependency_list.rb:22 c:0019 p:0013 s:0098 e:000097 l:y b:0002 TOP /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/dependency_list.rb:19 [FINISH] c:0018 p:---- s:0095 e:000094 l:y b:---- CFUNC :require_relative c:0017 p:---- s:0092 e:000091 l:y b:---- CFUNC :require_relative c:0016 p:0011 s:0087 e:000086 l:y b:0002 TOP /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/dependency_installer.rb:4 [FINISH] c:0015 p:---- s:0084 e:000083 l:y b:---- CFUNC :require_relative c:0014 p:---- s:0081 e:000080 l:y b:---- CFUNC :require_relative c:0013 p:0017 s:0076 e:000075 l:y b:0002 TOP /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/commands/update_command.rb:5 [FINISH] c:0012 p:---- s:0073 e:000072 l:y b:---- CFUNC :require c:0011 p:0023 s:0068 e:000067 l:y b:0001 METHOD <internal:/Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/core_ext/kernel_require.rb>:139 [FINISH] c:0010 p:---- s:0062 e:000061 l:y b:---- CFUNC :require c:0009 p:0036 s:0057 e:000056 l:y b:0002 METHOD /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/command_manager.rb:235 c:0008 p:0038 s:0050 e:000046 l:y b:0002 METHOD /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/command_manager.rb:137 c:0007 p:0089 s:0042 e:000041 l:y b:0002 METHOD /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/command_manager.rb:209 c:0006 p:0013 s:0036 e:000035 l:y b:0002 METHOD /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/command_manager.rb:249 c:0005 p:0080 s:0028 e:000027 l:y b:0002 METHOD /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/command_manager.rb:193 c:0004 p:0010 s:0021 e:000020 l:y b:0002 METHOD /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/command_manager.rb:151 c:0003 p:0057 s:0013 e:000012 l:y b:0002 METHOD /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/gem_runner.rb:56 c:0002 p:0027 s:0006 e:000005 l:n b:---- EVAL /Users/wilson/.local/share/mise/installs/ruby/4.0.0/bin/gem:12 [FINISH] c:0001 p:0000 s:0003 E:001b70 l:y b:---- DUMMY [FINISH] -- Ruby level backtrace information ---------------------------------------- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/bin/gem:12:in '<main>' /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/gem_runner.rb:56:in 'run' /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/command_manager.rb:151:in 'run' /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/command_manager.rb:193:in 'process_args' /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/command_manager.rb:249:in 'invoke_command' /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/command_manager.rb:209:in 'find_command' /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/command_manager.rb:137:in '[]' /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/command_manager.rb:235:in 'load_and_instantiate' /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/command_manager.rb:235:in 'require' <internal:/Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/core_ext/kernel_require.rb>:139:in 'require' <internal:/Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/core_ext/kernel_require.rb>:139:in 'require' /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/commands/update_command.rb:5:in '<top (required)>' /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/commands/update_command.rb:5:in 'require_relative' /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/commands/update_command.rb:5:in 'require_relative' /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/dependency_installer.rb:4:in '<top (required)>' /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/dependency_installer.rb:4:in 'require_relative' /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/dependency_installer.rb:4:in 'require_relative' /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/dependency_list.rb:19:in '<top (required)>' /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/dependency_list.rb:22:in '<class:DependencyList>' /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/dependency_list.rb:22:in 'include' /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/dependency_list.rb:22:in 'append_features' -- Threading information --------------------------------------------------- Total ractor count: 1 Ruby thread count for this ractor: 1 -- Machine register context ------------------------------------------------ x0: 0x0000000000000000 x1: 0x0000000122769760 x2: 0x00000001034d5ca4 x3: 0x000000016d552e58 x4: 0x0000000000000001 x5: 0x0000000000000000 x6: 0xffffffffbfc007ff x7: 0xfffff0003ffff800 x18: 0x0000000000000000 x19: 0x0000000000000000 x20: 0x00000001029adc08 x21: 0x0000000a35a0f5c0 x22: 0x00000001034ddf44 x23: 0x0000000122769760 x24: 0x00000001227c06f0 x25: 0x0000000a35a0f480 x26: 0x0000000000000000 x27: 0x0000000a34c82f40 x28: 0x0000000a34a5bc00 lr: 0x00000001034d6144 fp: 0x000000016d552e40 sp: 0x000000016d552dc0 -- C level backtrace information ------------------------------------------- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(rb_vm_bugreport+0xbc8) [0x1037448e8] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(rb_bug_for_fatal_signal+0x10c) [0x10356305c] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(sigsegv+0x90) [0x103697158] /usr/lib/system/libsystem_platform.dylib(_sigtramp+0x38) [0x183523744] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(rb_class_duplicate_classext+0x410) [0x1034d6144] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(rb_class_duplicate_classext+0x410) [0x1034d6144] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(RCLASS_EXT_WRITABLE_LOOKUP+0xd4) [0x10370e258] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(rb_ivar_lookup+0x18c) [0x103706cbc] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(rb_include_module+0x5c) [0x1034d9fc4] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(rb_mod_append_features+0x38) [0x103570890] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(vm_call0_body+0x358) [0x10373a224] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(rb_funcallv_scope+0x250) [0x103721c18] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(rb_funcall+0x88) [0x10372202c] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(rb_mod_include+0x108) [0x10357063c] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(vm_call_cfunc_with_frame_+0xf0) [0x1037340a8] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(vm_exec_core+0x3cc8) [0x103718790] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(rb_vm_exec+0x284) [0x103712ed8] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(load_iseq_eval+0x230) [0x1035d61dc] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(require_internal+0x31c) [0x1035d41d0] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(rb_require_string_internal+0x60) [0x1035d374c] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(vm_call0_body+0x358) [0x10373a224] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(rb_vm_call_kw+0xc4) [0x103720c24] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(rb_call_super_kw+0x2bc) [0x103720f54] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(vm_call_cfunc_with_frame_+0xf0) [0x1037340a8] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(vm_exec_core+0x3cc8) [0x103718790] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(rb_vm_exec+0x284) [0x103712ed8] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(load_iseq_eval+0x230) [0x1035d61dc] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(require_internal+0x31c) [0x1035d41d0] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(rb_require_string_internal+0x60) [0x1035d374c] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(vm_call0_body+0x358) [0x10373a224] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(rb_vm_call_kw+0xc4) [0x103720c24] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(rb_call_super_kw+0x2bc) [0x103720f54] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(vm_call_cfunc_with_frame_+0xf0) [0x1037340a8] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(vm_exec_core+0x3cc8) [0x103718790] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(rb_vm_exec+0x284) [0x103712ed8] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(load_iseq_eval+0x230) [0x1035d61dc] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(require_internal+0x31c) [0x1035d41d0] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(rb_require_string_internal+0x60) [0x1035d374c] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(rb_f_require+0x44) [0x1035d3614] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(vm_call_cfunc_with_frame_+0xf0) [0x1037340a8] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(vm_call_method_each_type+0x348) [0x10372da80] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(vm_exec_core+0x3cc8) [0x103718790] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(rb_vm_exec+0x284) [0x103712ed8] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(rb_vm_call_kw+0xc4) [0x103720c24] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(rb_call_super_kw+0x2bc) [0x103720f54] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(vm_call_cfunc_with_frame_+0xf0) [0x1037340a8] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(vm_exec_core+0x3cc8) [0x103718790] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(rb_vm_exec+0x284) [0x103712ed8] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(rb_ec_exec_node+0x8c) [0x10356e27c] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib(ruby_run_node+0x4c) [0x10356e19c] /Users/wilson/.local/share/mise/installs/ruby/4.0.0/bin/ruby(main+0x68) [0x1028a8620] -- Other runtime information ----------------------------------------------- * Loaded script: /Users/wilson/.local/share/mise/installs/ruby/4.0.0/bin/gem * Ruby Box: enabled * Current box id: 2, type: main * Loaded features: 0 enumerator.so 1 thread.rb 2 fiber.so 3 rational.so 4 complex.so 5 pathname.so 6 ruby2_keywords.rb 7 set.rb 8 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/arm64-darwin25/enc/encdb.bundle 9 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/arm64-darwin25/enc/trans/transdb.bundle 10 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/arm64-darwin25/rbconfig.rb 11 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/defaults.rb 12 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/deprecate.rb 13 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/errors.rb 14 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/target_rbconfig.rb 15 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/win_platform.rb 16 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/unknown_command_spell_checker.rb 17 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/exceptions.rb 18 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/basic_specification.rb 19 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/stub_specification.rb 20 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/platform.rb 21 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/specification_record.rb 22 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/util/list.rb 23 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/version.rb 24 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/requirement.rb 25 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/specification.rb 26 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/util.rb 27 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/dependency.rb 28 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/core_ext/kernel_gem.rb 29 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/arm64-darwin25/monitor.bundle 30 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/monitor.rb 31 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems.rb 32 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/bundled_gems.rb 33 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/path_support.rb 34 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/error_highlight/version.rb 35 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/error_highlight/base.rb 36 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/error_highlight/formatter.rb 37 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/error_highlight/core_ext.rb 38 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/error_highlight.rb 39 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/did_you_mean/version.rb 40 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/did_you_mean/core_ext/name_error.rb 41 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/did_you_mean/levenshtein.rb 42 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/did_you_mean/jaro_winkler.rb 43 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/did_you_mean/spell_checker.rb 44 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb 45 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb 46 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/did_you_mean/spell_checkers/name_error_checkers.rb 47 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/did_you_mean/spell_checkers/method_name_checker.rb 48 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/did_you_mean/spell_checkers/key_error_checker.rb 49 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/did_you_mean/spell_checkers/null_checker.rb 50 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/did_you_mean/tree_spell_checker.rb 51 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/did_you_mean/spell_checkers/require_path_checker.rb 52 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/did_you_mean/spell_checkers/pattern_key_name_checker.rb 53 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/did_you_mean/formatter.rb 54 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/did_you_mean.rb 55 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/syntax_suggest/core_ext.rb 56 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/vendor/optparse/lib/optparse.rb 57 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/vendored_optparse.rb 58 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/text.rb 59 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/user_interaction.rb 60 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/command.rb 61 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/command_manager.rb 62 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/gem_runner.rb 63 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/vendor/timeout/lib/timeout.rb 64 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/vendored_timeout.rb 65 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/vendor/tsort/lib/tsort.rb 66 /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/rubygems/vendored_tsort.rb * Process memory map: 1028a8000-1028ac000 r-x /Users/wilson/.local/share/mise/installs/ruby/4.0.0/bin/ruby 1028ac000-1028b0000 r-- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/bin/ruby 1028b0000-1028b4000 r-- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/bin/ruby 1028b4000-1028bc000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/bin/ruby 1028bc000-1028c4000 r-- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/bin/ruby 1028c8000-1028cc000 r-- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/bin/ruby 1028d0000-1028e0000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/bin/ruby 1028e0000-1028ec000 r-- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/bin/ruby 1028f0000-102900000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/arm64-darwin25/enc/encdb.bundle 102900000-102904000 r-x /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/arm64-darwin25/enc/encdb.bundle 102904000-102908000 r-- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/arm64-darwin25/enc/encdb.bundle 102908000-10290c000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/arm64-darwin25/enc/encdb.bundle 10290c000-102910000 r-- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/arm64-darwin25/enc/encdb.bundle 102910000-102920000 rw- /opt/homebrew/Cellar/gmp/6.3.0/lib/libgmp.10.dylib 102924000-10297c000 r-x /opt/homebrew/Cellar/gmp/6.3.0/lib/libgmp.10.dylib 10297c000-102980000 r-- /opt/homebrew/Cellar/gmp/6.3.0/lib/libgmp.10.dylib 102980000-102984000 rw- /opt/homebrew/Cellar/gmp/6.3.0/lib/libgmp.10.dylib 102984000-102994000 r-- /opt/homebrew/Cellar/gmp/6.3.0/lib/libgmp.10.dylib 1029a0000-1029b0000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/arm64-darwin25/enc/trans/transdb.bundle 1029b0000-1029b4000 r-x /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/arm64-darwin25/enc/trans/transdb.bundle 1029b4000-1029b8000 r-- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/arm64-darwin25/enc/trans/transdb.bundle 1029b8000-1029bc000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/arm64-darwin25/enc/trans/transdb.bundle 1029bc000-1029c0000 r-- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/arm64-darwin25/enc/trans/transdb.bundle 1029c0000-1029d0000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/arm64-darwin25/monitor.bundle 1029d0000-1029d4000 r-x /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/arm64-darwin25/monitor.bundle 1029d4000-1029d8000 r-- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/arm64-darwin25/monitor.bundle 1029d8000-1029dc000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/arm64-darwin25/monitor.bundle 1029dc000-1029e0000 r-- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/arm64-darwin25/monitor.bundle 1029e0000-1029f0000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/arm64-darwin25/etc.bundle 1029f0000-1029f4000 r-x /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/arm64-darwin25/etc.bundle 1029f4000-1029f8000 r-- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/arm64-darwin25/etc.bundle 1029f8000-1029fc000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/arm64-darwin25/etc.bundle 1029fc000-102a00000 r-- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/ruby/4.0.0/arm64-darwin25/etc.bundle 102a00000-102a10000 rw- /usr/lib/dyld 102a20000-102a30000 rw- /usr/lib/dyld 102a40000-102a50000 rw- /usr/lib/dyld 102a60000-102a70000 rw- /usr/lib/dyld 102a80000-102a90000 rw- /usr/lib/dyld 102aa0000-102ab0000 rw- /usr/lib/dyld 102ac0000-102ad0000 rw- /usr/lib/dyld 102ae0000-102af0000 rw- /usr/lib/dyld 102b00000-102b10000 rw- /usr/lib/dyld 102b20000-102b30000 rw- /usr/lib/dyld 102b40000-102b50000 rw- /usr/lib/dyld 102b68000-102bc8000 --- /usr/lib/dyld 102bc8000-102cc4000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 102cc4000-102cfc000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 102cfc000-102d00000 r-- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 102d00000-102d08000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 102d08000-102d0c000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 102d0c000-102d8c000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 102d90000-102da0000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 102db0000-102dc0000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 102dc4000-102ff8000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 102ff8000-102ffc000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 102ffc000-1033fc000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1033fc000-103400000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 103410000-103420000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 103430000-103440000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 103450000-103460000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 103470000-103480000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 103490000-1034a0000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1034a4000-103b0c000 r-x /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 103b0c000-103b3c000 r-- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 103b3c000-103b40000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 103b40000-103b58000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 103b58000-103d98000 r-- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 103d98000-107d9c000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 107d9c000-10919c000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 10919c000-11119c000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 11119c000-11919c000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 11919c000-12119c000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 12119c000-1211a0000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1211a0000-121244000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121244000-121248000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121248000-1212ec000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1212ec000-1212f0000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1212f0000-121394000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121394000-121398000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121398000-12143c000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 12143c000-121440000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121440000-1214e4000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1214e4000-1214e8000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1214e8000-12158c000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 12158c000-121590000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121590000-121634000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121634000-121638000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121638000-1216dc000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1216dc000-1216e0000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1216e0000-121784000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121784000-121788000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121788000-12182c000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 12182c000-121830000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121830000-1218d4000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1218d4000-1218d8000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1218d8000-12197c000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 12197c000-121980000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121980000-121a24000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121a24000-121a28000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121a28000-121acc000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121acc000-121ad0000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121ad0000-121b74000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121b74000-121b78000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121b78000-121c1c000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121c1c000-121c20000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121c20000-121cc4000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121cc4000-121cc8000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121cc8000-121d6c000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121d6c000-121d70000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121d70000-121e14000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121e14000-121e18000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121e18000-121ebc000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121ebc000-121ec0000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121ec0000-121f64000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121f64000-121f68000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 121f68000-12200c000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 12200c000-122010000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 122010000-1220b4000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1220b4000-1220b8000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1220b8000-12215c000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 12215c000-122160000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 122160000-122204000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 122204000-122208000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 122208000-1222ac000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1222ac000-1222b0000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1222b0000-122354000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 122354000-122358000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 122358000-1223fc000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1223fc000-122400000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 122400000-1224a4000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1224a4000-1224a8000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1224a8000-12254c000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 12254c000-122550000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 122550000-1225f4000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1225f4000-1225f8000 --- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1225f8000-12269c000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1226a0000-1226b0000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1226c0000-1226d0000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1226e0000-1226f0000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 122700000-122710000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 122720000-122730000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 122740000-122750000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 122760000-122770000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 122780000-122790000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1227a0000-1227b0000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1227c0000-1227d0000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1227e0000-1227f0000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 122800000-122810000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 122820000-122830000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 122840000-122850000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 122860000-122870000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 122880000-122890000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1228a0000-1228b0000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1228c0000-1228d0000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1228e0000-1228f0000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 122900000-122910000 rw- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 122910000-1231ec000 r-- /Users/wilson/.local/share/mise/installs/ruby/4.0.0/lib/libruby.4.0.dylib 1231ec000-123250000 r-- /usr/lib/system/libsystem_platform.dylib 12ee00000-12ee04000 rw- 169558000-16cd5c000 --- 16cd5c000-16d558000 rw- 16d558000-16d55c000 --- 16d55c000-16d5e4000 rw- 180000000-1e8000000 r-- 1e8000000-1e9b18000 r-- 1e9b18000-1ebdd8000 r-- 1ebdd8000-1ec000000 r-- 1ec000000-1eddd8000 r-- 1eddd8000-1ee000000 rw- 1ee000000-1efc38000 r-- 1efc38000-1efc5c000 r-- 1efc5c000-1f1430000 rw- 1f1430000-1f8f28000 r-- 1f8f28000-1fa000000 r-- 1fa000000-290000000 r-- 290000000-2912bc000 r-- 2912bc000-293e6c000 r-- 293e6c000-294000000 r-- 294000000-29a000000 r-- 29a000000-29a2f0000 r-- 29a2f0000-29bd54000 rw- 29bd54000-2a175c000 r-- 2a175c000-2a2000000 r-- 2a2000000-300000000 r-- 674000000-674400000 rw- 674400000-674800000 rw- 734000000-a34400000 --- a34400000-a34800000 rw- a34800000-a34c00000 rw- a34c00000-a35000000 rw- a35000000-a35400000 rw- a35400000-a35800000 rw- a35800000-a35c00000 rw- a35c00000-a36000000 rw- a36000000-a36400000 rw- a36400000-d34000000 --- fc0000000-1000000000 --- 1000000000-7000000000 --- [IMPORTANT] Don't forget to include the Crash Report log file under DiagnosticReports directory in bug reports. [1] 61568 segmentation fault gem update --system ``` ---Files-------------------------------- ruby-2025-12-28-132602.ips (15.2 KB) -- https://bugs.ruby-lang.org/
2 2
0 0
[ruby-core:124496] [Ruby Bug#21824] performance regression in regexp matching after update to 4.0
by mackuba (Kuba Suder) 13 Jan '26

13 Jan '26
Issue #21824 has been updated by mackuba (Kuba Suder). I've tested latest master on my machine and it seems to be fixed, thank you! ---------------------------------------- Bug #21824: performance regression in regexp matching after update to 4.0 https://bugs.ruby-lang.org/issues/21824#change-116049 * Author: mackuba (Kuba Suder) * Status: Closed * ruby -v: ruby 4.0.0 (2025-12-25 revision 553f1675f3) +PRISM [arm64-darwin24] * Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN, 4.0: UNKNOWN ---------------------------------------- TLDR: a change in the regexp algorithm in regcomp.c merged around October was supposed to speed up the matching, but it seems it has slowed it down more in practice. === I'm running a service written in Ruby which serves some number of Bluesky feeds. As part of this service, I have a process that connects to a websocket API (w/ EventMachine), reads from it all new posts made on the network in real time (on the order of ~100 posts per second on average lately), and passes each post through a #post_matches? method in about 20 feed objects, each of which has a number of regexps configured (most have around 20-30, but one has a few hundred, probably something like 900 regexps in total). If a given post's text (up to 300 unicode characters) matches any of the regexps of the given feed (and/or matches some additional conditions), it's added to this feed in the database. I often use a slightly older version of this project with a fixed pre-downloaded chunk of the posts stream, with ~100k random but real posts in one large binary file, as a benchmark on different versions of Ruby. So I ran it again on 4.0 after it was released a week ago, and I got this: https://bsky.app/profile/mackuba.eu/post/3mb2quhdoqs23 The numbers are the calculated speed of processing, in events per second, after going through the whole sample of 100k events and a full set of feeds. So there was a 5-6% slowdown on Ruby 4.0 vs. Ruby 3.4 (with or without YJIT), putting it below any version of Ruby since 3.0. I started profiling which specific parts of the code got slower, and I narrowed it down to regexp matching (the full loop also does e.g. decoding of data from a binary format from the file). I made a demo project reproducing this here (note, linking to a slightly earlier commit): https://tangled.org/mackuba.eu/ruby4.0-regexp-test/tree/63e208de944debdc0a6…. There are 940 posts here in the sample and 17 regexps, and running 1000 loops takes 7 seconds on Ruby 3.4, but 13.5s on 4.0 (so almost 2x longer). Then, I started digging into the details to see if some specific posts or specific regexps cause the slowdown. It turned out that most of the 17 regexps, if tested alone, work about the same on 3.4 & 4.0, but two work around 4x slower: /\bslackware\b/i and /\bkde plasma\b/i. (This seems to be not only about the length of the regexp, but also specific characters, because e.g. /\blongstring\b/i does not trigger this effect.) It also seems that this only happens if the searched string contains non-ASCII characters. An updated, more minimal version of the demo is here: https://tangled.org/mackuba.eu/ruby4.0-regexp-test/tree/d9e145c1e9f39fca6dd…. One regexp and one string. With a million loops, it takes 0.75s on Ruby 3.4, but 2.7s on Ruby 4.0. (No change on latest master, ruby 4.1.0dev (2026-01-05T17:18:47Z master 7e81bf5c0c), i.e. it's still much slower than on 3.4.) If the few non-ASCII characters (apostrophe, ndash, ellipsis, TM) are removed from the string, the slowdown goes away. Finally, with some help from Codex I tried to track down which specific change between 3.4 and 4.0 caused this slowdown. It turned out to be this commit: https://github.com/ruby/ruby/commit/981ee02c7c664f19b983662d618d5e6bd87d1739, authored in November 2017 (!), but merged around 31st October this year. It says it "fixes performance problem with /k/i and /s/i". I'm not familiar with these string search algorithms so I'm not able to evaluate this in detail or say how this could be fixed, but from the description I'm assuming that it improves performance in some cases of text/regexp, but apparently degrades it in some others like mine. Since in my main test of a practical scenario which matches ~100k posts against ~900 regexps, as well as the earlier demo which matches 940 posts against 17 regexps, the updated version in 4.0 is slower (5% and 47% slower, respectively), my guess is that the net result will generally be negative, i.e. that this change committed in October makes more cases slower than it makes faster. But like I said, I don't know enough about regexp algorithms to analyze this deeper, I can only report my results. -- https://bugs.ruby-lang.org/
1 0
0 0
[ruby-core:124383] [Ruby Bug#21812] Kernel#sleep without arguments returns immediately when subprocess exits in another thread (regression in Ruby 4.0)
by jaimevelaz (Jaime Velaz) 13 Jan '26

13 Jan '26
Issue #21812 has been reported by jaimevelaz (Jaime Velaz). ---------------------------------------- Bug #21812: Kernel#sleep without arguments returns immediately when subprocess exits in another thread (regression in Ruby 4.0) https://bugs.ruby-lang.org/issues/21812 * Author: jaimevelaz (Jaime Velaz) * Status: Open * ruby -v: ruby 4.0.0 (2025-12-25 revision 553f1675f3) +PRISM [arm64-darwin25] * Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN, 4.0: UNKNOWN ---------------------------------------- **Description** In Ruby 4.0.0, Kernel#sleep without arguments returns 0 immediately when a subprocess (spawned via backticks in another thread) exits. This is a regression from Ruby 3.4.8 where sleep blocks indefinitely as expected. Note: sleep(N) with an argument is not affected. --- **Steps to reproduce** ``` # test_sleep.rb 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}" ``` Run with: `$ ruby test_sleep.rb` --- Actual result (Ruby 4.0.0): Main thread sleeping... Subprocess exited sleep returned: 0 The program exits immediately after the subprocess completes. --- Expected result (Ruby 3.4.8 behavior): Main thread sleeping... Subprocess exited (process blocks indefinitely until interrupted by signal) The program should block forever until explicitly interrupted by SIGINT/SIGTERM. -- https://bugs.ruby-lang.org/
3 2
0 0
  • ← Newer
  • 1
  • ...
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • Older →

HyperKitty Powered by HyperKitty version 1.3.12.