国分さんを経由して、Ruby3はだんだん現実化していく。
(まつもとゆきひろ)
国分さんって去年もノミネートされた。
そうですね、去年もノミネートいただいて。
かぶるよね、内容的に。どうしようかな。
柴田さん(Ruby Prize 2014受賞者)さんのときはどうしたんですか。
柴田さんのとき、どうしたっけな。忘れた(笑)。
柴田さんのときは、去年のことは何も考えないで話そうって言って、結局同じ話をしたような気がするな。
じゃあ、どうもおめでとうございます。
柴田さんのときは、去年のことは何も考えないで話そうって言って、結局同じ話をしたような気がするな。
じゃあ、どうもおめでとうございます。
ありがとうございます。
去年もノミネートされたわけですが、今回はとうとうPrizeを受賞。
去年も聞いたような気がするんですけれども、いつプログラミングを始められましたか?
去年も聞いたような気がするんですけれども、いつプログラミングを始められましたか?
プログラミングを始めたのは、2011年に大学入ってからですね。
C言語を書くようなアルバイトを始めて、そこで2年くらいやった後に、次にObjective-CでiPhoneアプリを書き始めたんですけど、半年くらいやったら、Objective-Cを書くのがつらくなって、何かRubyっていう良い言語があるらしいみたいなのを知って、そこからにクックパッドに移って、Railsアプリを書くっていうのをやってきました。
C言語を書くようなアルバイトを始めて、そこで2年くらいやった後に、次にObjective-CでiPhoneアプリを書き始めたんですけど、半年くらいやったら、Objective-Cを書くのがつらくなって、何かRubyっていう良い言語があるらしいみたいなのを知って、そこからにクックパッドに移って、Railsアプリを書くっていうのをやってきました。
へえ〜。いきなりアルバイトでCを??
何か初心者でも入れてもらえるプログラミングのアルバイトを探したんですよ。別にそんなすごいことはやらないんですけど、探していたら、たまたまその会社にヒットして、そこがCをやっていたので、何か授業とかでも、C言語やるし、そこでやるかということで始めた感じですね。
プログラミングのアルバイトを探したのは、プログラミングをやりたくて?
はい。
高校の時点でちょっとだけプログラミングをする機会があって、その時点でおもしろいなとは思っていたので、大学ではプログラミングをやろうとは思っていました。でも、学生のときにそんなにお金がなかったし、いずれにしてもアルバイトをしたくて。そこで、時間効率を考えて、アルバイトでプログラミングをしたいなということで探したんですね。
高校の時点でちょっとだけプログラミングをする機会があって、その時点でおもしろいなとは思っていたので、大学ではプログラミングをやろうとは思っていました。でも、学生のときにそんなにお金がなかったし、いずれにしてもアルバイトをしたくて。そこで、時間効率を考えて、アルバイトでプログラミングをしたいなということで探したんですね。
それは大学の若い1年生とかに?
1年の5月なんで、もう1カ月後にはもうやり始めた感じですね。
その会社が、最初の1カ月とかで、研修でC言語を教えてくれるんですよ。そこで学んで、結構いろんな課題を解いたりとかして、C言語はそこで覚えたっていう感じですね。
その会社が、最初の1カ月とかで、研修でC言語を教えてくれるんですよ。そこで学んで、結構いろんな課題を解いたりとかして、C言語はそこで覚えたっていう感じですね。
親切、丁寧な。
世の中にそんなアルバイトもあるんですね。
世の中にそんなアルバイトもあるんですね。
給料もらってC言語を学べるっていう。
僕、プログラミングのアルバイトしたことあるけど、もうちょっと悲惨な感じだった。「ここにマシンがある。おまえはやれ!」とかいう感じだった(笑)。
そのときは、プログラミングそのものを全般的に学びたくて、とりあえずCだという感じだったの?
そのときは、プログラミングそのものを全般的に学びたくて、とりあえずCだという感じだったの?
まあ、そうですね。何となくプログラマーになりたくて、でもそんなにプログラミングを知らなかったので、何となくよく名前を聞くC言語かなみたいな。
ああ、そうなんだ。後に大学で授業とかで?
授業でもやりますけど、授業は何か黒板に書いたやつを板書してノートにプログラムを書くみたいなそういう微妙な授業なんで。
それはそれでつらそうな。
余りそこでは学ぶことはなかったんですけど、授業でも一応CとJavaとSchemeをやるっていう感じではありますね。
何か、CとJavaとSchemeっていうのは、どうも飛び抜けた感じが。
それで、アルバイトと大学でちょっとやって、でも情報系の学科ではなかった?
それで、アルバイトと大学でちょっとやって、でも情報系の学科ではなかった?
一応、情報工学科に。
情報工学だったのね。そこを卒業して、最初は?
クックパッドに新卒入社しました。
新卒でクックパッドに。
はい。
その国分さんといえば、Hamlの高速化といい、何かこう最近だとMJIT、途中LLVM…YARV−LLVM?
YARV-MJITっていう名前にしたんですけど、その前、LLVMのやつは、LLRBっていう名前にしたんですけど。
何かパフォーマンス系の業績が非常に目立つんですけども、もともとそういう関心というわけでもないんですよね?
クックパッドに入ってから、たまたま遅いプログラムを目にすることが多くなって、それは多分、高速にいろんなサービスをいっぱい出している会社だったからだと思うんですけど、技術的負債が結構たまっちゃうんですよね。なんで、単にサービスをどんどん出していたら、いつの間にか規模が大きくなっちゃって、どんどん遅くなってしまったっていう状況を、たまたまどうにかする係になったので、最適化をやることが多かったなっていうのと、あと単純にたまたまテンプレートエンジンを書いていたころに、「Haml遅いよね」みたいなのがちょっと流行っていて、松田さんとかもちょっと「やるぞ」みたいなこと言っていたんですけど、僕もそれをやって、何かたまたまこう、うまくいったみたいな感じですね。
自分的にはたまたまだと思っているんですか?
やってみたら面白かったので、うまくいったっていう感じですね。ちょっと興味を持ったことにさわってみて、たまたまうまくいったみたいな。
なるほど、なるほど。
そうすると生まれながらのパフォーマンスの人というよりは、そういう仕事の割り当てがきっかけっていう感じなんですかね?
そうすると生まれながらのパフォーマンスの人というよりは、そういう仕事の割り当てがきっかけっていう感じなんですかね?
Hamlのほうが、仕事よりは先なんですけど、一応仕事でもRailsアプリケーション、チューニングすることはありましたけど、どうなんでしょうね、わかんないですね。やっていると、だんだん相乗効果でどんどん楽しくなってくるというような感じで。
まあ、確かに確かに。
じゃあ、今はRuby関係ではMJITのことをやってもらって、あとはパフォーマンスも随分改善しましたけれども。
じゃあ、今はRuby関係ではMJITのことをやってもらって、あとはパフォーマンスも随分改善しましたけれども。
そうですね。
期待を僕が煽っているんですけど(笑)。
犯人は俺だっていう感じなんですが、その国分さん的に、何か今のフォーカスみたいなところはやっぱり、Rubyコミュニティ時代にJIT、その上でまだいろいろあるだろうけど。
犯人は俺だっていう感じなんですが、その国分さん的に、何か今のフォーカスみたいなところはやっぱり、Rubyコミュニティ時代にJIT、その上でまだいろいろあるだろうけど。
そうです。
Ruby的には、僕は去年だんだん低レイヤーに移ってきたので、そのRubyのVMのコアとかJITコンパイラを開発するほうに興味があって、触らせてもらっているんですけど、JITで開発している中だと、一応Optcarrotっていうベンチマークがあるんですけど、それが、CPUを主に使うベンチマークで、全くオブジェクトをアロケートしなかったりとか、GCは動かないし、メモリは全然使わないワークロードなんですよね。それで一応2.6の時点で、大体2.5倍ぐらいは速くできそうな状態まで来てるんで。
Ruby的には、僕は去年だんだん低レイヤーに移ってきたので、そのRubyのVMのコアとかJITコンパイラを開発するほうに興味があって、触らせてもらっているんですけど、JITで開発している中だと、一応Optcarrotっていうベンチマークがあるんですけど、それが、CPUを主に使うベンチマークで、全くオブジェクトをアロケートしなかったりとか、GCは動かないし、メモリは全然使わないワークロードなんですよね。それで一応2.6の時点で、大体2.5倍ぐらいは速くできそうな状態まで来てるんで。
3倍近い。
そこは、一段落したかなと思ってて、その後は、エスケープ解析とかをして、オブジェクトをスタックに張りつけるみたいなメモリのワークロードを軽くするような改善をしていきたいなと思ってるっていう感じです。
なるほどなるほど。
じゃあ、国分さんを経由して、Ruby3はだんだん現実化していく。
すごいよね、僕が適当にこう旗を振ったら、みんながやってくれる、いい世の中になったもんだって感じです。ありがとうございます。
じゃあ、国分さんを経由して、Ruby3はだんだん現実化していく。
すごいよね、僕が適当にこう旗を振ったら、みんながやってくれる、いい世の中になったもんだって感じです。ありがとうございます。
いいえ、こちらこそ。
とてもおもしろい思いをさせていただいてるんで。
とてもおもしろい思いをさせていただいてるんで。
知的チャレンジを提供し続けるのが私の使命らしい。
じゃあ、今後もその、低レイヤー、今はエスケープ解析等、オブジェクトアロケーションの話をしましたけども、そういう感じの方向性を追求していこうかなと?
じゃあ、今後もその、低レイヤー、今はエスケープ解析等、オブジェクトアロケーションの話をしましたけども、そういう感じの方向性を追求していこうかなと?
そうですね。
今のところ僕は、JITコンパイラが全然完成しているとは思ってないので、それをまず自分が満足できるところまでは持っていきたいなと思ってます。既存の処理系のいいところをもらってくるのがまだ必要かなと思っていて、Javaとかが、スタックベースのVMでいうと、一番進んでるJITかなと思っているので、HotSpotとかを自分で使ってみて、何か工夫してるポイントとかを真似して、そのJavaの性能を100%Rubyで再現するのはすごい大変だと思うんですけど、その8割くらいだったら、何かその2割くらいの労力でいけるんじゃないかなっていうのをちょっと思っていて、そこまではいけるといいかなっていう感じですかね。
今のところ僕は、JITコンパイラが全然完成しているとは思ってないので、それをまず自分が満足できるところまでは持っていきたいなと思ってます。既存の処理系のいいところをもらってくるのがまだ必要かなと思っていて、Javaとかが、スタックベースのVMでいうと、一番進んでるJITかなと思っているので、HotSpotとかを自分で使ってみて、何か工夫してるポイントとかを真似して、そのJavaの性能を100%Rubyで再現するのはすごい大変だと思うんですけど、その8割くらいだったら、何かその2割くらいの労力でいけるんじゃないかなっていうのをちょっと思っていて、そこまではいけるといいかなっていう感じですかね。
じゃあ、とりあえず低レイヤーとパフォーマンスについて。
そうですね。
今後も、頑張りますという、所信表明ということでいいですかね。
そうですね。
例えば、VladとかMIRみたいなものやったりとか、ちょっとテクニカルな話になりますけども、あの辺についてライバルっていうポジションと言ってもいいのかもしれないけれども。
一応、僕が今年やっていたのは、ポータビリティーとかあとはバグ、デッドロックとかSEGVをするような場所を直すっていうところをなるべく見るようにしていて、一応彼とは、敵対にならないようにしてるんですよ。なんで、今年はWindowsでもちゃんとJITは結構動くようにしたんですよね。
プレビュー3の段階で2では全然動いてなかったんですけど、3で。
MSYSでの難しいバグもとったとかいう話を。
そうですね。
何かこの前までは、ベンチマークを動かしているCIがあるんですけど、それでJITのバージョンだと結構ランダムで落ちてしまうみたいな、ぐちゃぐちゃのグラフだったんです。それが、最近直した段階で真っすぐになったので、それも直ってて、レースコンディションが1個、潰せた状態なんですけど、それを直したら直したで、潜んでいたバグが発覚して、何かやっぱりCコンパイラを起動してるんで、それをRubyのプロセスが起動しているプロセスなのか、JIT用のプロセスなのかっていうのを管理しないといけないんですよね。なおかつ、MJITのワーカーは、そのRubyの本体のスレッドのパフォーマンスに影響しないように、GVL外して動いてるんで、レースコンディションが起きちゃう場所があるんですよね。何で、適切に今ロックを入れようとしてるところなんですけど、そこがデッドロックするか、何か変なアクセスをしちゃうかっていうのに、結構バグが残ってて、そこをEric Wongとかが結構さわってくれてるんで、一緒に直してるところなんですけど。
何かこの前までは、ベンチマークを動かしているCIがあるんですけど、それでJITのバージョンだと結構ランダムで落ちてしまうみたいな、ぐちゃぐちゃのグラフだったんです。それが、最近直した段階で真っすぐになったので、それも直ってて、レースコンディションが1個、潰せた状態なんですけど、それを直したら直したで、潜んでいたバグが発覚して、何かやっぱりCコンパイラを起動してるんで、それをRubyのプロセスが起動しているプロセスなのか、JIT用のプロセスなのかっていうのを管理しないといけないんですよね。なおかつ、MJITのワーカーは、そのRubyの本体のスレッドのパフォーマンスに影響しないように、GVL外して動いてるんで、レースコンディションが起きちゃう場所があるんですよね。何で、適切に今ロックを入れようとしてるところなんですけど、そこがデッドロックするか、何か変なアクセスをしちゃうかっていうのに、結構バグが残ってて、そこをEric Wongとかが結構さわってくれてるんで、一緒に直してるところなんですけど。
悩ましいとこではありますね。
はい。
コンカレント・プログラムを書くと必ず頭痛くなるです。
もう、スレッドの頭が痛いところいっぱい受けてるっていう感じですね。
なるほど。
なんで僕としては、それが基盤が構築するところに結構注力してるつもりなので、その上でまた、MIRとかが速くしてくれるのであれば、どんどんウェルカムっていう感じですね。僕からしたら。
まあ、MIRっていうか、あれだよね、RTL MJITの。
そうですね、も、ありますね。
なるほど。
あれに関して言うと、もともとOptcarrotで大体僕のマシンで83fpsぐらい出るっていうのがGCCでの性能なんですけど、RTL
MJITの性能で、僕が最近その本体で開発してるJITコンパイラも86fpsぐらい出るんですよ。
大体同じぐらいに。
来てるんで、今のところそんなに置きかえるメリットは単純にVMの設計が変わるぐらいでしかないと思うんで、今はそれだけだと置きかえるメリットがないと思うんですけど、1st
tierのもっとコンパイルが速いJITコンパイラが入ってくれる分にはとてもいいかなとは思ってます。
RTLよりはどっかっていうとMIRのほうに、こう。
まあそうですね。
Firefoxとかも二段階のJIT積んだりとかしてるし。
Javaもクライアントコンパイラとサーバーコンパイラっていう、コンパイルの速いやつと遅いやつがあると思うんですけど、それがやっぱり適したアーキテクチャなのかと思っているので。
なるほどなるほど。ありがとうございます。
何か、後半大分テクニカルな話になりましたけれども、じゃあ今後トレジャーデータ的には国分さんの扱いはどんな感じになってるんですか。
何か、後半大分テクニカルな話になりましたけれども、じゃあ今後トレジャーデータ的には国分さんの扱いはどんな感じになってるんですか。
僕は、去年ここで話した時点では、Railsアプリケーションエンジニアだったんですけど、本当はバックエンドのエンジニアとして雇われたかったんですよね。Rubyじゃなくて、バックエンドのJavaとかのシステムのほうに興味がちょっと移ってきたんですけど、「でもまあ君Rubyしか書けないよね」みたいなことで、1年くらいずっとRubyを書いてたんです。そのあとはバックエンドに移ろうとしてたんですけど、僕が前職でインフラとか、開発基盤をメンテしたのがあって、今それをやるようなチーム、SREっていうチームにいて、サービスをデプロイする基盤とかをつくっているっていう感じですね。
それは、クックパッドもSREっていう名前使ってたの?
クックパッドにもSREっていうチームあるんですけど、一応クックパッド的にはインフラをやってるSREっていうチームと開発基盤の開発環境のインフラをメンテするチームがあって、僕はその開発基盤の方だったので、SREではなかったんですけど、やってることは結構似ているっていう感じですね。
なるほどなるほど。 じゃあ、トレジャーデータの中でも、Rubyの人として認知されている。
そうですね。デプロイの基盤をやるとき、大体Rubyで書かれているサービスを保守していくことが多いですけど、ほかのインフラメンバーは、Rubyを書けない人がいたりするので、僕がそこを担当しています。
そこで、やっぱりRubyが安定してほしいんで、Rubyの開発をやってる中でも何かなるべく安定しないような破壊的変更がないかどうかを結構チェックしたりとか、CIを整備を整理したりとか結構してますね。
そこで、やっぱりRubyが安定してほしいんで、Rubyの開発をやってる中でも何かなるべく安定しないような破壊的変更がないかどうかを結構チェックしたりとか、CIを整備を整理したりとか結構してますね。
希望が通ったら、何か古橋くんの弟子にっていう筋に。
そういうような開発が一応希望ではあります。
なるほど。
来年あたりから移るような話もあるんですけど、今年中は、大体インフラのメンテです。
わかりました。
今後ますますの御活躍を期待しておりますということで、ありがとうございます。じゃあ、新人は上がったということで、続きは。
今後ますますの御活躍を期待しておりますということで、ありがとうございます。じゃあ、新人は上がったということで、続きは。
新人は上がっちゃいました。
今度は次のアワードを目指していただければと、まだまだ用意しておりますので。
そうなんですか。
ありがとうございました。
ありがとうございました。