tchikuba's blog

Beer Driven Developer / Lean Engineerの徒然

RubyKaigi 2017 2日目 Matz基調講演+α

RubyKaigi 2017は広島での開催。昨年は京都で今年は広島ということで、暫く地方の流れなのかしら?

Keynote : Yukihiro “Matz” Matsumoto @yukihiro_matz

  • 世界最大規模のRubyカンファレンスがRubyKaigi
    • 何を話すか困る
    • 松田さんには聴衆置いてきぼりでも良いので聞いたこと無い話、技術的な話してよとオファー来る
    • 才能の話をする
    • 天才プログラマーと言われるけど自分でそう思ったことはない
    • 自称プログラミング言語デザイナ
    • matzが初めて触れたプログラミング言語はBasic
    • 自分の思考をまとめるツール=プログラミング言語
    • I love all programming languages.
    • 「matzは他の言語に攻撃的だから嫌い」と言われることがある
    • Rubyのmatzだから他言語を貶めてRubyアゲようとしてる、と言われるけど本人全くそんなつもりはない
    • とはいえ昔Pythonのメーリスに乗り込んでRubyならこんなことできるよと言ったこともあるけど(笑)
  • Simula(1968):初のオブジェクト指向言語の話を
  • Animal – Horse – Zebraが表現できるように
  • Dr. Kristen Nygaard(クリステン・ニゴール)
  • 「全てのオブジェクト指向言語は私の孫みたいなもんでなぁ」←会った時言われた
  • 単一継承(木構造)→多重継承(ネットワーク構造)
  • C3リニアリゼーションアルゴリズム
  • Mixin(Lisp界隈はFlavorsと呼んでた)
  • アイスクリームとチョコチップのたとえ
  • Rubyはこれをmoduleとして採用
  • namespace(ex.Net::HTTP)/singleton(ex.FileUtils)/メソッドの集合(ex.Math)としてのmoduleも
  • 2013年2.0から新たな機能
  • Alias method chain:欠点もある→Module#prependがRailsコミュニティから複数人から提案があった
  • 一度prependしたら外せないようにするのは敢えて→待てよ
  • CLOS(Common Lisp Object System)という言語を想起
  • アスペクト指向プログラミングといっても良い(Gregor Kiczalesが考えた)
  • リファインメントとしてのmodule
  • なぜモンキーパッチングというのか?
  • ゲリラ→ゴリラ→モンキーになったっぽい
  • ActiveSupportがモンキーパッチングの良い例
  • 2.days.ago(これRubyかよ)ってのができるようになる
  • スコープを区切ったモンキーパッチングなら良いのでは
  • Selector namespace (Smallscript)
  • Rubyのリファインメント
    • C#のエクステンションみたいな→ex.RSpec:特定のスコープだけで呼ぶ(現時点でリファインメント使ってない)
    • 既存のメソッドを置き換える
  • Structual type checkとしてのmodule(まだプロポーザル)
    • 静的型付けとして将来的には取り込まれる可能性
  • Ruby3x3への取り組み
    • MJIT
    • Rubex
    • Fiber / Guild
    • AutoFiber(Unicorn作った人)
  • 静的型付けの取り組みも本日午後に3発表あり
  • Matzが手を動かすというよりゴールを示すリードデザイナ
  • RubyはMatzの言語というより我々の言語
  • ご覧のスポンサーの提供でお送りしています(笑)ブースに行ってくれると私の顔が立つ
    • Heroku
    • VASILY
    • Sansan
    • Speee
    • RakSul
    • リクルートマーケティングパートナーズ
    • Linkers

こっから先は話聞くのをメインにしてたので細かくはメモとってなかったので気になる所だけ…

An introduction and future of Ruby coverage library : Yusuke Endoh @mametter

  • カバレッジの種類にも色々ある
    • 条件true/false両方をカバー
    • LINEカバレッジだと後置ifなど見逃すケースも
  • カバレッジをゴールにするのはよくない
  • SimpleCovはcoverage.soのラッパー

Improve extension API: C++ as better language for extension : Kouhei Sutou @ktou

  • 高速化の為にはC/C++とRubyを行ったり来たりしないこと
  • C++11
    • 型推論auto
    • ラムダ式
  • 遅延メソッド定義

Automated Type Contracts Generation for Ruby : Valentin Fondaratov @rubymine

  • JetBrainsの中の人の静的解析の話
  • RubyMineの各プロジェクトのテストコードをクラウド化して情報集める的な(たしか)

Type Checking Ruby Programs with Annotations : Soutaro Matsumoto @soutaro

  • ずっと前から色々型チェック関連やってる人
  • Steep

Bending The Curve: Putting Rust in Ruby with Helix : Godfrey Chan @chancancode / Terence Lee @hone02

  • Herokuの中の人&もうすぐ中の人(デカい外人もHerokuの中の人)
  • RustでRubyのライブラリ作ろう的な https://github.com/tildeio/helix