[#88925] [Ruby trunk Feature#15095] [PATCH] share VM stack between threads and fibers if identical — ko1@...
Issue #15095 has been updated by ko1 (Koichi Sasada).
4 messages
2018/09/09
[#88927] Re: [Ruby trunk Feature#15095] [PATCH] share VM stack between threads and fibers if identical
— Eric Wong <normalperson@...>
2018/09/09
ko1@atdot.net wrote:
[#88926] [Ruby trunk Feature#15095] [PATCH] share VM stack between threads and fibers if identical — ko1@...
Issue #15095 has been updated by ko1 (Koichi Sasada).
3 messages
2018/09/09
[#89218] [Ruby trunk Bug#15130] open-uri hangs on cygwin — duerst@...
Issue #15130 has been updated by duerst (Martin D端rst).
5 messages
2018/09/30
[ruby-core:89002] [Ruby trunk Bug#14364] Regexp last match variable in procs
From:
niinikazuki@...
Date:
2018-09-14 05:28:10 UTC
List:
ruby-core #89002
Issue #14364 has been updated by long_long_float (kazuki niimi).
This may be a specification. [This](https://docs.ruby-lang.org/ja/latest/method/Kernel/v/=7e.html)(it's written in japanese) page says `$~` is local scope and thread local.
The following code describes this behavior. The `a` can be referred at `my_proc`, but it cannot be referrd at `ScanChecker` (the initial value of `$ ~` is nil).
```ruby
a = 10
class ScanChecker
def block
Proc.new do
puts a # error
puts "$~ is #{$~}"
end
end
end
puts 'Checking with a Proc from same scope'
my_proc = Proc.new do
puts a # => 10
puts "$~ is #{$~}"
end
'hello'.scan(/l/, &my_proc)
puts 'Checking with a Proc.'
checker = ScanChecker.new
'hello'.scan(/l/, &checker.block)
```
----------------------------------------
Bug #14364: Regexp last match variable in procs
https://bugs.ruby-lang.org/issues/14364#change-74030
* Author: aardvark179 (Duncan MacGregor)
* Status: Open
* Priority: Normal
* Assignee:
* Target version:
* ruby -v: 2.5.0p0 (2017-12-25 revision 61468) [x86_64-linux]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
While working on TruffleRuby's regexp variables implementation I found the following behaviour when comparing our behaviour with MRI 2.3.5 and 2.5.0.
Some core methods such as `String#scan` take an optional block argument, and if this is a literal block then each time it is yielded to the `$~` variable will have been set. However, if the block is a proc that was not defined in the caller's scope then `$~` does not appear to get set or is inaccessible.
The following test script demonstrates the problem.
~~~ ruby
class ScanChecker
def block
Proc.new do
puts "$~ is #{$~}"
end
end
end
puts 'Checking with literal block.'
'hello'.scan(/l/) do
puts "$~ is #{$~}"
end
puts 'Checking with a Proc from same scope'
my_proc = Proc.new do
puts "$~ is #{$~}"
end
'hello'.scan(/l/, &my_proc)
puts 'Checking with a Proc.'
checker = ScanChecker.new
'hello'.scan(/l/, &checker.block)
~~~
I would have expected the `$~` to be set in all cases, but I'm not sure if that is the intended behaviour.
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>