2014-11-17 [長年日記]
_ RubyConf2014 - Matz keynote
今年のRubyConfはSan Diego。さきほど恒例のmatz keynoteが終わりました。今年も内容のメモをとりました。今年は進みが速くて例年以上にメモれなかったので、詳しくはあとで公開される動画をご覧ください。:)
"Feeding the Sharks"
OSSコミュニティはサメみたいなもので、新しいことで泳ぎ続けていないと死んでしまいます。楽しいことがないといけない。 過去のRubyConfでは未来の話をしてきました。最初のRubyConfではVirtulaMachine。これは2007年のRuby1.9で笹田さんによって実現しました。ほかに、M17N, Native thread, Generational GCなんかも実現しました。
2005年はサンディエゴ Stabby lambda(->), Real multi-value, Traits。-> は当時は批判もあったけど、今ではみんな書くようになった。ほら、私は正しかった。(会場笑い)
2006年デンバーは新アイデアなし。2007年Charlotte、1.9の紹介、この年も新アイデアはない。2008年はポートランド、なし。2009年サンフランシスコもなし。RubyKaigi2009ではいくつか紹介した。(略)
2001年から2005年はエキサイトだけど確かじゃない新アイデアを、2009-2013年はImpelementationの改善で新アイデアはなかった。そろそろガソリンが必要だろう。
そう、Ruby3.0だ。
その前に、Ruby2.2は次のクリスマスに出ます。笹田さんの新しいGCとか入ります。
Ruby3.0は Concurrncy, JIT, Static typing.
Concurrency はみんなご存知のGVLをなんとか。詳細未定。(※あとでmatzさんに聞いたら、matzさんと笹田さんで検討中とのこと。)
JITはまたはLLVMかも。
Static typing、これは?ScalaとかTypeScriptとかモダンな言語にあるようにRubyにもあっていいんじゃない?メリットは?パフォーマンス、コンパイル時のチェック。
静的型付けは高速化のほかにも、better documentにもなる。Static typing は Duck typing と衝突する。DuckTypingを失ったRubyはRubyと言えるのか?私はRubyはRubyで居続けると思う。
型宣言よりも型推論(= Soft typing)。型はどこで示すか。メソッド定義時(名前と引数の型と数)、クラス定義時。一部の機能に制限をいれることもあるかも。たとえば require, define_method, method_missingとか。requireが変数を受け取ると解析できないから、定数しか指定できないとか。
コンパイラがあなたの意志(型)を読み取って、あなたにレポートを返す。ドキュメント生成やIDEの情報にする。コンパイラとあなたがより密にコミュニケーションをとるようになる。
最初は静的解析からはじめると思う。つまり、最初は外部のツールで解析するようなものを作るといいのではないか。それでの知見は言語に良い影響を与えるはず。その結果、どういう風に言語を作ればいいか分かってくる。
あ、このキーノートはアイデアだから、実現するかもしれないし、しないかもしれない。
これらのアイデアからRuby3.0が生まれるんじゃないかと思う。Happy Hacking!