An interview with Meade Kincke in which he and Katrina Owen talk about the Rust compiler, a GUI that uses scientific colourspaces to determine the colour of beer, and his book 'A Practical Guide To Rust'.
やあ、Meade。お話ししてくれてありがとう。Meadeは、私たちのRustトラックで最も精力的に活躍しているメンターなので、ぜひお話を聞きたかったのです。これまでに400人以上の生徒を助けてきましたね。Exercismのことは、どうやって知ったのですか?
RedditのRustサブレディットで、ExercismのRustトラックがメンターを必要としているという投稿を見かけたので、調べてみました。本当にやってよかったと思っています。とてもやりがいがありますし、みなさん本当に親切で、感謝してくれます。Exercismの生徒たちとは素晴らしいつながりができましたし、彼らを助けるのが大好きです。
特に印象に残っている話はありますか?
はい、特に人気のあるRustの演習が1つあります。ピタゴラスの三つ組です。
この演習で最もよくある問題は、性能です。ほとんどの人は最初、入れ子になったforループで解きますが、これは少なくともO(n²)で、非常に非効率です。私の目標は、生徒を線形の解答、つまりO(n)へと導くことです。
私のやり方は、質問を投げかけることです。まず、Rustのイテレーターメソッドを学びたいかどうかを尋ねます。これにはたくさんの利点があり、その1つは、Rayonライブラリーを使って作業を並列化できることです。
「はい、お願いします」と答えたあと、ある生徒が、組み込み制御に使いたいと考えていて、その大量のデータ出力を処理したいのでRustを学んでいると話してくれました。ですから、彼にとって並列性は重要です。私が一見単純な演習を使って、より複雑でRustらしい部分を教えたことを、彼は喜んでくれました。
そして今では、Exercismのおかげで、彼は私を雇ってマンツーマンで教えてもらっています。これから一緒にいくつかの実験的なプロジェクトに取り組みます。彼が会社を完全にRustへ移行したら、彼のチーム全員にも教えることになっています。
私は、メンターをしてきた生徒たちと関わるのが本当に楽しく、この活動がさらに広がっていってほしいと思っています。
とても気に入っているので、今ではRustトラックのメンテナーに立候補して、より多くのことを裏方で手伝っています。
そうした人と人とのつながりは、とても大切です! MeadeはA Practical Guide to Rustの著者ですね。どんな内容で、書こうと思ったきっかけは何だったのですか?
この本は、Rustの特定の側面をよりよく理解してもらうために書きました。この言語に関するドキュメントはそれほど多くなく、ユーモアがあって、言語の概念を具体的に説明してくれる読み物が必要だと感じていました。基本的な領域から高度な領域までガイドしてくれます。読者には、この言語の実用的で現実的な使い方をしっかりつかんでほしいと思っています。仮の例ではなく、実際の例を挙げています。
私はずっと、いつか本を書くと思っていました。同僚にリモートでRustのプログラミングを教えることになったとき、構成が自然とまとまりました。彼はそれまでコードに一切触れたことがなく、私たちオタクが当たり前だと思っている用語や方法を、新しくわかりやすい形で説明する必要がありました。Rustの所有権の概念を説明するときには、図書館で本を借りるのと本を所有するのを対比させるような例えを使いました。
また、私のプロジェクトBrewStilleryの例も取り入れました。構造体や列挙型といったものが実際のプログラムでどう機能するかを見るのに最適です。本物の並列処理の使い方も示してくれます。
この本を書くとき、単なるリファレンスガイドではなく、物語のように読めるものにしたいと思っていました。話が積み重なっていきますが、それぞれの要素は独立しても成り立ちます。化学のマニュアルを見ながら料理するのと、Julia Childの『The French Chef』のエピソードを見るのとの違いです。
それは興味深いですね。この本は誰に向けて書いたのですか? 読者は何を得られますか?
Rustを学びたいすべての人に向けた本です。私がアイデアを説明するときの決め手は、読者に根本的な理解を与えることです。一方、他の多くの読み物は丸暗記に傾いています。
多くの好意的なレビューをもらっているようですね。第2巻を出す予定はありますか?
はい! もちろん書き続けますし、さらに多くの巻を出版するつもりです。
メンタリングや執筆を通じた教える活動のほかに、Rustコンパイラーにも取り組んだそうですね。それについて教えてもらえますか?
もちろんです!
私の仕事を簡単に紹介すると、プログラムが機能できる場所は基本的に2つあります。コンパイル時と実行時です。実行時に関数が実行されると、その中のすべてを再生成して再計算する必要があります。これは特にメモリの再割り当てを意味し、それは常に避けたいことです。関数が定数であれば、プログラムの起動時にメモリに読み込まれます。コンパイル時にできることが多いほど、プログラムの性能はよくなります。
少し前、コンパイル時関数実行(const fn)という考えがRustに実装されつつあると聞いて、とても興奮しました。私は、物事を効率的で正確にすることに強い情熱を持っています。const fnで特に気に入っているのは、それが完成すると、数学定数のような素晴らしいものをエレガントに決定できるようになることです。現在、piはハードコードされた値です。多くの人はこれで十分正確だと言うでしょうが、私は利用可能な数値空間を余すところなく使うべきだと考えています。const fnを使えば、Leibnizの公式を使って、浮動小数点の空間を完全に埋めることができます。
もう少し調べてみると、MIRIがconst fnの安定化をずっと容易にするというブログ記事を見つけました。時が経ち、新しいバージョンがリリースされても進展が見られませんでした。私はRustチームに連絡を取り、コンパイラーをいじり始めました。
素晴らしいのは、コンパイラー自体がRustで書かれていることです。当初はOCamlで書かれ、その後Rustで書き直されました。これをブートストラップと呼びます。基本的に、コンパイラーはすべての入力をASTで解析し、それを高水準中間表現(HIR)、次に中水準(MIR)、そして低水準(LIR)へと引き渡し、最終的にはLLVMが扱います。これらの段階をたどるにつれて、機械語にどんどん近づいていきます。
理解しておいてほしいのは、コンパイラーもただのプログラムだということです。ただし、非常に手の込んだものです。Rustのコンパイルにはかなり時間がかかり、特にそのすべてのテストを実行するとなると大変です。ですから、コードを少し放り込んで「これで完成」と言えるものではありません。
コンパイラーでの最初の作業はHIRに関するものでした。安定版とnightly版の両方の標準ライブラリーを膨大に読み込み、あちこちを掘り下げる必要がありました。コンパイラー内のすべての入れ子になった型を、選択肢が尽きるまで再帰的にたどらなければなりませんでした。nightly/コンパイラーライブラリーには、ものすごく多くの入れ子の型があります。どの筋を追いかけているかを見失わないためには、かなりの集中力が必要です。
さらに複雑なことに、コンパイラーは分散したチームで開発されているため、しばしばマージコンフリクトが発生します。
とても楽しかったです。まだやるべきことは山ほどあり、近いうちに取りかかります。
こうしたオープンソースへの貢献に加えて、Meadeがブロックチェーン企業のCTOであることも知っています。私はブロックチェーンと聞くと、Etheriumで大損したことを思い出します。Meadeにとってブロックチェーンとは何ですか?
残念ながら、ブロックチェーンはこれまでにないほどもてはやされる流行語になってしまいました。
それは、シティやウォール街がデジタル通貨という新しいトレンドで儲けることのはるか先を行くものです。私たちは実は「ブロックチェーン企業」ではありません。Chainetixでは、企業のデータを安全に保護するためのプライベート台帳を提供しています。実際のところ、暗号通貨さえ扱っていません。Chainetixの目的は、プログラミングの基本を理解しているすべての人の手に、私たちの専門知識を届けることです。
私の仕事は、盤石なものを作るために、システムとインフラストラクチャーをゼロから設計することに関わってきました。私はHabitat by Chefというプロジェクトを選びました。Chefのような巨大企業から出たプロジェクトとしては興味深く、Rustで書かれていることから知りました。普通のDockerとは対照的に、Habitatは自らを自動で更新できるイメージを作り、サービスバインディングのような驚くべきことを実現します。Habitatのcore-plansリポジトリーにもかなり貢献しています。
さきほど、ご自身のプロジェクトBrewStilleryについて触れていましたね。大切にしているように思えます。もう少し詳しく教えてもらえますか?
はい、間違いなく大切です!
BrewStilleryは、ビール、ワイン、蒸留酒のためのオープンソースのオールインワンツールで、RustとGTK3で書きました。CSSテーマも追加しており、美しく独特です。一言でいえば、蒸留酒を作る人向けの高度な計算機です。
ビールやシャンパンに固有の計算機を分けるためにいくつかのタブを作り、同時に、ビール醸造家、ワイン醸造家、蒸留家のいずれにも当てはまる一般的なタブも用意しました。ほとんどのビールやワインのボトルを見ると、そのボトルのアルコール度数、つまりAlcohol By Volumeが書かれています。BrewStilleryが行うことの1つは、そのABVを求めることです。ご想像のとおり、ここにはオタク心をくすぐる素晴らしい要素がたくさん詰まっています。私が最も満足しているのは、ビールの色を計算することです。


これらのビフォーアフターの画像は、量を入力したあとに何が起こるかを示しています。私がやった方法は、これまで誰もやったことがないものです。もう1つの素晴らしい機能は、入力しながらその場で計算されることです。色空間についての細かい話が知りたいなら、カンファレンスで声をかけてください。パイントを傾けながら話しましょう!