Microsoftの年次イベントBuild 2020でメモリーセーフなプログラミング言語Rustを紹介
Microsoftが年次カンファレンス、Build 2020を開催した。新型コロナウイルスの影響でオンラインイベントとなった今年のBuildだが、特徴的なのは5月19日と20日の2日間に渡って同じコンテンツがストリーミングされたことだろう。これは世界各地、さまざまなタイムゾーンから視聴することを考えた施策であろう。通常はリアルタイムで視聴、その後YouTubeなどにアップロードされたコンテンツを数日後に視聴するというスタイルになるが、北米、ヨーロッパ、アジアなどタイムゾーンの異なる地域であっても、リアルタイムに近い感覚でセッションに参加することができることになる。
コストを考えれば、1回だけのストリーミングと動画のアップロードは妥当な方法だが、Microsoftは異なるタイムゾーンの参加者を意識した構成を採用したというわけだ。この辺りは、さすがにパブリッククラウドのNo.2であるMicrosoftらしい大盤振る舞いと言える。
CEOのSatya Nadella氏のスピーチは、GitHubを使うデベロッパーが350万人を超えたことやAzureの成長などを紹介し、巨大なMicrosoftのポートフォリオを駆け足で紹介する内容となった。
今回の記事ではBuild 2020の中でもRustに注目してセッションを紹介しよう。RustはCやC++とも比較される低レベルのプログラミング言語だが、メモリーセーフであることを徹底した仕様となっており、高速な実行速度やビルドシステムが標準で用意されていること、メモリーリークなどのバグが起こらないことなどから、今注目されている開発言語だ。
Build 2020のセッションの中でRustに関するセッションはわずか4つほどと少なめであったが、そのうちのMicrosoft Security Research CenterのRyan Levik氏が解説している動画では、MicrosoftがRustに取り組む姿勢が明らかになった。
このセッションでは比較対象としてGoogleが開発したGo言語にも言及し、「GoもC++も素晴らしい言語だが、Microsoftの開発するソフトウェアで発生するバグの70%がメモリーセーフティに関するもので、それを確実に解消でき、しかもガベージコレクションがないというのがRustの一番の優位点」であると説明した。
何度もGoとの比較がコメントされたが、「ガベージコレクションが許されないシステムレベルのソフトウェアを書くならRustである」と結論付けられていることが印象的だ。
動画:Microsoft's Safe Systems Programming Languages Effort
他にStudent Zoneという、より若いオーディエンスを対象にしたセッションでは、Intro to Rustと題したRustのイントロダクションが行われた。このセッションでは単にスライドを使って説明するだけではなく、実際に簡単なプログラミングをライブコーディングして実行するという方法でソースコード編集から実行までを行ってみせた。
Rustを使う理由というスライドでは、「最も愛されている言語であり、ツールが完備していること」そしてシステムレベルのソフトウェアを開発するのに最適であることが紹介された。
またデモとして、数値を予想させるプログラムを例題にRustによる開発の一連の流れを紹介した。これはランダムな数値をプログラムの中で発生させ、キーボードから入力された値と比較し、最終的に同じ値が入力されれば、そこで「You Win」と表示させて終了するという簡単なループのロジックだが、Cargoというパッケージマネージャーを使ってプロジェクトを作成し、Visual Studio Codeで編集、その場でビルドから実行、という一連の流れが理解できるものだった。
ただ、Rustのメモリーセーフな仕様として特徴的な所有権や変数束縛などについては詳しく解説されず、その部分では多少物足らないものになった。しかし時間も限られた中での発表であるため、あえてその部分を飛ばして紹介するという構成は妥当なものだろう。
最後に紹介したいのは、30分でコードを書くというチャレンジを行ったセッションだ。これは前出のRyan Levik氏がリードして行われたもので、単に実行するだけではなく、より効率的なコードを書くという部分を実演する内容となった。
動画:The 30 Min Beginner Rust Coding Challenge
ここで登場するのが、LeetCodeというサイトだ。これは「A New Way to Learn」というキャッチコピーが示すように、プログラミングを学ぶ新しいサイトである。ポイントは「expand your knowledge and prepare for technical interviews」とあるようにGoogleやMicrosoftなどのテクノロジー企業が行う面接(実際にプログラマーにコーディングを行わせるというのが最近の傾向)に対応できるような知識を得ることに特化していることである。
参考:LeetCode
「The 30 Min Beginner Rust Coding Challenge」と題されたこのセッションでは、このLeetCodeにある「ある配列から任意の範囲の数値の合計を計算する」という問題を、Rustでコーディングするという課題が提示された。これを30分以内に行うだけではなく、完成されたコードをさらに最適化するという部分までを実演した。
例題に対してVisual Studio Codespaces(旧Visual Studio Online)を使ってソースコードを書いて実行、その結果を元にさらに改善するという流れをスムーズに見せた点も、Microsoft狙いの一つだったのではないだろうか。
このセッションでは、単にRustでコードを書くだけではなく、どうすればより高速化ができるかまでを見せたところがポイントだろう。
このようにRustのコーディングだけではなく、LeetCodeというサイトの紹介も兼ねたセッションとして強い印象を残した内容となった。
プログラマーの評価については、オープンソースソフトウェアへの貢献をGitHubで可視化することで、チームワークやコミュニケーション能力を評価する方法がある程度、客観的な物差しとして認知されている。その一方で、コードの書き方の良し悪しについては客観的な評価は難しかったと言える(例外はLinus Torvalds氏から「パッチの書き方が悪い」として罵倒されるぐらいのものだろう)。プログラマーの面接で、GoogleやMicrosoftなどの企業が実際にコードを書かせて評価する方法を採用しているのはそのためだろう。
LeetCodeのように課題をコンテスト形式でこなしていくことで自分のプログラミングスキルを伸ばすサイトが登場したことで、これからはGitHubで他のデベロッパーやコントリビューターとの調整能力を評価し、LeetCodeでプログラミングスキルを評価する、というように変わっていくだろう。
Rustに関してはMicrosoftの内部でも評価が高いようで、これからも開発が続いていくだろう。Meaghan Lewis氏のQ&Aにもあったように、現状では「学習コストが高い」という評判を気にしているデベロッパーはまだ多いようだ。LeetCodeや今回のライブコーディングのデモなどで実際にソースコードや開発ワークフローに触れることで、学習コストの障壁も徐々に下がっていくことが予想される。
多くのバグがメモリーセーフティに起因しているという点がもっと認知されること、このことがRustの追い風になることを期待したい。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- RustConfで見えてきたRustプロジェクトが最も大事にする価値とは?
- 「TAURI」をはじめる前に -「Rust」の基礎と開発環境の構築
- 高速でメモリーセーフなプログラミング言語、Rustの特徴を紹介
- Rustと非同期ライブラリーTokioで作成した簡易版Redisを紹介
- RustとGraphQLの連携で高速/シンプルなプログラミングを実現するJuniperとは
- GoogleがAndroidの開発にRustを使った事例を解説するRust Dayを開催
- データ処理ライブラリーの並列化/高速化をRustによって実装したWeld
- Rustのエコシステムの拡がりを感じるデスクトップアプリのためのツールキットTauriを紹介
- 「TAURI」の基礎知識を押さえ、簡単なTAURIアプリ開発を体験してみよう
- RustNL 2024からデータ圧縮ライブラリーzlibをRustで書き直したプロジェクトのセッションを紹介