C++でできる!OS自作入門
- ¥ 660
この同人誌は OS を書いてみたいと思っている方に、記述言語として C++ を選んでもらうための本です。 世にある自作 OS の本は C 言語で書いてあるものが多いですが、機能が豊富な C++ も有力な選択肢であることをお伝えするのが目標です。 メインの部分は第 3 章「C++ のコア機能の活用」です。 C++ は 2003 年に出た規格からしばらく新規格が出てきませんでしたが、2011 に出た C++11 を皮切りに新機能がどんどん導入されています。 現時点の最新規格 C++17 までに導入された機能のうち、私が OS を書く際に便利だと思う機能を紹介しています。 OS を作ることを念頭にトピックを選んでいますが、その中の半分くらいの機能は自作 OS 以外でも通じるものです。 したがって、これから C++ を学ぶという方の「C++ 学習の到達指標」としても本書を活用していただけます。 本書の内容が理解できれば C++ をそれなりに使いこなせていると思ってよいでしょう。 次に重要な章は第 2 章「C++ の開発環境」です。 この章では OS 開発に C++ を使う際に押さえておきたい「標準ライブラリ」の話題を扱っています。 C++ は言語組み込みの機能だけでも使うことができますが、標準ライブラリが使えるようになると非常に便利になります。 残念ながら標準ライブラリの多くの部分は OS の作成時には使いにくくなってしまっていますが(例えば動的メモリ管理が必要なライブラリは素直には使えない)、 フリースタンディング環境で使えるライブラリだけでも使えるようにしたいものです。 第 2 章では標準 C ライブラリ newlib と標準 C++ ライブラリ libc++ のビルド方法を紹介しています。
目次
- 第 1 章 はじめに - OS 記述言語としての C++ - その他の言語による OS 開発 - Rust と C++ の比較 - 第 2 章 C++ の開発環境 - コンパイラとリンカ - アセンブラ - 標準ライブラリ - 標準ライブラリのビルド - 標準ライブラリの使用 - newlib のスタブ - 第 3 章 C++ のコア機能の活用 - ビット幅指定の整数型 - 名前空間 - カスタム new/delete - 配置 new - 継承と vtable - ユニットテスト - if の条件部における変数定義 - auto による型推論 - 一様初期化 - 範囲 for - テンプレートを使ったデータ構造 - レジスタ読み書きクラス - 関数のオーバーロード - エラー報告構造体 - ラムダ式 - キャストの使い分け - RAII とスコープガード - 定数式 - 第 4 章 C++ の落とし穴 - キャストするとアドレス値が変化する!? - ヌルポインタの内部表現は 0 とは限らない - return を忘れた際の GCC と Clang の差