検索
ニュース

「Rust言語」をWindowsプロジェクトに適用してみた、Microsoftの事例開発者が伝える現場の声

Microsoft Security Response Centerは公式ブログにおいて、Microsoftにおけるプログラミング言語「Rust」導入の進展を紹介するシリーズ記事を更新、「Hyper-V」開発者のレポートを公開した。C++を利用した開発と比較して何がメリットなのか、Rustに欠けている部分はないのか、当事者ならではの示唆に富んでいる。

Share
Tweet
LINE
Hatena

 Microsoft Security Response Centerは2019年11月7日(米国時間)、オープンソースのシステムプログラミング言語「Rust」をMicrosoft社内でどのように利用しているのかというテーマで、同社「Hyper-V」チームのソフトウェアエンジニア、アダム・バーチ氏の記事を公開した。

 バーチ氏は、最近担当することになった実験プロジェクトでの経験を基に、Rustを使った開発について解説や意見、期待を述べている。

 この実験プロジェクトは、Windowsコードベースの低レベルシステムコンポーネントの1つを、Rustで書き換えるというもの。Rustは、C++に代わるメモリ安全な言語として採用された。

 プロジェクトはまだ終了していないが、Rustを使った開発は、全体的に建設的な経験といえるとバーチ氏は述べている。「C++コードベースのセキュリティ脆弱(ぜいじゃく)性につながりやすいよくあるミスを避けたい開発者にとって、Rustはよい選択肢だ」と指摘している。

 バーチ氏のブログ記事の概要は次の通り。

優れた開発エクスペリエンスを享受できる

 複雑なシステムを作り慣れているC++開発者にとって、Rustを開発言語として使うのは新鮮な経験だという。

 Rustを使うとコードのコンパイルの際に、メモリ安全性にまつわる脆弱性を排除できるという信頼感がある(関連記事)。ささいな問題や競合状態のデバッグに費やす時間も少なくて済む。さらに、コンパイラの警告やエラーメッセージが適切で分かりやすく、習得してから間がないRustプログラマーでも、コードの問題点を素早く見つけて解決できる。

 Microsoftの「Visual Studio Code」を利用している開発者には、Rust拡張機能「Rust(rls)」が役立つ。IntelliSenseによる入力補完や構文のハイライト表示のような機能が利用できるからだ。加えて、ビルドツールの「Cargo」を使うと、テストやドキュメント生成、コードの自動整形といった非常に役立つ機能を享受できる。

容易に学習できる

 豊富なオンラインドキュメントやコンパイラの有用なエラーメッセージのおかげで、キャリアの大部分でC++を使ってきた開発者(バーチ氏も該当する)にとって、Rustは容易に学習できる言語なのだという。例えば、バーチ氏がMicrosoft社内の年次ハッカソン「One Week」に、経験豊富なRust開発者1人、Rustの完全な初心者の開発者1人とともに参加した場合だ。初心者であっても3日以内に、Rustの慣用に従った1000行以上のRustコードを書き上げた。

 初心者にとっても、経験豊富な開発者にとっても、一般的なRustコードの誤りを見つけて改善につながるリントツール「Clippy」が役立つとした。

 コードの移植についていえば、一般に、クリーンなインタフェースを持つ新旧のコンポーネントは、極めて容易にRustに移植できる。ただし、バーチ氏が書き換えを担当しているコンポーネントは厄介だという。あるレイヤーから次のレイヤーに多数、抽象化がリークしており、予備的なリファクタリングが必要となった。

外部関数インタフェース(FFI)を利用可能

 RustコードをCのABI(Application Binary Interface)境界へのリンクすることは簡単だ。基本形を使ってシンプルな関数を書くのに必要なボイラープレートコード(省略できない定型的なコード)が用意されているからだ。

 だが、あるプログラミング言語で定義された関数などを他のプログラミング言語から利用するための仕組みであるFFI(Foreign Function Interface)関数は常に安全ではないため、ラッパー関数を使用しなければならない。複雑な構造体を含む関数では、ビルドプロセスの一環として「bindgen」を使って、元の言語と同等のRust構造体を生成することが望ましい。

 Microsoftは2019年にCOM(Component Object Model)ライブラリをオープンソース化した。これは、C++とRustとの間で直接的な相互運用性を実現するための第一歩として役立つ。ただし、Rustで複雑なC++ APIと直接やりとりするには、より高度なツールが必要になるとバーチ氏は考えている。

「unsafe」キーワードがコードの安全性を台無しにしないようにするには

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る