[#47790] [ruby-trunk - Bug #7097][Open] Thread locals don't work inside Enumerator — "tenderlovemaking (Aaron Patterson)" <aaron@...>

32 messages 2012/10/01
[#47791] [ruby-trunk - Bug #7097][Assigned] Thread locals don't work inside Enumerator — "kosaki (Motohiro KOSAKI)" <kosaki.motohiro@...> 2012/10/01

[#47792] Re: [ruby-trunk - Bug #7097][Assigned] Thread locals don't work inside Enumerator — Aaron Patterson <tenderlove@...> 2012/10/01

On Tue, Oct 02, 2012 at 03:05:17AM +0900, kosaki (Motohiro KOSAKI) wrote:

[#47798] Re: [ruby-trunk - Bug #7097][Assigned] Thread locals don't work inside Enumerator — SASADA Koichi <ko1@...> 2012/10/01

(2012/10/02 3:12), Aaron Patterson wrote:

[#47800] Re: [ruby-trunk - Bug #7097][Assigned] Thread locals don't work inside Enumerator — SASADA Koichi <ko1@...> 2012/10/01

(2012/10/02 8:22), SASADA Koichi wrote:

[#47832] [ruby-trunk - Feature #7106][Open] FileUtils.touch should allow touching the symlink itself rather than the file the link points to — "cirrusthinking (Alessandro Diaferia)" <alessandro@...>

18 messages 2012/10/04

[#47847] [ruby-trunk - Bug #7110][Open] CGI: Add support for HTML5 <header> tag — "stomar (Marcus Stollsteimer)" <redmine@...>

16 messages 2012/10/05

[#47870] [ruby-trunk - Bug #7123][Open] Segmentation fault in ruby 1.9.3-p194 — "mscottford (M. Scott Ford)" <scott@...>

13 messages 2012/10/09

[#47880] [ruby-trunk - Bug #7134][Open] Signal handling bug in Mac OS X — "auastro (Andy Kitchen)" <kitchen.andy+rubybug@...>

17 messages 2012/10/10

[#47881] [ruby-trunk - Bug #7135][Open] GC bug in Ruby 1.9.3-p194? — "alexdowad (Alex Dowad)" <alexinbeijing@...>

21 messages 2012/10/10

[#47887] [ruby-trunk - Bug #7137][Open] Date.parse overly lenient when attempting to parse Monday? — "garysweaver (Gary Weaver)" <garysweaver@...>

12 messages 2012/10/10

[#47930] [ruby-trunk - Feature #7148][Open] Improved Tempfile w/o DelegateClass — "Glass_saga (Masaki Matsushita)" <glass.saga@...>

14 messages 2012/10/12

[#47970] [ruby-trunk - Bug #7158][Open] require is slow in its bookkeeping; can make Rails startup 2.2x faster — "gregprice (Greg Price)" <price@...>

30 messages 2012/10/14

[#48027] [Backport93 - Backport #7172][Open] [[Ruby 1.9:]] fix rbconfig for --enable-load-relative (v2) — "mpapis (Michal Papis)" <mpapis@...>

13 messages 2012/10/16

[#48053] [ruby-trunk - Bug #7180][Open] set_trace_func with error in proc block locks up Ruby with 100% cpu usage and no way to exit without killing proc — "garysweaver (Gary Weaver)" <garysweaver@...>

8 messages 2012/10/17

[#48072] [ruby-trunk - Bug #7184][Open] --disable-gems commandline parameter does not show up with ruby -h — "steenslag (siep korteling)" <s.korteling@...>

10 messages 2012/10/18

[#48130] [ruby-trunk - Bug #7200][Open] Setting external encoding with BOM| — "brixen (Brian Ford)" <brixen@...>

14 messages 2012/10/21

[#48191] [ANN] 2.0.0 feature freeze — Yusuke Endoh <mame@...>

Japanese later; 日本語は後で

37 messages 2012/10/24
[#48696] Re: [ANN] 2.0.0 feature freeze — SASADA Koichi <ko1@...> 2012/11/01

(2012/10/24 5:39), Yusuke Endoh wrote:

[#48260] [ruby-trunk - Bug #7214][Open] Ruby 2.0 breaks support for some debugging tools — "banister (john mair)" <jrmair@...>

22 messages 2012/10/25

[#48315] [ruby-trunk - Bug #7220][Open] StringIO#initialize_copy causes aliasing between the objects — "brixen (Brian Ford)" <brixen@...>

13 messages 2012/10/26

[#48413] [ruby-trunk - Bug #7221][Open] Unable to compile kgio under 1.9.3 with error: ruby-1.9.3-<plvl>/lib/ruby/1.9.1/mkmf.rb:597:in `Integer': can't convert nil into Integer (TypeError) — "davidderyldowney (David Deryl Downey)" <me@...>

9 messages 2012/10/27

[#48549] [ruby-trunk - Feature #7240][Open] Inheritable #included/#extended Hooks For Modules — "apotonick (Nick Sutterer)" <apotonick@...>

14 messages 2012/10/29

[#48551] [ruby-trunk - Feature #7241][Open] Enumerable#to_h proposal — "nathan.f77 (Nathan Broadbent)" <nathan.f77@...>

23 messages 2012/10/29

[#48552] [ruby-trunk - Bug #7242][Open] Bignum mathematical accuracy regression in r31695 — "mhall (Matthew Hall)" <mhall@...>

11 messages 2012/10/29

[ruby-core:47985] [ruby-trunk - Feature #6668] Multiple assignment should not return an Array object

From: "headius (Charles Nutter)" <headius@...>
Date: 2012-10-14 19:55:19 UTC
List: ruby-core #47985
Issue #6668 has been updated by headius (Charles Nutter).


I thought I replied to ko1, but must not have.

I believe MRI is using the same trick JRuby is...specifically, when the masgn's result is not used, it is not created. However, that does not help cases where masgn happens to be the last line in a method but its result is not used.

For example, the first case cannot optimize the masgn array away, but the second case can. The difference on even this small test is almost 2x GC runs:

system ~/projects/jruby $ ruby-2.0.0 -e "GC::Profiler.enable; class A; def initialize(a, b); @a, @b = a, b; end; end; 100000.times {A.new(1, 2)}; GC::Profiler.report"
GC 17 invokes.
Index    Invoke Time(sec)       Use Size(byte)     Total Size(byte)         Total Object                    GC Time(ms)
    1               0.012               187520               701760                17544         0.25600000000000100453
    2               0.014               187520               701760                17544         0.23500000000000081934
    3               0.017               187440               701760                17544         0.22700000000000150613
    4               0.020               187440               701760                17544         0.23100000000000203704
    5               0.023               187440               701760                17544         0.23700000000000109868
    6               0.025               187440               701760                17544         0.22199999999999997513
    7               0.028               187440               701760                17544         0.20999999999999838241
    8               0.031               187440               701760                17544         0.23499999999999909850
    9               0.033               187440               701760                17544         0.24400000000000116041
   10               0.036               187440               701760                17544         0.22400000000000197531
   11               0.039               187440               701760                17544         0.22599999999999703659
   12               0.041               187440               701760                17544         0.22099999999999897504
   13               0.044               187440               701760                17544         0.19999999999999878986
   14               0.046               187440               701760                17544         0.20900000000000085176
   15               0.049               187440               701760                17544         0.20699999999999885159
   16               0.052               187440               701760                17544         0.23900000000000309885

system ~/projects/jruby $ ruby-2.0.0 -e "GC::Profiler.enable; class A; def initialize(a, b); @a, @b = a, b; nil; end; end; 100000.times {A.new(1, 2)}; GC::Profiler.report"
GC 9 invokes.
Index    Invoke Time(sec)       Use Size(byte)     Total Size(byte)         Total Object                    GC Time(ms)
    1               0.012               187400               701760                17544         0.26500000000000134559
    2               0.017               187400               701760                17544         0.28699999999999903366
    3               0.021               187360               701760                17544         0.23799999999999862932
    4               0.025               187360               701760                17544         0.22500000000000297540
    5               0.030               187360               701760                17544         0.20799999999999985167
    6               0.034               187360               701760                17544         0.20599999999999785150
    7               0.038               187360               701760                17544         0.20499999999999685141
    8               0.042               187360               701760                17544         0.22099999999999897504

For a result that is used so rarely, it seems a shame to require masgn to always return an array when used as an expression.
----------------------------------------
Feature #6668: Multiple assignment should not return an Array object
https://bugs.ruby-lang.org/issues/6668#change-30666

Author: headius (Charles Nutter)
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 


Currently, when doing multiple assignment, the entire expression must return the right-hand side as an array.

system ~ $ ruby -e "ret = (a, b, c = 1, 2, 3); p ret"
[1, 2, 3]

This is an artifact of MRI's implementation, since multiple assignment was traditionally implemented by taking the array node on the right-hand side, standing it up as a full Ruby Array, and then peeling elements off for assignment on the left-hand side. It is also a performance issue, since it requires constructing the RHS array even when it is never used (unless you are able to do various compiler tricks). I propose removing it.

Justification:

* The feature is rarely used; most people don't even know it exists.
* The impact of creating the RHS array is significant; JRuby can optimize it away in cases where the line is not used as an expression, and the performance difference is huge: https://gist.github.com/3019255
* It is counter-intuitive to have an automatic performance hit just from grouping assignments. "a,b = 1,2" should have the exact same performance as "a = 1; b = 2"

Note that while JRuby can eliminate the array creation in non-expression cases, those are somewhat rare since many times masgn is used at the end of a method body, as for initializers:

class Foo
  def initialize(a, b, c)
    @a, @b, @c = a, b, c
  end
end

JRuby and other implementations may get smart enough in our optimizers to eliminate the array in all cases where it's not needed, but this is a very large burden on the optimization subsystem. It may also not be possible to do in all cases (or not possible to do in even a majority of cases).

Multiple assignment should not return RHS as an array. I do not care what it returns.


-- 
http://bugs.ruby-lang.org/

In This Thread