SlideShare a Scribd company logo
RubyKaigi2018
1
2
RubyKaigiとは
Rubyコミュニティ主催のRubyに関する年次イベント
複数の会議室やホールで複数のセッションが並行して行われる
2015年までは東京、来年は福岡
Date place
2016/09/08‑10 京都国際会館
2017/09/18‑20 広島国際会議場
2018/05/31‑02 仙台国際センター
2019/04/18‑20 福岡福岡国際会議場
3
セッション分類
コミッターは今こんなことをやっている
HighPerformance化(高速化,並列処理,マルチスレッド)
型推論
周辺(gem,irb,...)
こんなことやってみたぜ系
全く別の方法で高速化した
○○の歴史
その他
LT
RubyCommitersvstheWorld
TRICK(変態コード)
4
5
6
ことわざ:名は体を表す
いい名前付けしよう
googlablity(お金があればgoみたいなのでもいい)
毎年Rubyは死んでいる
May311030‑1130 7
May311130‑1300 8
requireの改善
Rubyの文字列はCの文字列を使ってる
require時に他のrequireのパターンを生成・キャッシュ
重複削除・キャッシュ
単純なRailsアプリでメモリ使用量4.2%改善
が、5年前に別の人がissueあげてくれてた。そっち取り込んだ
May311300‑1340 9
mxnet.rb(apachemxnetのrubybinding)とRedChainerの話
rubyだけで深層学習
tensorflowよりパフォーマンスが良いMay311350‑1430 10
初期のrubocopは正規表現でやってた
RipperはMRIのみサポートなのでparserにした
railsをcoreから分離予定、重い
拡張を描きやすいAPIを提供したい(今でも書けるけど)
May311440‑1520 11
1.8サポート辛い、安定バージョンとしてメンテは1バージョン
ruby2.6=>rubygems3,ruby2.7orruby3.0=>rubygems4
gem-codesearch rubygemsの全データを検索できる
all-ruby 全てのRubyでコードが実行できる(docker)
4では非互換の機能を入れたい
プログラミングに入門した人がgeminstallで悩まないように
May311550‑1630 12
C拡張内でmallocしてもrubyは解放してくれない=>自分でmark
RubyのHashをC拡張で描いてみたがパフォーマンス変わらない
Rubyアプデの恩恵に与かれないので速度のために書くのは良くない
外部ライブラリが必要な時にI/FをC拡張として書く<=正しい
May311640‑1720 13
May311730‑1830 14
May311730‑1830 15
130のライブラリをメンテしてる
色々機能追加してるよって話(gemとか)
REXML,Rabbit,GTK,test‑unit,i18n,commit‑email,etc
Jun.10940‑1040 16
GCはMajorとMinorがある(全てのObject/若いオブジェクト)
Objectが増えるほどGCに時間がかかる
gsub!等の破壊的処理はCPUとメモリの節約になる
環境変数でGCの挙動を制御できる(env_mem.gem使うと楽)
--with-jemalloc でbuildするとjemalloc版rubyが使える(10% )
Jun.11050‑1130 17
Lunch(Bento!)
Jun.11130‑1300 18
スタイル=>好み,Lint=>バグになりうるもの
レビューの指摘内容は他のプロジェクトでも起きうる=>cop化
railsのcopをrubocop側に持って行ったらrails界隈の人が現れ始めた
Jun.11300‑1340 19
MinRubyを作って改造していく
構文解析(Ripper)‑>AST‑>実行
MinRubyを拡張してRindaにevalを実装する
Rinda:LindaのRuby実装
Linda:並列プログラミング言語。他の言語上に拡張として実装
される
Jun.11350‑1430 20
steep(型チェック)の話。別ファイルに型定義を書いていく(.rbi)
steepコマンドで実行可能=>nilチェックNoMethodError吐いたり
scaffoldで雛形を作れる
既存のコードに適用できる(不明な型が多くなるが・・)
Tupple型やActiveRecord型とかは未対応
Jun.11440‑1520 21
Haconiwa:DSLで記述できるmRuby製コンテナ
将来はk8sがデファクトになるのでは=>コンテナ型アプリの出番
Jun.11550‑1630 22
Ruby以外の言語や別ファイルで型を書くのが要求されている
Rubyでは返り値に無頓着なメソッドが書かれがち(void必要)
Matzの要求仕様に一番近いのはsteep
Rubyだとtypeinterfaceは無理なのでtypeprofiler(suggestくらい)
動的な型推論の問題はかなり遅いこと
Jun.11640‑1720 23
EndlessRange: (1..) #=> 1~無限 (‑1が嫌だった)
yield_self => then (入れやがった)
* "HELLO".then{|s| s.upcase! } #=> nil
例外を投げなおしたときに元の例外のbacktraceを出せるように
「松本さん一回Rails使ってみればいいんですよ」(autoload)
obj.:method_name
while; else; end はどうか(python的に)(rescueあったら...?)
Jun.11730‑1830 24
Jun.11730‑1830 25
C拡張を含めMRI完全互換を目指している
立ち上がりは少し遅いが、起動すれば早い(Optcarrotで190FPS)
Rails対応はまだ
ASTにする時点でJavaObjectに、そのあとJVMに流し込む
最適化すごい [1,2].map{|e| e*3} #=> [3,6] のレベルにする
rbenvで試せるようになるJun.20940‑1040 26
ri コマンド知ってます?
ri コマンド<<<<<<<<<<Google
irb 実行時にtab補完でドキュメント出すようにしてみた
ruby2.6 から進化してるからinstall時の --no-document 外して
ね
Jun.21050‑1130 27
Lunch(Bento!)
Jun.21130‑1300 28
preview2でRuby2.0の2.03倍速い(optcarrot計測)
Railsで使うと遅くなるバグがある
JITの予測コンパイルに失敗するとオーバーヘッドで遅くなる
演算子オーバーライドされているとJITが狂って遅くなる
JITの実行キャンセルが多く発生していた #[] 多い
nil を返すだけのメソッドを定義するだけで遅くなる
いっぱいメソッドを定義すると爆裂に遅くなる
Jun.21300‑1340 29
色々自作してるって話(Mailer,FTP,テキストエディタ,...)
手元でもできるものをクラウド上にしたサービスが嫌い
モチベ,時間,スキルが必要
自分が使いたいものじゃないと続かない
簡単なものから始める
テストコードは書きすぎず、パパッと作る
Jun.21350‑1430 30
nginx+smalllightで画像のリサイズを行なっていたが色々やばい問
題があった
nginxconfigで色々やろうとしてて辛そうだった
H2Oでmrubyを使い、画像変換は別サーバーで行う設計に変えたJun.21440‑1520 31
CRubyのfloatingpointの改善
オブジェクトの内部表現小・処理の分岐少=>12%改善
RTLの更新=>RTLinsnにしたら17‑27%改善
Light‑weightJIT(MIRベースのJIT)
コードの速度はgcc版の70%だがコンパイル速度は100倍Jun.21550‑1630 32
https://github.com/tric/trick2018
Transcendental:世俗を超越した、超絶技巧
Ruby
Imbroglio:極めて混乱した、恥ずかしい事態
Contest
forRubyKaigi
Jun.21640‑1720 33
Closing
過去最大の参加人数(1000人超)
RubyKaigi2019
日程:2019/04/18‑20
場所:福岡福岡国際会議場
Jun.21730‑1830 34
参考
https://rubykaigi.org/2018/
https://replayrubykaigi.herokuapp.com/
Jun.21730‑1830 35

More Related Content

PDF
Ruby 風シンタックスな静的言語 Crystal の紹介
PDF
Rk10trailer
PDF
Rubyistのためのkotlin紹介
PDF
LT_Gitのfast fowardと継続的デリバリー
PDF
Kotlinの紹介
PDF
僕と小田原とRubyとRails
PPTX
Tsort について
PDF
2014年総括 9 dec2014
Ruby 風シンタックスな静的言語 Crystal の紹介
Rk10trailer
Rubyistのためのkotlin紹介
LT_Gitのfast fowardと継続的デリバリー
Kotlinの紹介
僕と小田原とRubyとRails
Tsort について
2014年総括 9 dec2014

What's hot (8)

PDF
Railsの今昔
PDF
2017-06-18 tribox Contest 祝!1周年!
PDF
slackに箇条書きにしたタスクを、Notionに登録してくれるbotを作った話
PDF
LCIFスタディツアー案内
PDF
TechDo Goハンズオン#3
PDF
松江Ruby会議03 LT るりまアピール
PDF
Ruby programmer silverの取得に向けて
PDF
Rubyビジネスセミナー大阪2015
Railsの今昔
2017-06-18 tribox Contest 祝!1周年!
slackに箇条書きにしたタスクを、Notionに登録してくれるbotを作った話
LCIFスタディツアー案内
TechDo Goハンズオン#3
松江Ruby会議03 LT るりまアピール
Ruby programmer silverの取得に向けて
Rubyビジネスセミナー大阪2015
Ad

Similar to Rubykaigi2018共有会 (20)

PDF
TdX#01 RubyKaigiの作り方
PPTX
【Ltech#0】 RubyKaigi2018報告会
PDF
There Is No Spoon: Revisited
PDF
マニアックなRuby 2.7新機能紹介
PDF
RubyKaigi2014レポート
PPTX
Ruby on Rails を用いたWEBアプリケーションの開発
PPT
RubyKaigi2011の雰囲気
PDF
2011-7-17 !RubyKaigi (NotRubyKaigi) 発表資料「WindowsマシンでRuby系勉強会へ行くと凹むことの考察」
PDF
地域Ruby会議に参加してきた話とか
PPTX
【Ltech#0】RubyKaigi2018報告会
PDF
Rubyな日々
PDF
The History of Ruby; 20th Anniversary Ed.
KEY
OSC 2012 HIROSHIMA
PDF
Regional Ruby Kaigi
PDF
Ruby and I at 神奈川Ruby会議01
PDF
関西の Ruby コミュニティ
PDF
Shinjukurb 01 東京近郊地域.rb
PDF
Reudy on Ruby1.9
PDF
Ruby kajaはじめてます
PDF
Ruby 2.5
TdX#01 RubyKaigiの作り方
【Ltech#0】 RubyKaigi2018報告会
There Is No Spoon: Revisited
マニアックなRuby 2.7新機能紹介
RubyKaigi2014レポート
Ruby on Rails を用いたWEBアプリケーションの開発
RubyKaigi2011の雰囲気
2011-7-17 !RubyKaigi (NotRubyKaigi) 発表資料「WindowsマシンでRuby系勉強会へ行くと凹むことの考察」
地域Ruby会議に参加してきた話とか
【Ltech#0】RubyKaigi2018報告会
Rubyな日々
The History of Ruby; 20th Anniversary Ed.
OSC 2012 HIROSHIMA
Regional Ruby Kaigi
Ruby and I at 神奈川Ruby会議01
関西の Ruby コミュニティ
Shinjukurb 01 東京近郊地域.rb
Reudy on Ruby1.9
Ruby kajaはじめてます
Ruby 2.5
Ad

Rubykaigi2018共有会