Slide 1

Slide 1 text

Spinelに貢献した話

Slide 2

Slide 2 text

note inc. ⾃⼰紹介 Yamasaki sacckey ● 2020/04 note⼊社 ● サーバーサイドエンジニア ○ 最近は物語投稿サイトTALESの実装 ● 個⼈開発/ピアノ/⿇雀 2

Slide 3

Slide 3 text

note inc. Matz Keynote 3

Slide 4

Slide 4 text

note inc. Spinel 4 ● RubyのAOTコンパイラ ● Ruby (.rb) → parse → type inference → C (.c) → native binary ● Rubyプログラムの実⾏速度とポータビリティの向上

Slide 5

Slide 5 text

note inc. さっそくSpinelを使ってみる % make deps % make % cat > hello.rb <<'RUBY' def fib(n) n < 2 ? n : fib(n - 1) + fib(n - 2) end puts fib(34) RUBY % ./spinel hello.rb % ./hello # prints 5702887 (instantly) 5

Slide 6

Slide 6 text

note inc. Ruby Boy (https://github.com/sacckey/rubyboy) ● Rubyで動くGame Boyのエミュレーター ● ruby.wasmによってブラウザでも動く ○ https://sacckey.github.io/rubyboy/ ● 画⾯描画なしのベンチマークがある ○ → Spinelでコンパイルしたい ○ → コンパイル失敗 ○ → 失敗箇所ごとにPR作成 6

Slide 7

Slide 7 text

note inc. Spinelに貢献する 7 Contributingを翻訳して抜粋 貢献を歓迎します。課題追跡システムはロードマップとしても機能します。未解決の問題であれば何でも 対象となります。最も有⽤なエントリーポイントは、再現⼿順を⽰すバグ報告(Spinelでは失敗するが CRubyでは成功する5⾏のRubyコードなど)と、そのような報告を解決するコード⽣成による修正です。 ● コンパイルに失敗するコードを⼩さく切り出し、CRubyでは動くがSpinelでは落ちるテストを作る ● それを通るようにする

Slide 8

Slide 8 text

note inc. 貢献1: M::C.new対応 8 # コンパイルできるようになったコード module M class C def initialize puts "init" end end end M::C.new M::C のような名前空間つきクラスに対して .new できなかった ConstantPathNode がレシーバーになる ケースに対応

Slide 9

Slide 9 text

note inc. 貢献2: インスタンス変数名とCキーワードの衝突回避 9 # コンパイルできるようになったコード class KeywordIvar def initialize @if = 40 @iv_if = 1 end def value @if + @iv_if + 1 end end puts KeywordIvar.new.value @if をCコードに変換すると、 Cの if と衝突してしまっていた 生成されるCのフィールド名に iv_ prefixを付 けた 例: @if → iv_if @iv_if → iv_iv_if

Slide 10

Slide 10 text

note inc. その他の貢献 10 ● nested ConstantPath reads ● ConstantPath receiverへのclass method dispatch ● polymorphic returnのbox ● constructor initialize pathのGC save重複排除

Slide 11

Slide 11 text

note inc. まとめ ● SpinelでRuby Boyをコンパイルしようとしたら、まだ動かないRubyコードが⾒つかった ○ ⼤きな機能追加ではなく、最⼩再現テストにすることが貢献になった ● 「CRubyでは動くがSpinelでは落ちる5⾏のRuby」を⾒つけたら貢献のチャンス ○ Spinelで遊んで、動かないコードを⾒つけたらPRを出そう! 11

Slide 12

Slide 12 text

note inc. 12 noteでは仲間を募集中です! https://note.jp/n/nc0fe1a230633 募集職種: ● サーバーサイドエンジニア ● サーバーサイドエンジニア (次世代リーダー候補 / 第⼆新卒歓迎) ● AIプラットフォームエンジニア 採⽤情報

Slide 13

Slide 13 text

No content