From: i@... Date: 2021-07-07T18:35:24+00:00 Subject: [ruby-core:104537] [Ruby master Bug#18023] Ractor#make_shareable changes the values of closured shareable objects Issue #18023 has been updated by slowpilot (Ivan Razuvaev). slowpilot (Ivan Razuvaev) wrote: > Hi. I encountered strange behaviour or shareable procs when every even closured shareable variable becomes the FalseClass instance. > > ``` ruby > [usr@srvr ~]$ irb > 3.0.1 :001 > v1, v2, v3, v4 = :a, :b, :c, :d > => [:a, :b, :c, :d] > 3.0.1 :002 > p = Proc.new { p v1, v2, v3, v4 } > => # > 3.0.1 :003 > p.() > :a > :b > :c > :d > => [:a, :b, :c, :d] > 3.0.1 :004 > Ractor.make_shareable(p).() > :a > false > :c > false > => [:a, false, :c, false] > ``` This is stopping from using dynamically defined methods from ractors. E.g. in Ruby [libtorch](https://github.com/orlando-labs/torch.rb/blob/2c8c1c89ded3ac924a19020d6c747582d1c828cc/lib/torch.rb#L256). So after calling rb_ext_ractor_safe in extension, I am trying to do something like: ```ruby cls.define_singleton_method('new', Ractor.make_shareable(Proc.new { ... }) ``` That leads to every second closure assignment to false. ---------------------------------------- Bug #18023: Ractor#make_shareable changes the values of closured shareable objects https://bugs.ruby-lang.org/issues/18023#change-92812 * Author: slowpilot (Ivan Razuvaev) * Status: Open * Priority: Normal * ruby -v: 3.0.0, 3.0.1 * Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN ---------------------------------------- Hi. I encountered strange behaviour or shareable procs when every even closured shareable variable becomes the FalseClass instance. ``` ruby [usr@srvr ~]$ irb 3.0.1 :001 > v1, v2, v3, v4 = :a, :b, :c, :d => [:a, :b, :c, :d] 3.0.1 :002 > p = Proc.new { p v1, v2, v3, v4 } => # 3.0.1 :003 > p.() :a :b :c :d => [:a, :b, :c, :d] 3.0.1 :004 > Ractor.make_shareable(p).() :a false :c false => [:a, false, :c, false] ``` -- https://bugs.ruby-lang.org/ Unsubscribe: