RubyKaigi 1日目メモ
改行いれるのめんどかったからmdをWYSIWYGモードで。ほぼただのメモです
---
# RubyKaigi 1日目
## introduction
### まつださん
こんくらいなら聞き取れるけど英語スピーカーのトークは大丈夫だろうか
Brazilから来てる人もいる
### マネーフォワード
「3人のRubyコミッターがいる暮らし」
## day1 10:30~
http://rubykaigi.org/2017/presentations/n0kada.html
patch monster
ゆるふわ
fulltime ruby committer at Salesforce (Heroku)
Matzチーム
- Matz
- Nobu
- ~Ko1~
Ruby is older than Git
Window is not supported officially(Git)
taking inventory of bug tickets 棚卸し
how to build ruby
configure + make
Out-of-Place build #とは
baseruby miniruby
baseruby
parse.y -> parse.c
defs/id.def -> id.h
insns.def -> vm.inc
miniruby
no dynamic loading = runnable alone
convenient for debuggng
2.4までのparallel build
building miniruby -? parallel
building extension -> parallel
extconf.rb -> seequential
2.5 はそこをディレクトリ親子関係の依存関係以外は別プロセスで parallel でやるぞって話
https://gist.github.com/hkdnet/1c42ff3b807048cf548763326a7ec2e0
EXPR_END: 式がおわってもおかしくないところ
EXPR_LABEL: キーワード引数の名前がかけるところ
No eye-catcher in 2.5
2.3 safe navigation
Kernel#yield_self
rejected:
neko operator
user-defined operator
under discuttion:
method extraction operator
rightward assignment
## day1 13:00〜
http://rubykaigi.org/2017/presentations/ko1.html
Fiberは明示的な感じ
状態をもつものを、どこで実行状態をとめてるかに依存させたり
capturing continuation: callcc
thread より軽いから fiber
coroutine → どれを実行するのが指定するタイプの concurrency の話?
どこにでもとべるからパワフルなんだけど難しい
動いてるものを親としてresumeしたら子供として動く
先祖をresumeしたらエラー
Fiberの実装
コンテキストのスイッチ: スレッドの状態(pc, sp), VM stack, machine stack(C言語レベルのスタック)
最初はコピってstore, restoreする
中盤でOSの機能とかをつかうようにした
最近スレッドの状態をコピるのをやめた
(すこしは改善したりなんだり)
Guildとかで使うよてい
Auto Fiber proposal → インタプリタでスケジューラが動くようにしておく?
勝手に切り替わるようになってブロッキング時間を有効に使えるかも
でも逆に勝手に変わっちゃうから次にどのFiberが使われるかわかんないし、synchronizationが不要
こういうのは非決定的なバグをうみかちだからあんまり好きじゃない(_ko1)
??「Fiberっぽくないから名前かえたい」
## day1 13:50~
休憩しておりました
## day1 14:40~
http://rubykaigi.org/2017/presentations/kddeisz.html
read, tokenize, build ast, build iseq, exec iseq
Ruby 1.8まではASTを直接
ASTからinstruction sequencesへ
Ruby1.9かあら(だっけ)Iseq使う
2.3からiseqの読み書きができるように
ex:
yomikomu https://github.com/ko1/yomikomu
bootsnap https://github.com/Shopify/bootsnap
ソースを文字列で持ってるからいじれる!!!
gsubしてどうにかする → ここgsubなのか
日→秒変換: 24 * 60 * 60
掛け算はメソッド呼び出しなのでうんぬん
memo: コンパイル時に計算したいのかな
gem: vernacular
https://rubygems.org/gems/vernacular
https://github.com/kddeisz/vernacular/
自分で生成したIseqを食わせる
tuby使う
https://github.com/kddeisz/tuby
memo: JVMみたいにフロントの言語増えたらいいよねみたいなこと言ってた気がする
memo: iseqの仕様って安定的なんだっけね
→Q&A で補足。かわるかもね
## day1 15:50〜
http://rubykaigi.org/2017/presentations/watson1978.html
Ubiregi
パフォーマンス・チューニング
→まずは計測だ!
ツールとしてはiprofilerを使っている
```
$ iprofiler -tiemprofiler ./minruby ~/benchmark.rb
```
```
loop do
hash1.merge(hash2)
end
```
iprofilerでボトルネックを探して最適化する
メソッドを実行する処理 = dispatch メソッド探索 + execution メソッドの実実行
dispatchは広範囲に及ぶ処理なので影響範囲がデカかったりすでに最適化済みだったりする、みたいなことを言ってた
あるメソッドの execution 時間を短くしよう!
- メソッドディスパッチを減らす(実行中に別メソッドを呼んでいるので)
- 冗長なアロケーションを減らす
memo: ディスパッチを減らすというのは具体的にはインライン化とか
## day1 16:40~
http://rubykaigi.org/2017/presentations/narittan.html
streaming data importing
gatewayserver with h2o
mruby
benchmark
## day1 17:30
http://rubykaigi.org/2017/presentations/rubylangorg.html
sponsored: cookpad
よしおりさん
Ruby Commiters Sponsor
What will you do if a better language than Ruby comes along?
Make Ruby even stronger!!!
RHCとかね
Static type checking
mameさんクッ社へ fulltime committer
Ruby program を ロバストに
使い捨てじゃないプログラムを書くようになってきているので無理がきている
そこをなんとかしたい
型注釈絶対いれたくないのか問題
1. コードに書いてもいいよ
2. 書かせたくない
3. コメントになら書かせてやってもいいぞ
type inference がすすんだときにコード側に書いてあるとつらい
structual type はドキュメントに使いにくい