書店員向け情報 HELP
プログラミング言語Rust入門~実行スピードとメモリの安全性を同時に満たすシステム開発言語~
- 書店発売日
- 2020年3月26日
- 登録日
- 2020年3月24日
- 最終更新日
- 2020年3月25日
紹介
Rustは、Firefoxの開発元であるMozillaが支援するオープンソースのプログラミング言語です。2017年末に公開されたFirefox のレンダリングエンジンの記述に使用され、その実行速度を2倍にしたことで有名になりました。オブジェクト指向と関数型の言語特徴を持ち、JavaやC#のようにVM(Virtual Machine)上の動作ではないため、既存のC言語のライブラリを直接扱える利点を持っています。またRustは、CやC++で発生しうる不正メモリアクセスに関する問題を,ある程度回避できるように設計されています。
Rustはまだ新しい言語なので、本書の前半は実務に必要な詳しい文法を解説しています。文法や具体例などは、簡単なRustのコードを動かして確認しながら説明を進めています。後半は、具体的な利用法(Web API呼び出し、データベースアクセスなど)を中心に説明し、すでに他の言語(C++やC#、Javaなど)で同様にプログラミングをしたことのある読者を対象としています。
目次
はじめに
第1章 Rustの特徴
1.1 なぜRustなのか
1.2 高いパフォーマンス
1.3 型安全性
1.4 ビルドシステム
1.5 モダンな文法
第2章 環境構築
2.1 Rustのインストール
2.1.1 Linux とmacOSへのインストール
2.1.2 Windowsへのインストール
2.1.3 Windows for Linuxへのインストール
2.1.4 Visual Studio Codeの利用
2.1.5 rustupの利用
2.2 Hello Worldプログラム
2.2.1 cargo new
2.2.2 cargo の構造
2.2.3 cargo build
2.2.4 cargo run
2.2.5 rustc の利用
第3章 基本的な型、変数の扱い、束縛
3.1 型の宣言
3.1.1 数値の型
3.1.2 数値の型
3.1.3 リテラル
3.1.4 浮動小数点数
3.1.5 論理値型
3.1.6 文字型
3.1.7 文字列
3.2 複合型
3.2.1 タプル型
3.2.2 配列型
3.3 参照と借用
3.3.1 所有権の移動
3.3.2 借用
3.4 束縛
3.4.1 束縛と可変変数
3.4.2 シャドーイング
3.5 スコープ
3.5.1 ブロック単位
3.5.2 関数単位
3.5.3 構造体単位
3.5.4 クロージャ単位
第4章 文字列
4.1 文字
4.1.1 文字を扱う
4.1.2 特殊文字
4.1.3 u8型へのキャスト
4.2 文字列
4.2.1 文字列の扱い
4.2.2 アルファベットの操作
4.2.3 日本語の扱い
4.2.4 日本語を正しく扱う
4.3 文字列スライス
4.3.1 先頭を切り出すスライス
4.3.2 途中の文字列を切り出すスライス
4.3.3 最後までを切り出すスライス
4.3.4 全体を切り出すスライス
第5章 文と式と関数
5.1 文と式
5.1.1 文
5.1.2 式
5.2 演算子
5.2.1 四則演算子
5.2.2 代入演算子
5.2.3 ビット演算子
5.2.4 シフト演算子
5.2.5 論理演算子
5.2.6 単項演算子
5.3 関数
5.3.1 引数のない関数
5.3.2 引数のある関数
5.3.3 戻り値のある関数
5.3.4 文字列を受け取る関数
5.3.5 文字列を戻す関数
5.3.6 ベクターを受け取る関数
5.3.7 ベクターを戻す関数
5.3.8 ベクターの中身を変更する関数
第6章 制御文とパターンマッチ
6.1 分岐
6.1.1 条件にマッチしたときに実行
6.1.2 条件にマッチしないときに実行
6.1.3 複数のif文を重ねる
6.1.4 if文に論理和/ 積を使う
6.1.5 関数の戻り値を直接参照
6.1.6 if文で値を返す
6.2 繰り返し
6.2.1 for文で全ての要素に繰り返す
6.2.2 for文でイテレーターを利用する
6.2.3 for文をインデックス付きで繰り返す
6.2.4 for文で繰り返し数を指定する
6.2.5 繰り返しを途中で止める
6.2.6 繰り返しの途中で先頭に戻る
6.2.7 while文で継続条件を指定する
6.2.8 loop文で無限に繰り返す
6.3 パターンマッチ
6.3.1 enumで列挙型を定義する
6.3.2 列挙型をmatchで使う
6.3.3 オプション型をmatchで扱う
6.3.4 matchを「if let」で置き換える
6.3.5 enum以外でmatchを使う
第7章 配列とベクター
7.1 配列
7.1.1 固定配列を定義
7.1.2 文字列の配列を定義
7.1.3 配列の型を指定する
7.1.4 配列を初期化、変更する
7.1.5 配列を数値型に強制キャストする
7.2 ベクター
7.2.1 ベクターを定義する
7.2.2 ベクターの要素を増減させる
7.2.3 ベクターの要素を参照する
7.2.4 ベクターの要素を削除する
7.2.5 指定位置に要素を追加する
7.2.6 複数のベクターを連結する
7.2.7 連結文字を指定してベクターを連結する
7.2.8 分割文字を指定しベクターを作成する
7.2.9 ベクターを辞書順にソートする
7.3 イテレーター
7.3.1 for文でイテレーターを使う
7.3.2 iterメソッドとnextメソッドを使う
7.3.3 loop文とwhile文でイテレーターを扱う
7.3.4 イテレーターとmapを活用する
第8章 構造体とメソッド
8.1 構造体
8.1.1 構造体の定義
8.1.2 構造体のインスタンス化
8.1.3 構造体のフィールドを参照
8.1.4 構造体を引数にとる関数
8.1.5 構造体を戻り値にする関数
8.1.6 ベクターで構造体を扱う
8.1.7 フィールド名のない構造体を扱う
8.1.8 構造体のサイズを調べる
8.2 メソッド
8.2.1 引数のないメソッドを定義
8.2.2 引数のあるメソッドを定義
8.2.3 戻り値のあるメソッドを定義
8.2.4 フィールドを変更するメソッド
8.2.5 newメソッドを定義する
8.3 Result型
8.3.1 Result型の定義
8.3.2 str::parseの戻り値を探る
8.3.3 Result型を返す関数を作る
8.3.4 Result型のエイリアスを作る
8.3.5 コンピネーターでmatch文を減らす
8.3.6 エラー委譲でmatch 文を減らす
8.3.7 独自のResult 型を返す
8.3.8 exceptメソッドを使う
8.3.9 main関数でResult 型を返す
第9章 ジェネリクスとトレイト
9.1 ジェネリクス
9.1.1 ベクターはジェネリクスである
9.1.2 ジェネリックを使わないで関数を作る
9.1.3 ジェネリックを使って関数を作る
9.2 トレイト
9.2.1 構造体の動作をルール化する
9.2.2 メソッド名を統一する
9.2.3 デフォルトメソッドを追加する
9.2.4 既存の構造体を拡張する
第10章 所有権
10.1 所有権の概念
10.1.1 所有権という概念
10.1.2 構造体のインスタンスを借用する
10.1.3 構造体のインスタンスを移動する
10.1.4 変数を借用する
10.1.5 変数を移動する
10.1.6 可変変数を関数に参照で渡す
10.1.7 可変変数を扱うときの注意
10.1.8 数値とタプルの場合
10.1.9 ベクターと文字列の場合
10.1.10 複数の変数で所有権を奪い合う例
10.2 所有権の利点
10.2.1 有効範囲を明確にする
10.2.2 関数でインスタンスを返す
10.2.3 可変変数のアクセス制限
第11章 パッケージの作成
11.1 公開ライブラリを利用する
11.1.1 crates.io
11.1.2 randクレートのドキュメント
11.1.3 randクレートを利用する
11.2 公開バイナリを利用する
11.2.1 バイナリのインストール
11.2.2 バイナリの実行
11.3 パッケージを作成する
11.3.1 ライブラリのプロジェクトを作成
11.3.2 ライブラリを動作させる
11.3.3 ライブラリの出力場所
第12章 ファイル入出力
12.1 ファイル読み込み
12.1.1 スコープの指定
12.1.2 ファイルを全て読み込む
12.1.3 ファイルの読み込みエラーに備える
12.1.4 ファイルをオープンして読み込む
12.1.5 ファイルアクセス時のResultをチェックする
12.1.6 バイト単位で読み込む
12.1.7 行単位で読み込む
12.1.8 main関数でファイルを読み込む
12.2 ファイル書き出し
12.2.1 write!マクロで書き出す
12.2.2 writeメソッドで書き出す
12.2.3 バイト配列で書き出す
12.2.4 バイト単位で書き出す
12.2.5 main 関数でファイルに書き出す
12.3 標準入出力の利用
12.3.1 標準入力と標準出力
12.3.2 標準入出力の準備
12.3.3 ファイルから読み込み
12.3.4 標準入力から読み込み
12.3.5 標準出力へ書き出し
第13章 マクロ
13.1 println!マクロ
13.1.1 関数とマクロの区別
13.1.2 println!マクロのプレースホルダー
13.1.3 複数のプレースホルダー
13.1.4 整数の進数表現
13.1.5 整数の0埋め
13.1.6 実数の指数表現と有効桁数
13.1.7 数値や文字列の配置指定
13.2 dbg!マクロ
13.2.1 配列の内容を表示する
13.2.2 構造体にDebugトレイトを適用する
13.2.3 dbg!マクロのフォーマッタを実装する
13.3 panic!マクロ
13.3.1 main 関数でpanic!マクロを使う
13.3.2 panic!マクロの利用例
13.3.3 panic!マクロのトレースの利用
第14章 Web API呼び出し
14.1 HTTPプロトコル
14.1.1 reqwestクレート利用の準備
14.1.2 URLアドレスの呼び出し
14.1.3 URLクエリ文字列で呼び出し
14.1.4 目的のページが見つからない場合
14.1.5 指定したWebサーバーが見つからない場合
14.2 GETとPOSTメソッド
14.2.1 HTTPプロトコルのヘッダー部
14.2.2 GETメソッドの詳細
14.2.3 POSTメソッドの詳細
14.3 JSON形式
14.3.1 serde_jsonクレート利用の準備
14.3.2 JSON型式データをテキストとして受信する
14.3.3 JSON型式データから値を取り出す
第15章 データベースアクセス
15.1 SQLiteの読み込み
15.1.1 データベースの使い方
15.1.2 rusqliteクレートの準備
15.1.3 インメモリデータベースの利用
15.1.4 複数のSQL文を実行する
15.1.5 設定する値をパラメーターで渡す
15.1.6 SELECT文でデータを取得する
15.1.7 SELECT文でデータをquery_mapで取得する
15.1.8 SELECT文で検索条件を指定する
15.2 データの保存
15.2.1 データベースファイルを作成する
15.2.2 テーブルを作成する
15.2.3 データを挿入する
15.2.4 データを検索する
15.3 複雑なSQL
15.3.1 サンプルとなるテーブル例
15.3.2 chronoクレートの準備
15.3.3 テーブルを結合して表示する
15.3.4 データをソートして表示する
15.3.5 データを集計して表示する
15.4 ORMの利用
15.4.1 dieselクレートの準備
15.4.2 マッピングする構造体の定義
15.4.3 ORMでデータを取得する
第16章 C言語ライブラリの呼び出し
16.1 既存のC言語ライブラリとの連携
16.1.1 C言語ライブラリとの相互運用
16.1.2 C言語ライブラリの準備
16.1.3 C言語のソースコード
16.1.4 C言語のコードをビルド
16.1.5 C言語ライブラリの呼び出し
16.1.6 ビルドして実行
16.2 C 言語からRustの関数を呼び出す
16.2.1 Rustライブラリの準備
16.2.2 Rustライブラリのコード
16.2.3 Rustを呼び出すC 言語のコード
16.2.4 ビルドして実行
16.3 既存ライブラリで文字列の受け渡し
16.3.1 文字列を渡す関数の宣言
16.3.2 NULL終端の文字列
16.3.3 ビルドして実行
第17章 クロージャ
17.1 クロージャの利用
17.1.1 イテレーター処理
17.1.2 mapとクロージャ
17.1.3 filterとクロージャ
17.1.4 findとクロージャ
17.1.5 maxとmin
17.1.6 2 つの配列を合わせる
17.2 クロージャの定義
17.2.1 クロージャの引数
17.2.2 クロージャの戻り値
17.2.3 クロージャとmap
17.3 クロージャの受け渡し
17.3.1 数値とクロージャを受け取る関数
17.3.2 ベクターとクロージャを受け取る関数
第18章 並列化
18.1 スレッドの活用
18.1.1 プロセスとスレッドの違い
18.1.2 単純なスレッドの実行
18.1.3 スレッドの終了を待つ
18.1.4 複数のスレッドの終了を待つ
18.1.5 スレッド処理のクロージャを別定義する
18.1.6 スレッド処理を関数定義する
18.2 async/awaitの活用
18.2.1 スレッドを順番に実行する
18.2.2 async/awaitで順番に実行する
18.2.3 tokio クレートを利用する
18.3 スレッドと所有権
18.3.1 スレッドプールの利用
18.3.2 所有権の移動
18.3.3 moveの利用
18.3.4 moveした変数を変更する
第19章 テストコード
19.1 単体テスト
19.1.1 テストプロジェクトを作る
19.1.2 関数をテストする
19.1.3 テストメソッドを増やす
19.1.4 関数とテストメソッドを増やす
19.2 テストコードの記述
19.2.1 値を比較する
19.2.2 値が異なる
19.2.3 構造体を比較する
19.2.4 真偽をチェックする
19.3 テストコードの実行
19.3.1 変数チェックの埋め込み
19.3.2 テストコードの埋め込み
付録A Rustのメモリ配置を調べる
A.1 変数のポインタを扱う
A.2 変数の移動(move)をポインタで確認する
A.3 変数の借用(borrow)をポインタで確認する
A.4 数値の変数はコピーされる
付録B Rustの型を調べる
B.1 コンパイルエラーを利用する
B.2 std::any::type_name を利用する
B.3 いろいろな型を調べる
索引
b_
上記内容は本書刊行時のものです。