萌えハッカーニュースリーダー

2025/06/27 22:07 Rust in the Linux kernel: part 2

出典: https://lwn.net/SubscriberLink/1025232/fbb2d90d084368e3/
hakase
博士

ロボ子、今日は組み込みイーサネットコントローラー、Asix AX88796BのドライバーをRustで書き直したっていうニュースがあるのじゃ。

roboko
ロボ子

Rustですか!最近よく耳にしますね。C言語で書かれた既存のドライバーをRustで書き直したということは、何かメリットがあるのでしょうか?

hakase
博士

そこが面白いところじゃ。記事によると、Rust版とC版を比較することで、カーネルにおけるRustとCの記述の違いがよくわかるらしいぞ。それに、Rustに慣れてる人にとっては、単純なドライバーをRustで実装する良い参考になるみたいじゃな。

roboko
ロボ子

なるほど。具体的には、どのような違いがあるんですか?記事に何か記述はありますか?

hakase
博士

ふむ、AX88796BドライバーのC版とRust版は非常に類似しているものの、重要な違いもあるらしい。例えば、Rustドライバーは、ファイルがGPLでカバーされていることを示すSPDXコメントから始まるらしいぞ。

roboko
ロボ子

SPDXコメントですか。それはライセンスに関する情報ですね。他にも違いはありますか?

hakase
博士

Rustの`use`文は、Cの`#include`に似てるけど、モジュールから一部のアイテムだけを選択的にインポートできる点が違うのじゃ。すべてのインポートされたアイテムは`kernel`クレート(Rustライブラリ)から来てるみたいじゃな。

roboko
ロボ子

`use`文で必要なものだけをインポートするのは、C++のnamespaceに似ていますね。C言語の`#include`と違って、コンパイル時間の短縮にも繋がりそうです。

hakase
博士

その通り!それに、Rustではアイテムを使用前に宣言する必要がないのじゃ。これはC言語とは違う点じゃな。

roboko
ロボ子

それは便利ですね。C言語だと、変数の宣言場所を気にしないといけませんから。

hakase
博士

さらに、Rustドライバーは、PHYドライバーに必要なシンボルを設定するマクロ呼び出しを使用するのじゃ。Rustマクロには、属性マクロと通常のマクロの2種類があるらしい。

roboko
ロボ子

マクロですか。C言語にもありますけど、Rustのマクロはより強力だと聞いたことがあります。

hakase
博士

`kernel::module_phy_driver!{}`マクロは、Cの`module_phy_driver()`と同様の役割を果たすらしいぞ。そして、Rustでは、値の宣言は`const`または`let`で始まるのじゃ。

roboko
ロボ子

`const`と`let`ですか。`const`は定数で、`let`は変数の宣言に使われるんですよね。

hakase
博士

そうじゃ!Rustの関数引数における参照(`&`)は、ポインタに似てるけど、コンパイル時に特定のバグが発生しないことを保証してくれるのじゃ。

roboko
ロボ子

参照は、所有権と借用というRustの重要な概念に関連していますね。安全なコードを書く上で非常に重要な機能だと思います。

hakase
博士

Rustでは、エラーを示すために`Result`型が使用され、`Ok`または`Err`のいずれかの値を返すのじゃ。そして、トライ演算子(`?`)は、エラーチェックと伝播を簡略化してくれる。

roboko
ロボ子

`Result`型とトライ演算子は、エラーハンドリングをより安全かつ簡潔にするための仕組みですね。C言語だと、エラーコードをチェックして、それを上位の関数に伝播させるのが面倒でした。

hakase
博士

Rustの構造体は、関連するデータと関数をバンドルするために使用されるのじゃ。そして、`#[vtable]`ブロックは、トレイトを実装するために使用される。

roboko
ロボ子

トレイトは、共通のインターフェースを表現するためのものですね。コンパイラが静的型ディスパッチを実行して、トレイト関数がどのように呼び出されるかに基づいて適切な実装を選択できるようにする、と。

hakase
博士

kernelのCコードでは、PHYドライバーはデータと関数ポインタを含む構造体で表されるのじゃ。`#[vtable]`マクロは、Rustトレイトを関数ポインタでいっぱいの単一のC構造体に変換する。

roboko
ロボ子

CとRustでPHYドライバーを実装する手順が比較されているんですね。どちらの言語にもメリット・デメリットがありそうですが、Rustの安全性と表現力は魅力的ですね。

hakase
博士

そうじゃな。C言語で長年培われてきた資産も無視できないからの。でも、Rustで安全に書けるならそれに越したことはないのじゃ。

roboko
ロボ子

私もそう思います。今回の記事は、Rustでカーネルドライバーを開発する際の参考になりそうですね。

hakase
博士

ところでロボ子、Rustで作ったプログラムがコンパイルエラーになった時、なんて言うか知ってるか?

roboko
ロボ子

え?なんでしょう…。

hakase
博士

「Rust in peace」じゃ!

roboko
ロボ子

…博士、それ、メタリカのアルバムじゃないですか!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search