内容紹介
安全なプログラミング言語
通常のプログラミング言語では、変数やメモリの保護はプログラマーの責任で行います。この際の配慮不足があったとしても、コンパイルして実行できるプログラムはできてしまいます。その結果は、バグやセキュリティホールにつながるので、プログラマーも強い責任感でのプログラミングが必要です。本書で解説するRust言語は、後発なだけいろいろ考えられており、構文そのものが配慮不足になりにくいしくみであり、また不良なソースコードはコンパイルできません。つまり安全なプログラムを記述しなければコンパイルできないというユニークな特長を持ちます。
本書は、C言語やオブジェクト指向言語の知識が若干必要になりますが、少ない行数のシンプルな例題で構成し、平易な解説を心がけています。Rust独自の世界もありますが、使用する用語は、これまでの概念に近いものを選んでいます。UTF-8ベースですので、半角文字に加え、日本語文字の扱いも解説しています(UTF-8では、日本語漢字などは3バイト等で表されます)。
各例題は、Windows10およびMacで動作確認をしています。
・例題の例:第3章6節 scope3.rs
fn main() {
let mut x: i32 = 10;
// 関数の呼び出し
func(x);
x = x / 2;
println!("main: x = {}", x);
}
fn func(mut x: i32) {
x = x * 2;
println!("func: x = {}", x);
}
・例題の出力ログ:
$ rustc scope3.rs
$ ./scope3
func: x = 20
main: x = 5
以上、本書が、読者諸兄のRustの使いこなしの一助になることを願います。
目次
主要目次
第1章 Rust言語
第2章 準備
第3章 Rustの基本
第4章 Rustの最初の難関
第5章 所有権システム
第6章 もっとRustを学ぶ
詳細目次
第1章 Rust言語
1.1 機械語と高水準言語
1.1.1 コンパイラとインタプリタ
1.2 コンパイルの仕組み
1.2.1 字句解析
1.2.2 構文解析
1.2.3 コード生成
1.3 用途によるプログラミング言語の分類
1.3.1 システムプログラミング言語
1.4 Rustについて
1.4.1 Rustはオープンソース
1.4.2 型安全なプログラミング言語
1.4.3 メモリの安全性
1.4.4 信頼できる並列性
1.4.5 なぜRustなのか?
第2章 準備
2.1 macOSでのRust開発環境の構築
2.1.1 Rustのインストール
2.1.2 環境変数の設定
2.1.3 最新版へのアップデート
2.2 WindowsでのRust開発環境の構築
2.2.1 Rustをインストールする前の準備
2.2.2 Rustのインストール
2.2.3 最新版へのアップデート
2.3 動作確認
2.3.1 RustでHello world
2.3.2 ソースコードのコンパイル(rustcコマンド)
2.3.3 プログラムの実行
2.3.4 ソースコード内のコメント
3 Rustの基本
3.1 変数
3.1.1 変数束縛
3.1.2 可変変数の宣言(mutキーワード)
3.1.3 定数(constキーワード)
3.1.4 整数の演算
3.2 型
3.2.1 整数
3.2.2 浮動小数点数(f32とf64キーワード)
3.2.3 ブール型(boolキーワード)
3.2.4 文字(charキーワード)
3.2.5 タプル
3.3 条件分岐
3.3.1 if分岐構造
3.3.2 if-else分岐構造
3.3.3 if-elseif-else分岐構造
3.4 繰り返し処理
3.4.1 forループ構造
3.4.2 ネストループ構造
3.4.3 whileループ構造
3.4.4 無限ループ
3.5 関数
3.5.1 関数の基本
3.5.2 引数
3.5.3 戻り値
3.5.4 再帰関数
3.6 変数のスコープとグローバル変数
3.6.1 変数のスコープ
3.6.2 静的変数(staticキーワード)
3.6.3 静的可変変数(mutキーワード)
3.7 マクロ
3.7.1 ユーザ定義のマクロ
3.8 その他の基本文法
3.8.1 println!マクロの使い方 その1
3.8.2 println!マクロの使い方 その2
3.8.3 プリミティブ型のメソッド構文
3.9 まとめ
3.9.1 演算子
3.9.2 プリミティブ型
3.9.3 基本的な用語
第4章 Rustの最初の難関
4.1 プログラムの動作原理とメモリの使われ方
4.1.1 仮想アドレス空間
4.1.2 メモリ領域の分類
4.2 ポインタ
4.2.1 生ポインタ
4.2.2 生ポインタの宣言
4.2.3 生ポインタが指す値の変更
4.2.4 可変ポインタ
4.2.5 参照型(Box型)
4.2.6 文字列
4.3 配列
4.3.1 配列の基本
4.3.2 配列の型と大きさ
4.3.3 配列の初期化
4.3.4 2 次元配列
4.3.5 配列と文字列
4.4 構造体
4.4.1 構造体の基本
4.4.2 構造体のメソッド実装
4.4.3 構造体の静的メソッド
4.5 ベクタ型
4.5.1 ベクタ型の基本
4.5.2 ベクタ型用のマクロ
4.6 String 型
4.6.1 String 型の基本
4.6.2 文字列の結合
4.7 スライス
4.7.1 配列とスライス
4.7.2 String 型とスライス
第5章 所有権システム
5.1 メモリ管理における問題
5.1.1 ダングリングポインタ
5.1.2 メモリの多重解放
5.1.3 初期化されていないメモリへのアクセス
5.2 所有権と所有構造
5.2.1 所有とは
5.2.2 所有権のドロップ
5.2.3 所有構造
5.2.4 所有構造は木構造
5.3 所有権の移動
5.3.1 移動の概念
5.3.2 所有権の移動の例
5.3.3 所有権の移動によるエラー
5.3.4 関数使用時の所有権の移動
5.3.5 関数使用時の所有権移動によるエラー
5.3.6 所有権システム vs ガベージコレクション
5.3.7 コピー型
5.4 参照の借用
5.4.1 借用の基本
5.4.2 移動と借用の違い
5.4.3 借用が必要な例
5.4.4 メモリ管理と借用
5.4.5 所有権を移動したときのオブジェクトのドロップ
5.4.6 借用したときのオブジェクトのドロップ
5.5 可変参照の借用
5.5.1 可変参照の借用の基本
5.5.2 可変参照の借用を用いた関数例
5.5.3 コピー型の可変参照の借用
5.5.4 可変借用を用いたアルゴリズムの例
5.5.5 共有参照と可変参照
5.6 借用と生存期間
5.6.1 生存期間の基本
5.6.2 構造体メンバの生存期間
5.6.3 構造体メソッドにおける生存期間パラメータ
5.6.4 staticな生存期間
第6章 もっとRustを学ぶ
6.1 キャスト
6.1.1 キャストの例
6.1.2 数値から文字列へキャスト
6.1.3 文字列から数値へキャスト
6.2 標準入出力
6.2.1 標準入力の基本
6.2.2 入力した文字列の解析
6.2.3 環境変数
6.3 ファイル入出力
6.3.1 ファイル入力の基本
6.3.2 ファイル出力の基本
6.3.3 バッファありファイル入力
6.3.4 バッファありファイル出力
6.3.5 ファイルへのアペンド
6.4 式
6.4.1 条件分岐と変数の初期化
6.4.2 if 式を用いた変数の初期化
6.4.3 ブロックによる値の生成
6.4.4 パターンマッチング
6.4.5 match 式を用いた変数の初期化
6.4.6 match 式を用いたエラーハンドリング
6.4.7 if-let 式による条件分岐
6.4.8 if-let 式による変数の初期化
6.5 トレイト
6.5.1 トレイトの定義
6.5.2 既存のトレイトの適用
6.5.3 トレイトを既存の型に適用
6.5.4 サブトレイト
6.5.5 デフォルトメソッド
6.6 列挙型
6.6.1 列挙型の定義
6.6.2 名前付き定数と整数へのキャスト
6.7 ジェネリクス
6.7.1 ジェネリクスの基本
6.7.2 ジェネリック関数(値の比較)
6.7.3 ジェネリック関数(数値の演算)
6.7.4 ジェネリック関数(絶対値の比較)
6.7.5 ジェネリック構造体
6.7.6 複数のジェネリック型を定義
6.7.7 ジェネリック構造体のジェネリックメソッド
6.8 最後に
COLUMN 「高水準と低水準」
COLUMN 「ログ2.1の補足」
COLUMN 「2、8、16進数の一般的な表記法」
COLUMN 「C言語でのダングリングポインタの例」
COLUMN 「C言語での多重解放の例」
COLUMN 「C言語での初期化されていないメモリへのアクセス例」
POINT 「リンクエラーの対処」
POINT 文と式
続きを見る