Issue #19325 has been reported by dsisnero (Dominic Sisneros).
----------------------------------------
Bug #19325: Windows support lacking.
https://bugs.ruby-lang.org/issues/19325
* Author: dsisnero (Dominic Sisneros)
* Status: Open
* Priority: Normal
* Backport: 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN
----------------------------------------
Ruby's support on windows has always been second class. With some of the recent decisions, windows support is falling even more behind. Recent developments in mjit and yjit that exclude windows are two glaring issues that should be corrected. Googling 'percent of windows vs other operating systems' and it shows windows has a share of 76%. Ceding that users to python and other programming languages has to be one of the reasons python continues get more market share from ruby. With rust having first class windows support and threading support, is there a reason why yjit is not able to work on windows? Also, windows compiler support has matured enough and vcpkg support has evolved enough that it seems it should be possible to finally get a ruby version without having to use msys2. Even Crystal language has a version that runs on windows without needing msys2.
--
https://bugs.ruby-lang.org/
Issue #19572 has been reported by st0012 (Stan Lo).
----------------------------------------
Feature #19572: Proposal: New TracePoint event for rescued exceptions
https://bugs.ruby-lang.org/issues/19572
* Author: st0012 (Stan Lo)
* Status: Open
* Priority: Normal
----------------------------------------
**Summary**
Support a new `rescue` event type in TracePoint. When the event is triggered, `TracePoint#rescued_exception` can be used to access the exception.
**Reason**
Currently, TracePoint supports `raise` events, which can be helpful for debugging by showing which exception occurs at which location. By adding a `rescue` event type, we can improve the developer's debugging experience by making it easier to check where an exception is rescued.
Currently, the most effective way to check where an exception is rescued involves setting a breakpoint at the exception's raised location and stepping through the code to see whether the debugger stops inside a rescue block. However, this can be a tedious process, especially in large applications with deep call stacks. By using a TracePoint event for rescue, developers can easily track exceptions as they are rescued by adding a few lines of code:
```
TracePoint.trace(:rescue) do |tp|
puts "Exception rescued: #{tp.rescued_exception} at #{tp.path}:#{tp.lineno}"
end
```
This new TracePoint event will also improve the `ruby/debug`'s [`ExceptionTracer`](https://github.com/ruby/debug/blob/master/lib/debug/tracer.rb#L150-L166) and provide users with a better debugging experience.
--
https://bugs.ruby-lang.org/
Issue #19795 has been reported by francktrouillez (Franck Trouillez).
----------------------------------------
Bug #19795: attr_accessor leading to nil values for re-assignment
https://bugs.ruby-lang.org/issues/19795
* Author: francktrouillez (Franck Trouillez)
* Status: Open
* Priority: Normal
* ruby -v: ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-linux]
* Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN
----------------------------------------
### Steps to reproduce:
- Create a class with an `attr_accessor` for an instance variable
- Create an instance method that reassign this variable using the current value stored in the variable
- Show that the variable is set to nil during the evaluation
Code snippet:
``` ruby
# attr_accessor_nil.rb
class A
attr_accessor :a
def initialize
@a = 1
end
def my_method
puts "a is '#{a.inspect}' of class '#{a.class}'"
a += 1 if a.positive? # use an integer method
end
end
instance = A.new
instance.my_method
# output:
#
# a is '1' of class 'Integer'
# attr_accessor_nil.rb:12:in `my_method': undefined method `positive?' for nil:NilClass (NoMethodError)
#
# a += 1 if a.positive? # use an integer method
# ^^^^^^^^^^
# from attr_accessor_nil.rb:17:in `<main>'
```
### Expected behavior
`a += 1` should lead to `a` being equal to `1` at the end of the assignment, because `a` was storing `0` previously, as shown by the `puts`. Am I being wrong expecting this result?
### Actual behavior
`a += 1` raises an error about `a` being `nil` in the evaluation.
### Further investigation
I checked if it was coming from the "instance variable", or about the "attr_accessor" by running the following snippet:
Code snippet:
```ruby
# attr_accessor_nil.rb
class A
attr_accessor :a
def initialize
@a = 0
end
def my_method
puts "a is '#{a.inspect}' of class '#{a.class}'"
@a += 1 # use the instance variable directly, instead of the accessor
end
end
instance = A.new
instance.my_method
# output:
#
# a is '1' of class 'Integer'
```
This snippet runs just fine, and no error is raised.
### System configuration
Ruby version : 3.2.2
--
https://bugs.ruby-lang.org/