2021_winner_Interview

Maxime Chevalier-Boisvert インタビュー

進行:まつもとゆきひろ委員長

まつもとゆきひろ委員長

まず、最初に簡単に自己紹介をお願いします。

Maxime Chevalier-Boisvert

はじめまして、Maxime Chevalier-Boisvertと申します。

Shopifyでコンパイラエンジニアをしており、Rubyプログラミング言語用のジャストインタイムのコンパイラプロジェクトである、YJITコンパイラのプロジェクトを担当しています。

まつもとゆきひろ委員長

素晴らしいです。

どうしてプログラミングに出会い、プログラミングを始められたかをお話しください。

Maxime Chevalier-Boisvert

プログラミングを最初に始めたのは、10歳のときかと思います。

QBasicの入ったDOS386のコンピューターを持っていましたが、当時英語は読めませんでした。ありとあらゆるヘルプファイルにアクセスしましたが、意味を理解するのはとても難しかったので、あまり学習を進めることができませんでした。

家にインターネットが入ったのは16歳になってからだったと思います。インターネットで多くの学習教材を見つけることができ、それからC++の学習を始めました。

まつもとゆきひろ委員長

QBASICで始めて、次にC++ですね。最初につくったプログラムを覚えてらっしゃいますか?

Maxime Chevalier-Boisvert

10歳のときは、簡単なアニメーションを描いたものでした。ラインとループを並べたりして…

まつもとゆきひろ委員長

その後、大学でコンピューター科学を専攻なさったんですね。

Maxime Chevalier-Boisvert

はい。マギル大学(McGill University)に入って、コンピューターサイエンスを学びました。

まつもとゆきひろ委員長

高校生の時に(進路を決めるときに)プログラミングを仕事にしようと考えられたのですか?

Maxime Chevalier-Boisvert

高校生の時は、将来自分が何をするか確信を持っていませんでした。プログラミングに進むかコンピューター工学に進むかどちらかだと思っていました。

まつもとゆきひろ委員長

どのようにしてRubyに出会われたのでしょう?

Maxime Chevalier-Boisvert

Rubyに最初に出会ったのは、20歳か21歳の時だと思います。フォーラムでウェブサイトを作ろうと考えたのですが、当時はRuby on Railsが最善のフレームワークでした。それがRubyに出会ったきっかけです。

まつもとゆきひろ委員長

あなたの博士論文は、JITコンパイラがテーマだったとお聞きしています。今取り組まれているYJITに似てますよね。

博士論文でなぜそのテーマを選ばれたのですか?

Maxime Chevalier-Boisvert

学部生のときにプログラミングにとても惹かれました。本当に自分はプログラミングが好きなんだ・プログラミングについてより深く知りたいと思い、コンパイラが好きになりましたコンパイラを作ることができればプログラミング言語も作れるからです。

修士論文ではコンパイラ研究グループに入り、MATLABのJITコンパイラをやりました。私のアドバイザーは数値計算の最適化に興味を持っていましたが、私が本当に興味を持ったのはダイナミックタイピングでした。MATLABはJavaScriptやRubyや他の言語同様ダイナミックタイピングを採用していましたから。

そこで博士論文ではダイナミックタイピングの最適化に焦点を当てようと考え、Javascript用のコンパイラを選んだんです。

まつもとゆきひろ委員長

Shopifyに応募なさった経緯はなんだったのでしょう? JITコンパイラをやるためにShopifyからあなたにアプローチされたんですか?

Maxime Chevalier-Boisvert

そうです。

私はクリス・イートンに招かれて、研究や、就職機会について話しました。それでその仕事を引き受けることにし、ShopifyのRubyとRailsのグループに加わることにしました。

そのグループの中では多くの人がRubyVMの最適化に取り組んでいました。

まつもとゆきひろ委員長

チームの規模はどれぐらいでしたか?

Maxime Chevalier-Boisvert

RubyとRailsのインフラチームは大きくて、100名ぐらいいました。

特に直接・間接的にRubyVMを担当していたのは、おそらく10名から12名ぐらいだったかと思います。

数が間違っていないことを願いますが…間違ってたら上司に謝らなければなりません(笑)

まつもとゆきひろ委員長

大丈夫ですよ(笑)

Maxime Chevalier-Boisvert

今は6名がプロジェクトに参画しています。

まつもとゆきひろ委員長

ありがとうございます。私たちのコアチームも非常に大きくて、Shopifyのチームは私達とほぼ同じ規模です。

まつもとゆきひろ委員長

このインタビューの視聴者の中には、JITコンパイラをご存知ない方もおられると思うんです。

JITコンパイラがどのように機能し、どのようにVMの性能をアップさせるのか、簡単にご説明ください。

とても複雑なことはわかっています(笑)

Maxime Chevalier-Boisvert

わかりました。どこから始めましょうか…

典型的には、大半のダイナミック言語は、インタープリットとされるか少なくともインタープリターを持っています。そしてインタープリターは基本的には一行、一命令ずつコードを実行します。そしてプログラムの命令列に対するループがあり、命令を実行していきます。

JITコンパイラはこれらの指示を受け、それをマシンコードに変換して、命令列に対してループしなくてよいようにしています。

また、インタープリターの中で起きる多くの条件付きチェックを排除することを可能にし、コードの効率化を図り、CPUが高速に実行できるようにします。

まつもとゆきひろ委員長

JITコンパイラは、インタープリターと比べてどのようなトレードオフがあるか説明してくれますか。

Maxime Chevalier-Boisvert

はい。トレードオフは複数あると思います。

その一つは、インタープリターの場合、起動時間が非常に早くなります。

だから、例えば、Google V8のようなJavaScriptエンジンを最適化するとき、インタープリターも残されています。それはレベル0最適化のようなもので、レベル0はインタープリターのままです。

プログラムをマシンコードにコンパイルするには一定の時間がかかります。

起動時間が少し長くかかる可能性があり、これが一つのトレードオフです。

また、コードの複雑さの増加もあります。

このため、JITコンパイラはしばしば複数のレベルの最適化を持ちます。

インタープリターがあり、ベースラインのJITがあり、時には一つか二つのレベルのJITがその上に乗ります。

さらにメモリー使用量の問題もあります。

JITコンパイラーは典型的には生成されたコードに加えて、補助データを保存しており、コードの最適化のための仮定を追跡します。

これにもまたある程度のメモリが必要です。

まつもとゆきひろ委員長

ありがとうございました。

JITコンパイラーはRubyの性能向上に極めて有望なようですね。

YJITの機能を向上させる計画はありますか?

Maxime Chevalier-Boisvert

はい。計画はたくさんあります。

今年やりたいと思っていることの一つはARMバックエンドの追加です。

今現在私たちがサポートしているのはx86-64だけですが、64bitのARMバックエンドを追加して、ARM M1とRaspberry Piなどもサポートしたいと思っています。

同時に、バックエンドのための新しい中間表現を追加して、マシンコードの最適化を行い、より高品質のマシンコードを生成できるようにしたいと思っています。

まつもとゆきひろ委員長

非常に期待できますね。それ以外に何か計画はありますか。

Maxime Chevalier-Boisvert

いつか自分の趣味で、プログラミング言語を作りたいと思っています。

まつもとゆきひろ委員長

楽しいでしょうね。

Maxime Chevalier-Boisvert

ええ。でも怖い仕事だと思いますし、大変でしょうけれど。

まつもとゆきひろ委員長

プログラミング言語を作ることは極めてわくわくすることです。そして、ひょっとしたら生涯にわたるプロジェクトになるかもしれません。

でも、いつか、ぜひやっていただきたいと思います。

Maxime Chevalier-Boisvert

やります。最初は小さく始めますけど。

まつもとゆきひろ委員長

私も小さく始めました。

あなたのプログラミングへの熱意は相当なものだと思います。だからあなたのツイッターアカウントは@Love2Codeなんですね。

プログラミングに対する愛情や情熱についてお話いただけますか?

Maxime Chevalier-Boisvert

もちろんです。

ご存知のように、子供の頃、貧しい家庭で育ちました。

母は生活保護を受けておりシングルマザーでした。

私自身は機械やエレクトロニクスが大好きでしたが、当時、電子部品はとても高価だったんです。

エレクトロニクスをやりたければ新しいパーツを購入する必要がありますので、その趣味は私には高値の花でした。

でも最後には究極の機械であるコンピューターを見つけました。

パーツは必要ありませんから、コードを書くことができれば、限界となるのは自分の想像力だけです。必要なのは時間と集中力であり、コードで作り出すものに限界はありません。

まつもとゆきひろ委員長

その通りですね。

子供の頃、これは魔法のようだと感じていて、私の想像力で何かできないだろうかって思ったんです。そしてプログラミングでそれが可能となりました。

まつもとゆきひろ委員長

私も高校生のころ、同じようなことを考えました。

おそらく聴衆の中にも、Maximeさんのようなプログラマーになって、システムのコアのところで仕事がしたいと思っている人がいると思います。後に続く人へのアドバイスをいただけますか。

Maxime Chevalier-Boisvert

皆さんが置かれている状況によりますが、プログラミングを学びたいと思ってるなら、まずは独学することをお勧めします。年齢など関係ありません。

プログラミングに対する好奇心があるなら、インターネットで検索して、オンラインのチュートリアルを見つけ、Rubyをダウンロードし、コードを書き始め、それで遊んで実験してください、失敗を恐れずにやり続けてください。やればやるほど腕は上がります。

まつもとゆきひろ委員長

通常、プログラミングでコンピューターを燃やしてしまうことはない、というのがプログラミングのいいところですよね。電子工作では大きな電流をかけすぎると回路を焼いてしまいますが、プログラミングはそれに比べたら

ずーっと安全ですね。

Maxime Chevalier-Boisvert

目の前に聴衆の皆さんがいらっしゃらないので、なかなか何と言っていいか難しいんですが…

自分の情熱に従って行動してください。そして楽しんでください。

まつもとゆきひろ委員長

では、最後の質問です。

あなたを偉大なプログラマーたらしめているのは何でしょう。

Maxime Chevalier-Boisvert

細部に注意を向けることではないでしょうか。

まつもとゆきひろ委員長

細部への注意ですね。それはどういうことでしょう?

Maxime Chevalier-Boisvert

プログラミングはコミュニケーションの一種です。他のコミュニケーション同様、読みやすいコードを書くことはいいことです。

ですからユーザーの立場になって考えてください。

ユーザーがあなたのプログラムを走らせた時、ユーザーの経験はどんなものなのか・ユーザーに明白でないことはないだろうか・ユーザーの経験をどうすればよりよいものにできるか、をユーザーの立場で考えることです。

まつもとゆきひろ委員長

プログラミングはコミュニケーションのためにありますよね。私も同意見です。

プログラミングが育てば、そのプロジェクトの周囲にコミュニケーションに基づくコミュニティが形成されます。コミュニケーションはとても重要です。

まつもとゆきひろ委員長

まさにその通りです。プログラミングにはコミュニケーションはとても大事だと思います。

お時間をいただきありがとうございました。

そして、Ruby Prize受賞おめでとうございます。

Maxime Chevalier-Boisvert

お話できて嬉しかったです。ありがとうございました。