tchikuba's blog

Beer Driven Developer / Lean Engineerの徒然

【速報】RubyKaigi 2016初日参加レポート

聞きながらの自分用メモなのでちょっと正確でない点がありそうですが。

Ruby3 presented by matz

  • Typingの話
  • SmallTalk→Java→Ruby,JavaScript→Swift,Go→?
  • 近視眼的な判断で静的型付けを選択するのは危険
  • そもそも未来の型とは?
  • Duck typing: アヒルが歩くように。アヒルのように振る舞えばOK
  • Duckとは期待される振る舞い
  • プログラマのメンタルコストを下げたい
  • GoのStructual SubtypingはNominal Subtypingより良さ気
  • Rubyには歴史的にこれまで型指定がない
  • 動的型付けの欠点もある
  • エラーメッセージが親切じゃない
  • 型は絶対に書きたくない(会場笑) DRYじゃないし
  • Type Annotation,Mixed/Gradual Typingはダメなアイディア
  • 人にお願いするんじゃなくて技術で解決したいよね
  • 型推論は素晴らしい
  • インタフェース書きたくない
  • 型の名前を決めるのは結構なコスト。振る舞いがわかっていれば名前を付けたくない
  • 振る舞いを決める型のデータベースのようなものと型推論を組み合わせると80%くらいは推論可能では
  • オープンクラスとかで再定義しちゃうと型推論無効に
  • 型データベースをgem化して利用して型推論の精度向上とか
  • ダックタイピングを維持して型推論をRubyらしく行う
  • これらの構想はすべてRubyistが楽しく生産性を維持できるために検討していること
  • Ruby3はいつか? I don’t know.(会場笑)
  • 次の東京オリンピックの時にはRuby3あると良いなぁ
  • OSSコミュニティは前に進めないとつまらない。前に進めるためには何でもやる

dRuby presented by @m_seki

  • dRubyが生まれたのは1999年
  • dRubyはオーパーツ
  • shttpsrv: WEBrickより前のRuby製webサーバ
  • Rubyのように振る舞う分散オブジェクト
  • DRb.start_serviceだけでdRubyの準備可能
  • サーバーとクライアントが入れ替わる例
  • OOPっぽい感じ
  • Queueを使って待合せのデモ
  • dRubyはtwitterのプロトタイピングでdRuby/Rindaだったらしい
  • プロトタイピングとしての利用価値がある気がする
  • セキュリティ系メソッドは消してしまいたい。危ないものは危なく見えるべき

Welcome to haconiwa presented by @udzura

  • Drone.io
  • dockerらしいコマンドをしょっちゅう打ってた
  • Sqaleで使ってるLXC
  • haconiwaコマンドでRubyで書かれたプロファイル定義を実行とか
  • hacorbコマンドとかでmrubyスクリプトのコンテナ実行
  • cgroups的な
  • 最初はCRubyで実装
  • システムコール扱うのに色々嵌ったのでmruby実装へ
  • mrubyはコンテナが取り扱うシステムコールをサポートしてるので使いやすい

A proposal of new concurrency model for Ruby 3 presented by @ko1

  • 資料
  • Ruby 3に取り入れられたいと思う並列プログラミングについて
  • C言語のポインタと比較するとRubyはGCあるのでハッピープログラムできる
  • data raceやrace conditionが発生する例を通してスレッドセーフなプログラミングが如何に難しいかを知る
  • Mutexを利用して同期を取るのはバグと性能低下の狭間にある
  • Ruby 3ではGuild(ギルド)というスレッドにかわる新たな概念を提案
  • Guildは複数スレッドを含む上位概念的なもの
  • 複数のGuild間での可変オブジェクト受け渡しにはチャネルを使ってコピーするか移籍(transfer membership)という新しい概念で
  • Guild内のスレッド間はスレッドセーフが保証される
  • これらのGuildの概念でRuby 3で実現したい並列プログラミングのゴールをすべて満たす感じに
  • Guild概念導入でスレッドセーフが保証されないキモいコードを書けないようにする方向性

Isomorphic web programming in Ruby presented by @youchan

  • 去年はHyaliteの話をした
  • Menilite: クライアントサイドでもARとか使える的な(JS嫌いなのでw)
  • デモ、デモ、ひたすらデモ

Unifying Fixnum and Bignum into Integer presented by @tanaka_akr

  • Ruby 2.4ではFixnum,BignumクラスがなくなりIntegerに統合
  • 環境によってFixnumが扱えるサイズは異なる
    • 手元の環境(OS X Yosemite)だと(262-1).classはFixnum,(262).classはBignum
  • Fixnum,BignumはCommon Lispから来てる
  • 以下のコード無限ループになるけど許容するしか。 max = 1 max *= 2 if max.class == Fixnum puts max
  • 教育的に分かりやすい、数学的にも正しい、とmatzに押し込んだ

Scalable job queue system built with Docker presented by @k0kubun

  • coockpadでrails開発者の開発効率を向上する為の開発
  • RubyKaigiでrailsの話をすると怒られる
  • syoryukenってgemはSQSをジョブキューとして使うやつ
  • barbequeを作った
  • web consoleもあるよ(rails製)
  • kuroko2という社内のクローズツールが秀逸すぎたので本来ジョブキュー使うべきところでも出番なし
  • kuroko2はOSS化進めてる
  • ECSとAutoScalingグループでスケールを自動化