[MacRuby-devel] [MacRuby] #795: GCD inconsistently copies local variables inside blocks
Rob Gleeson
rob at flowof.info
Thu Jul 15 14:29:13 PDT 2010
Hey ernest,
I haven't got any experience with GCD but wouldn't it make more sense if block arguments were received as parameters to the block?
This would make the variables block-local.
Dispatch::Queue.new("i").sync { |i| # block local 'i' }
Remember blocks in Ruby are closures, too.
Rob
----
http://robgleeson.github.com Website
http://github.com/robgleeson GitHub
rob at flowof.info E-Mail
On 15 Jul 2010, at 21:47, MacRuby wrote:
> #795: GCD inconsistently copies local variables inside blocks
> ----------------------------------------+-----------------------------------
> Reporter: ernest.prabhakar@… | Owner: lsansonetti@…
> Type: defect | Status: new
> Priority: critical | Milestone:
> Component: MacRuby | Keywords:
> ----------------------------------------+-----------------------------------
> The expectation is that Ruby blocks will have their local variables copied
> before being passed to GCD, to avoid errors from accessing them after they
> are destroyed.
>
> However, that does not seem to always happen. For example:
>
> $ macruby -e 'i=0; Dispatch::Queue.new("i").sync {i = 42}; puts i'
>
> returns '0' as expected. However, this does not:
>
> $ macirb
> irb(main):001:0> i=0; Dispatch::Queue.new("i").sync {i = 42}; puts i
> 42
> => nil
>
> It appears to be copied properly in the block_spec.rb test:
>
> it "should create const copies of dynamic (local) variables" do
> i = 42
> @q.sync {i = 1}
> i.should == 42
> end
>
> But not in the README.rdoc for the dispatch module (aka
> dispatch_methods.rb sample):
>
> n = 0
> job = Dispatch::Job.new { n = 21 }
> job.join
> puts "n (after): #{n} => 0?!?" # [returns 21, not 0]
>
> Any suggestions?
>
> --
> Ticket URL: <http://www.macruby.org/trac/ticket/795>
> MacRuby <http://macruby.org/>
>
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel at lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
More information about the MacRuby-devel
mailing list