2 ポイント 投稿者 GN⁺ 2024-07-16 | 1件のコメント | WhatsAppで共有

ファイルシステムにRustを使う

目標

  • Rustの型システムを使って、より多くのエラーをコンパイル時に検出する
  • リソース解放のような作業を自動化し、Cコードより生産性を高める
  • メモリ関連の脆弱性を減らし、デバッグ時間を短縮する

Rustの利点

  • Rustは未定義動作を排除し、コード内部で何が起きているのかを把握できる機能を提供する
  • Rustで書かれたコードの正確性を証明できるため、機能開発を妨げるバグが減る

Rust型システムの例

  • iget_locked() 関数は複雑な要件を持っている
  • Rustでは get_or_create_inode() 関数に置き換え可能で、型システムを通じてこうした要件を強制できる

API名変更に関する議論

  • C APIとRust APIの名前の不一致という問題
  • 既存の開発コミュニティにはなじみがない可能性がある
  • 名前を一致させる必要があるかもしれない

一般的な問題

  • Rust抽象化をすべてのカーネルファイルシステムで一般的に使うのか、それともRustで書かれたシンプルなファイルシステムにだけ注力するのかを決める必要がある
  • Cコードが進化するにつれて、Rustコードとの同期問題が発生する可能性がある

オブジェクトのライフサイクル問題

  • オブジェクトのライフサイクルはファイルシステムによって異なる場合がある
  • Rust APIに単一のライフサイクルをエンコードすると、一部のファイルシステムでは動作しない可能性がある

Rustバインディングの問題

  • すべてのファイルシステムが直ちにRustへ移行するわけではない
  • Cコードが進化するにつれてRustバインディングが壊れる可能性がある
  • Rustバインディングが壊れた場合、それはRust-for-Linux開発者たちの問題として残る

結論

  • Rustバインディングの開発を続けつつ、Cコードも進化できるようにする
  • Rust型システムに多くの意味をエンコードすることが良いのか悪いのかは、時間が経てば明らかになるだろう

GN⁺のまとめ

  • Rustをファイルシステムに導入することは、メモリ安全性と生産性の向上に大きく役立つだろう
  • Rust型システムによって複雑なAPI要件を強制でき、コードの正確性を高められる
  • 既存のC開発者がRustを学ばなければ、同期問題のような困難が発生する可能性がある
  • Rustバインディングが壊れた場合、それを解決するのはRust-for-Linux開発者たちの役割になるだろう
  • 類似の機能を持つプロジェクトとしてはGoogleのFuchsia OSがある

1件のコメント

 
GN⁺ 2024-07-16
Hacker Newsのコメント
  • 各ファイルシステムが inode のライフサイクルをそれぞれ異なる形で管理しているのに、同じ関数で扱おうとするのは抽象化レイヤーに反している

    • inode のライフサイクルはファイルシステムごとに管理すべき
  • Rust が C 呼び出しをより容易にするために変更が必要なのか、という疑問がある

    • Rust と C の相互運用性について明確な理解が不足している
    • C++ と Objective-C はヘッダーファイルをインクルードして関数を呼び出せばよい
    • Swift は Objective-C ファイルを取り込み、C を呼び出せる
    • Rust はカーネル開発者に合わせるというより、言語自体がもう少し柔軟になる必要がある
  • Rust API が C API をラップしているのか、それとも再実装しているのかが明確ではない

    • 再実装であれば、C API と同じ名前を使うことが問題を引き起こす可能性がある
  • Rust をカーネルに追加することは、追加の複雑さを招く

    • 新しい OS をゼロから書くのであれば、言語のあらゆる機能を使える
    • 既存の巨大なコードベースに追加すると、さらなる問題が発生する
  • 議論は非常に礼節あるものだ

    • 否定的なトーンには同意しない
    • 関係者が問題点を明確に伝えていることについて楽観的に見ている
  • Linux カーネルに選択肢が増えることは、常に有益だ

    • Rust はあらゆる問題の解決策ではない
    • Rust は安全なプログラミングモデルを提供するが、制約もある
    • メモリ問題? Rust を使おう!
    • 並行性の問題? Rust に移行しよう!
    • しかし、unsafe ブロックを使わなければ C ができることをすべて行えるわけではない
    • Rust は新しい視点をもたらしうるが、完全な解決策ではない
  • lwn.net のページ下部にある一部のコメントは失礼だ

    • オープンソースプロジェクトに貢献している人に対して「科学は一度の葬式で進歩する」とコメントする場面を想像してみてほしい
  • C API と Rust API の名前の不一致問題についての議論

    • レガシーな命名規則の難しさ
    • 同じ名前を維持する方法も、新しい名前でラップする方法もある
    • 名前を付けるのは難しい