Embedding struct RArray

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Yuguiです。

3è¦ç´ ä»¥ä¸‹ã®é…åˆ—ã‚’RVALUEに埋め込むパッチを書きました。object, struct,
string, hashと合わせて、これで一通りのオブジェクト埋め込みが終わると認識
します。

1.9.0-5リリース後、ABIフリーズの前に取り込みたいと思いますが、いかがで
しょうか。


Yugui [email protected]

私は私をDumpする
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Darwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkjjOQsACgkQOXzH5JLb/AVUHwCfZo+CpQFILqEImqTTaAbxUR2c
yMUAnA0YiRcenkdK5HhVN20v7GMTN1oH
=7Iwi
-----END PGP SIGNATURE-----

default_internal e$B$N4X78$G%9%1%8%e!<%k$,CY$/$J$k$H$$$&5DO@$,e(B
e$B?'!9$"$j$^$7$?$,!"8=:_$Oe(B 9e$B7n$N%j%j!<%9$,CY$/$J$C$?4X78$Ge(B
e$B5U$Ke(B default_internal
e$B$N:n6H$b?J$^$J$$$h$&$J5$$,$7$F$-$^$7$?!#e(B

At 17:46 08/10/01, Yugui (Yuki S.) wrote:

e$B$7$g$&$+!#e(B
Ruby e$BFbIt$N@lLg2H$G$O$“$j$^$;$s$,!”$$$$$N$G$O$J$$$G$7$g$&$+!#e(B
e$B$H$j$"$($:Aa$a$Ke(B 1.9.0-5
e$B$N%j%j!<%9$r=P$7$F$$$?$@$-$?$$$G$9!#e(B
e$B@'Hs$I$3$,%M%C%/$K$J$C$F$$$k$+65$($F$/$@$5$$!#e(B

e$B59$7$/$*4j$$$7$^$9!#e(B Martin.

#-#-# Martin J. Du"rst, Assoc. Professor, Aoyama Gakuin University
#-#-# http://www.sw.it.aoyama.ac.jp mailto:[email protected]

Yuguie$B$G$9!#e(B

e$B%j%j!<%9$N%9%1%8%e!<%k$K$D$$$F$OB>$G$b8@$o$l$^$7$F!"8!F$Cf$G$9!#e(B

Martin D. e$B$5$s$O=q$-$^$7$?e(B:

e$B$H$j$"$($:Aa$a$Ke(B 1.9.0-5 e$B$N%j%j!<%9$r=P$7$F$$$?$@$-$?$$$G$9!#e(B

e$B$5$7$"$?$C$F!"e(B
TestM17NCombe$B$He(BTC_JSONUnicodee$B$,%F%9%H$K<:GT$7$^$9!#2<5-$Oe(BMacOS
Xe$B$G$N<B9Te(B
e$BNc$G$9$,!"e(BDebian
etche$B$G%F%9%H$K<:GT$9$k$&$A$O%j%j!<%9$O=P$7$^$;$s!#e(B

test_chars(TC_JSONUnicode)
[/Users/yugui/src/ruby/mri/test/fileutils/fileasserts.rb:8:in
_wrap_assertion' /Users/yugui/src/ruby/mri/test/fileutils/fileasserts.rb:8:in_wrap_assertion’
/Users/yugui/src/ruby/mri/test/json/test_json_unicode.rb:53:in
test_chars']: <JSON::GeneratorError> exception expected but was Class: <ArgumentError> Message: <"broken UTF-8 string"> ---Backtrace--- /Users/yugui/src/ruby/mri/tmp/master/.ext/common/json/pure/generator.rb:43:ingsub’
/Users/yugui/src/ruby/mri/tmp/master/.ext/common/json/pure/generator.rb:43:in
utf8_to_json' /Users/yugui/src/ruby/mri/tmp/master/.ext/common/json/pure/generator.rb:341:into_json’/Users/yugui/src/ruby/mri/tmp/master/.ext/common/json/pure/generator.rb:300:in
block in json_transform' /Users/yugui/src/ruby/mri/tmp/master/.ext/common/json/pure/generator.rb:299:inmap’
/Users/yugui/src/ruby/mri/tmp/master/.ext/common/json/pure/generator.rb:299:in
json_transform' /Users/yugui/src/ruby/mri/tmp/master/.ext/common/json/pure/generator.rb:270:inblock in to_json’
/Users/yugui/src/ruby/mri/tmp/master/.ext/common/json/pure/generator.rb:284:in
json_check_circular' /Users/yugui/src/ruby/mri/tmp/master/.ext/common/json/pure/generator.rb:270:into_json’
/Users/yugui/src/ruby/mri/tmp/master/.ext/common/json/common.rb:183:in
generate' /Users/yugui/src/ruby/mri/test/json/test_json_unicode.rb:54:inblock in
test_chars’
/Users/yugui/src/ruby/mri/test/fileutils/fileasserts.rb:8:in
_wrap_assertion' /Users/yugui/src/ruby/mri/test/fileutils/fileasserts.rb:8:in_wrap_assertion’
/Users/yugui/src/ruby/mri/test/json/test_json_unicode.rb:53:in
`test_chars’

  1. Error:
    test_unicode(TC_JSONUnicode):
    ArgumentError: incompatible encoding regexp match (ASCII-8BIT regexp
    with UTF-8 string)

/Users/yugui/src/ruby/mri/tmp/master/.ext/common/json/pure/generator.rb:44:in
`gsub!’

/Users/yugui/src/ruby/mri/tmp/master/.ext/common/json/pure/generator.rb:44:in
`utf8_to_json’

/Users/yugui/src/ruby/mri/tmp/master/.ext/common/json/pure/generator.rb:341:in
`to_json’

/Users/yugui/src/ruby/mri/tmp/master/.ext/common/json/pure/generator.rb:300:in
`block in json_transform’

/Users/yugui/src/ruby/mri/tmp/master/.ext/common/json/pure/generator.rb:299:in
`map’

/Users/yugui/src/ruby/mri/tmp/master/.ext/common/json/pure/generator.rb:299:in
`json_transform’

/Users/yugui/src/ruby/mri/tmp/master/.ext/common/json/pure/generator.rb:272:in
to_json' /Users/yugui/src/ruby/mri/test/json/test_json_unicode.rb:19:intest_unicode’

  1. Failure:
    test_str_eq_transitive(TestM17NComb)
    [/Users/yugui/src/ruby/mri/test/fileutils/fileasserts.rb:8:in
    _wrap_assertion' /Users/yugui/src/ruby/mri/test/fileutils/fileasserts.rb:8:in_wrap_assertion’
    /Users/yugui/src/ruby/mri/test/ruby/test_m17n_comb.rb:312:in block in test_str_eq_transitive' /Users/yugui/src/ruby/mri/test/ruby/allpairs.rb:82:inblock in
    each’
    /Users/yugui/src/ruby/mri/test/ruby/allpairs.rb:75:in block in each_index' /Users/yugui/src/ruby/mri/test/ruby/allpairs.rb:45:inblock in
    make_large_block’
    /Users/yugui/src/ruby/mri/test/ruby/allpairs.rb:26:in block (2 levels) in make_basic_block' /Users/yugui/src/ruby/mri/test/ruby/allpairs.rb:21:intimes’
    /Users/yugui/src/ruby/mri/test/ruby/allpairs.rb:21:in block in make_basic_block' /Users/yugui/src/ruby/mri/test/ruby/allpairs.rb:20:intimes’
    /Users/yugui/src/ruby/mri/test/ruby/allpairs.rb:20:in
    make_basic_block' /Users/yugui/src/ruby/mri/test/ruby/allpairs.rb:45:inmake_large_block’
    /Users/yugui/src/ruby/mri/test/ruby/allpairs.rb:71:in each_index' /Users/yugui/src/ruby/mri/test/ruby/allpairs.rb:82:ineach’
    /Users/yugui/src/ruby/mri/test/ruby/test_m17n_comb.rb:117:in
    combination' /Users/yugui/src/ruby/mri/test/ruby/test_m17n_comb.rb:310:intest_str_eq_transitive’]:
    transitive: “\xA1\xA1”.force_encoding(“Shift_JIS”) ==
    “\xA1\xA1”.force_encoding(“ASCII-8BIT”) ==
    “\xA1\xA1”.force_encoding(“EUC-JP”).
    is not true.

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:36676] Re: Embedding struct RArray”
on Tue, 7 Oct 2008 22:55:50 +0900, “Yugui (Yuki S.)”
[email protected] writes:

|e$B>/$7=$@5$7$?%Q%C%Ae(B(e$BE:IUe(B)e$B$rE,MQ$7$F%Y%s%A%^!<%/e(B(e$BE:IUe(B)e$B$r<h$C$F$$^$7$?!#e(B
|e$BG[Ns$r@8@.$7$F>.$5$J=$@5$r;$9!“$H$$$&$h$/$”$k%1!<%9$K$D$$$F7k9=8z$$$F$$e(B
|e$B$k$h$&$K;W$($^$9!#e(B
|e$B$3$N%Q%C%A$N<h$j9~$
$N7o!"$$$+$,$G$7$g$&$+e(B?

e$B$H$j$"$($:e(Btest-alle$B$J$I$G%(%i!<$,A}$($J$1$l$P$$$$$s$8$c$J$$$Ge(B
e$B$7$g$&$+!#e(B

Yuguiです。

少し修正したパッチ(添付)を適用してベンチマーク(添付)を取ってみました。
配列を生成して小さな修正を施す、というよくあるケースについて結構効いてい
るように思えます。
このパッチの取り込みの件、いかがでしょうか?

% ruby benchmark/driver.rb -e “tmp/master/ruby-trunk;
tmp/array/ruby-trunk” -d benchmark -p “vm1_array”
“1.8.7”

benchmark results:
name ruby 1.9.0 (2008-10-07 revision 0) [i386-darwin9.5.0] ruby
1.9.0 (2008-10-07 Array embedding 0) [i386-darwin9.5.0]
loop_whileloop 2.290 2.230
vm1_array00* 56.080 34.768
vm1_array01* 59.314 32.824
vm1_array02* 58.405 37.891
vm1_array03* 61.440 41.745
vm1_array04* 67.146 60.404
vm1_array05* 67.111 59.538
vm1_array06* 70.136 63.797
vm1_array07* 73.448 68.127
vm1_array08* 78.289 72.425
vm1_array09* 81.875 74.695
vm1_array10* 80.650 83.679
vm1_array15* 104.824 102.354
vm1_array20* 136.173 132.310
vm1_array30* 167.625 167.287
vm1_array40* 209.358 221.168
vm1_array50* 269.420 256.223