JRubyにおけるString実装高速化 Rope 紹介 #RubyKaigi #RubyKaigiA

A Tale of Two String Representations @nirvdrum http://rubykaigi.org/2016/presentations/nirvdrum.htm "Strings are used pervasively in Ruby. If we can make them faster, we can make many apps faster. 続きを読む
1
Akira Matsuda @a_matsuda

"こにちは"、"こにちわ"は定番ですからね。念のため。 github.com/rails/rails/bl… github.com/rails/rails/bl… #rubykaigiA

2016-09-08 15:55:29
リンク GitHub rails/rails rails - Ruby on Rails
黒曜@Leaner Technologies @kokuyouwind

お、deficienciesがちゃんとまとまってる。StringをByte bufferとして使うような場合はRopeは不向きとか、index lookupなど幾つかのメソッドは遅くなるとか。やっぱそうなるよなー。 #rubykaigi #rubykaigiA

2016-09-08 15:56:33
masa寿司 @masa_iwasaki

readに関するベンチマーク無しで Node costs … だけで片付けるのはちょっとなぁ。Ropeのアプローチでadd, concatが速くなるのは当然だし。 #rubykaigiA

2016-09-08 15:58:40
ripM8QhdYbs6Whn @ripM8QhdYbs6Whn

JRubyとTruffleについて真面目に勉強しようと思った #rubykaigi #rubykaigiA

2016-09-08 15:59:19
y-yagi @y_yagi

そうか、これのメンターは笹田さんなのか / Automatic-selection mechanism for data structures in MRIの成果報告ページ spinute.org/ruby/gsoc2016/… #rubykaigiA

2016-09-08 16:01:07
リンク www.spinute.org 最終報告
_h_s_ @_h_s_

Integer のように String を内部的に RString と Rope で使い分けたりとかはどうだろう #rubykaigi

2016-09-08 16:01:11
_h_s_ @_h_s_

Rope、分かりにくい所ではメモリのフラグメンテーションとかにも効きそうな気がする #rubykaigi

2016-09-08 16:03:50
どみにをん525 @Dominion525

「String(ヒモ)より強いのでロープ」という話を聞いた。#rubykaigi #rubykaigia

2016-09-08 16:03:53
ripM8QhdYbs6Whn @ripM8QhdYbs6Whn

Ropeを実用するとしたら、リテラルどうするんだろう? #rubykaigi #rubykaigiA

2016-09-08 16:07:27
_h_s_ @_h_s_

さっと @igaiga555 さんに教えてもらった spinute.org/ruby/gsoc2016/… 浅く考えた程度のことは過去に通過した出来事だった。流石…。 #rubykaigi #rubykaigiA

2016-09-08 16:07:54
igaiga @igaiga555

司会のひげのお兄さん、英語も上手だけど、Rubyにも詳しいなー #rubykaigiA

2016-09-08 16:08:52
takano32 @takano32

Rope で使われている共通する部分文字列を参照によって再登場させる概念自体は新しいものではなく、 DNS サーバのプロトコルなどにはよく利用されていますね。というのも、DNS って共通のドメインなどをもった通信が多いのでこういった処理が効果あるんですよね。 #rubykaigi

2016-09-08 16:09:10
elcondor @elcondor

CRubyにRopeを入れるの、Byte Bufferとしての扱いとの兼ね合いを考えると結構難しいのかな。 #rubykaigi #RubyKaigiA

2016-09-08 16:10:53
sylph01 @s01

RopeとStringと有利な状況で自動的に切り替えられたら最強なのでは、と思ってたらMRIですでに実装試みられてたのか… #rubykaigiA

2016-09-08 16:11:00
黒曜@Leaner Technologies @kokuyouwind

発表が終了し、司会が発表者と自撮り棒で2ショットを撮ってて面白い #rubykaigi #rubykaigiA

2016-09-08 16:11:35
ripM8QhdYbs6Whn @ripM8QhdYbs6Whn

確かに何年も稼働し続けるアプリケーションを考えると、実用の課題は多そうだなあ。 プログラマーによる最適化が必要になってしまって、使いやすさがなんとも #rubykaigi #rubykaigiA

2016-09-08 16:11:54
masa寿司 @masa_iwasaki

用途に応じてRopeとRStringの使い分けが出来れば良いんだろうけど、完全に置き換えるのは微妙かね。CSVで一列ずつ配列にいれてるようなときに最後に一つの文字列にjoinするようなときはメモリの節約になりそうだけど、read頻度高いとちょっとね。 #rubykaigiA

2016-09-08 16:12:46
かるぱねるら @karupanerura

こういう実装なら ("\xe5" + "\xb1"+ "\xb1").length を正しく扱える高速な実装にするのは難しそうだからなんかうまいことやってるならその工夫が知りたい。 github.com/spinute/CRope/… #rubykaigi #rubykaigiA

2016-09-08 16:16:10
リンク GitHub spinute/CRope CRope - Ruby extension of Rope in C