JRubyにおけるString実装高速化 Rope 紹介 #RubyKaigi #RubyKaigiA
"こにちは"、"こにちわ"は定番ですからね。念のため。 github.com/rails/rails/bl… github.com/rails/rails/bl… #rubykaigiA
2016-09-08 15:55:29お、deficienciesがちゃんとまとまってる。StringをByte bufferとして使うような場合はRopeは不向きとか、index lookupなど幾つかのメソッドは遅くなるとか。やっぱそうなるよなー。 #rubykaigi #rubykaigiA
2016-09-08 15:56:33readに関するベンチマーク無しで Node costs … だけで片付けるのはちょっとなぁ。Ropeのアプローチでadd, concatが速くなるのは当然だし。 #rubykaigiA
2016-09-08 15:58:40JRubyとTruffleについて真面目に勉強しようと思った #rubykaigi #rubykaigiA
2016-09-08 15:59:19そうか、これのメンターは笹田さんなのか / Automatic-selection mechanism for data structures in MRIの成果報告ページ spinute.org/ruby/gsoc2016/… #rubykaigiA
2016-09-08 16:01:07Integer のように String を内部的に RString と Rope で使い分けたりとかはどうだろう #rubykaigi
2016-09-08 16:01:11Ropeを実用するとしたら、リテラルどうするんだろう? #rubykaigi #rubykaigiA
2016-09-08 16:07:27さっと @igaiga555 さんに教えてもらった spinute.org/ruby/gsoc2016/… 浅く考えた程度のことは過去に通過した出来事だった。流石…。 #rubykaigi #rubykaigiA
2016-09-08 16:07:54Rope で使われている共通する部分文字列を参照によって再登場させる概念自体は新しいものではなく、 DNS サーバのプロトコルなどにはよく利用されていますね。というのも、DNS って共通のドメインなどをもった通信が多いのでこういった処理が効果あるんですよね。 #rubykaigi
2016-09-08 16:09:10CRubyにRopeを入れるの、Byte Bufferとしての扱いとの兼ね合いを考えると結構難しいのかな。 #rubykaigi #RubyKaigiA
2016-09-08 16:10:53RopeとStringと有利な状況で自動的に切り替えられたら最強なのでは、と思ってたらMRIですでに実装試みられてたのか… #rubykaigiA
2016-09-08 16:11:00発表が終了し、司会が発表者と自撮り棒で2ショットを撮ってて面白い #rubykaigi #rubykaigiA
2016-09-08 16:11:35確かに何年も稼働し続けるアプリケーションを考えると、実用の課題は多そうだなあ。 プログラマーによる最適化が必要になってしまって、使いやすさがなんとも #rubykaigi #rubykaigiA
2016-09-08 16:11:54用途に応じてRopeとRStringの使い分けが出来れば良いんだろうけど、完全に置き換えるのは微妙かね。CSVで一列ずつ配列にいれてるようなときに最後に一つの文字列にjoinするようなときはメモリの節約になりそうだけど、read頻度高いとちょっとね。 #rubykaigiA
2016-09-08 16:12:46こういう実装なら ("\xe5" + "\xb1"+ "\xb1").length を正しく扱える高速な実装にするのは難しそうだからなんかうまいことやってるならその工夫が知りたい。 github.com/spinute/CRope/… #rubykaigi #rubykaigiA
2016-09-08 16:16:10