1. はじめに
この本は、Rustで組込み / ベアメタルプログラミングするための小技を集めたものです。OSにホストされた環境でプログラミングするだけでも、Rustには特有の複雑さがあります。その複雑さは、コンパイル時に型安全性、メモリ安全性、スレッド安全性を保証するための対価です。私は (そして多くのRustaceanが) 、その対価を妥当なものと考え、Rustでのプログラミングを楽しんでいます。
Rustを組込み / ベアメタル環境で使おうとすると、上述した複雑さに加えて、特別な知識が求められます。この本は、私が知る限りの特別な知識を詰め込んだクックブックです。
この本の内容は、Rust Embedded devices Working Groupが発行している組込みRustドキュメントの内容を数多く含んでいます。本書に含まれる内容の多くは、私が独自に考えたものではなく、Web上に公開されているドキュメントをテクニック集としてまとめ直したものです。WGは多くのドキュメントを公開してくれています。この本で不足する内容は、ぜひWGのドキュメントを探して見て下さい。
本書内で出典を表す際、和訳文書がある場合は、和訳文書へのリンクを示しています。これは日本人の読者を想定しているからであり、本家文書を軽視しているわけではないことを、ご了承下さい。
本書は、クックブックとして、各項目を独立して読めるようにしています。前から順番に読む、というよりは、必要や興味に応じて、辞書のようにお使い下さい。また、本書内では同じ情報がやや重複して書かれている部分もあります。これは、手抜きという一面もありますが、欲しいところに必要な情報が記載されているようにするためです。
1-1. 紙媒体で読んでいる方へ
この本は、Rust製のドキュメントビルダーmdbookで作成しています。mdbookは、htmlが一番読みやすい形式ですので、ぜひhtml形式でも読んでみて下さい。紙媒体を購入された方は、html形式の本書をダウンロードできます。参考文献へのリンクは、html形式の媒体から簡単にアクセスできます。そのため、本文内でのURL掲載は省略しています。
1-2. サンプルコードの実行
html形式で本書を読んでいる場合、掲載しているいくつかのコードは、実行して、結果を確認することができます。Rust Playpenにコードを送信して実行しますので、インターネット接続が必要です。下記コードのコードブロック右上に見えている実行ボタン (▶) をクリックすると、コンソール出力結果が確認可能です。
fn main() { println!("{}", "hello"); }
また、コードブロック右上に、時計マークのUndo changesアイコンがある場合は、コードを編集して実行することができます。上記コードのhelloを、hello worldに変更して、実行してみて下さい。
1-3. スコープ
本書には、次のトピックが含まれます。
- 組込みRust環境構築
- ベアメタル固有のプログラミングテクニック
- ツール
- ライブラリ / フレームワーク
- FFI (C言語との相互呼び出し)
- 組込みLinux
提供するシステムコマンドは、Ubuntu 18.04を想定しています。他のOSをご利用の方は、お手数ですが読み替えをお願いします。
1-4. 想定読者
下記トピックに興味があり、いずれかの項目について、ある程度開発経験がある方を想定しています。
- Rust
- 組込み / マイクロコントローラ
- 低レイヤ / ベアメタルプログラミング
1-5. 本書に含まれない内容
- なぜRustで組込みなのか?
- Rustの基礎的な文法 / イディオム
- リンカスクリプトなど低レイヤ知識の基礎事項
- クロスコンパイルの概念
- メモリマップ方式のペリフェラル制御
なぜRustで組込みなのか?は、詳しくは書きません。実行速度が速く、バイナリも小さく、安全で、生産性が高い、というのが簡単な回答です。
1-6. 参考文献
本書に含まれない内容について学習したい場合に、参考となる書籍を紹介します。
- The Rust Programming Language (TRPL)
- プログラミングRust
- 実践Rust入門
- プログラミング言語Rust 公式ガイド
- Rustの日本語ドキュメント