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~

svnで開発。GitHubのPRはあくまで裏口

Ruby is older than Git
Window is not supported officially(Git)

ruby-core: en
ruby-dev: ja

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

モチベ: Ruby 3x3

パフォーマンス・チューニング
→まずは計測だ!

ツールとしては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 はドキュメントに使いにくい