Rustで始める低レイヤープログラミング

@garasubo

自己紹介

Twitter: https://twitter.com/garasubo

Github: https://github.com/garasubo

Medium: https://medium.com/@garasubo

低レイヤープログラミング

OSなしでのプログラミング

  • OSそのもの
  • ブートローダー
  • 仮想マシンモニタ(VMM)
  • 組込みシステム

C言語(or C++)とアセンブラで書くのが定番

Rustでも低レイヤープログラミング

  • ガベージコレクションがなく高速
  • モダンな各種言語の機能
  • アセンブラ・C言語との連携も可能

最近の動向

活発に低レイヤー向けのサポートが追加されている

  • Embedded Devices ワーキンググループの発足
    • ドキュメント・ライブラリが充実しつつある
    • @japaric氏が中心
  • コンパイラターゲットの追加
    • Arm、RISC-V、UEFIアプリケーションなど
    • stableでもコンパイル可能
  • cargoのサポート
    • xargoはメンテナンスモードに

Rust低レイヤープログラミング入門

実際のプロダクト

  • Tock
    • Cortex-M向けの組込みOS
    • nightlyでビルドできる
  • Redox
    • デスクトップOS
    • Rustコンパイラそのものに手を加えている
  • Firecracker
    • Amazon製のVMM

注意点

  • 基本的にstdライブラリは使えない
    • BoxとかArcが使えない!
    • Cellなどcoreライブラリは使える
    • 所有権の管理を考えた設計が必要
  • 生のポインタの参照外し、グローバル変数の変更はunsafe
    • 多用するとRustで書く意義が薄れる
    • 抽象化を適切にしてunsafeの範囲を限定したい

触ってみての感想

  • Rustで低レイヤープログラミングは良さそう
  • 設計は工夫しないと厳しい気持ちになる
  • 更新が早いので最新情報は常にチェックしたい