実践Rustプログラミング入門
初田 直也, 山口 聖弘, 吉川 哲史, 豊田 優貴, 松本 健太郎, 原 将己, 中村 謙弘 著
著者紹介
内容
目次
■Part 1 入門 ■Chapter1 プログラミング言語 Rust ●1-1 Rust の魅力 ●1-2 とにかく実行速度が速い Rust は機械語に直接コンパイルされる ガベージコレクションをもたない 「ゼロコスト抽象化」を追求している ●1-3 モダンな言語機能が一通り入っている 不変・可変を明示的に制御できる filter, map などを使ってコレクションを操作できる 代数的データ型とパターンマッチング 強力な型推論 トレイト ●1-4 OS から Web アプリケーションまで幅広く実装できる ●1-5 ツール群がとても充実している Cargo エディタサポート 標準フォーマッタ rustfmt、標準リンター clippy ●1-6 「安全性」が強力に担保されている ●1-7 エディションという考え方によって互換性を担保している ●1-8 Rust の利用事例 ■Chapter2 環境構築 ●2-1 Webサイトで試せるRust - The Rust Playground ●2-2 開発環境を構築する rustupをインストール 動作確認 cc エディタ Rust Language Server(rls) rust-analyzer cargo-edit リリーストレインモデル:nightly, beta, stable ●2-3 まとめ ■Chapter3 Rustの基本 ●3-1 基本的な文法 基本的な型 変数宣言 制御構文 関数 マクロ ●3-2 Rustを支える言語機能 ゼロコスト抽象化 所有権と借用 スレッド安全性 非同期処理 ●3-3 クレートとモジュール 入門 クレート 入門 モジュール ●3-4 Cargo - ビルドシステム・パッケージマネージャ サブコマンド Cargo.toml ●3-5 テスト assertマクロ パニックを発生させるテスト 普段は無視するテスト testsモジュール testsディレクトリ ドキュメントのテスト ■Part 2 実践 ■Chapter4 プログラムを作成する ●4-1 プロジェクトの準備 アプリケーションの仕様 プロジェクトの作成 コマンドライン引数の処理 ●4-2 計算ロジックを追加する アプリケーションの枠組みの作成 逆ポーランド記法の計算ロジックの作成 ●4-3 テストを書く ●4-4 エラーハンドリングを追加する エラーをハンドリングしない実装 Resultでエラーを受け取る 独自のエラーを定義する エラー処理クレートを使う 逆ポーランド記法計算機へのanyhowの適用 ●4-5 ファイルパスの表現について ●4-6 実行パスへのインストール ●4-7 まとめ ■Chapter5 Webアプリケーションの開発 ●5-1 Webフレームワークのセットアップ Hello world! エラーハンドリングの定義 ●5-2 テンプレートエンジン Web アプリの設計 HTML テンプレート HTML の表示 ●5-3 データベース テーブルの設計 SQLite に Rust でアクセスする サーバーアプリケーションでアクセスする ●5-4 Todo アプリを仕上げる POST リクエストを受け取る ●5-5 Docker イメージの作成 Dockerfile の作成 イメージビルドの高速化 イメージサイズの削減 ●5-6 まとめ ■Chapter6 WebAssembly ●6-1 WebAssemblyとは ●6-2 開発の準備 npm cargo-generate wasm-pack ●6-3 サンプルプログラム:マンデルブロ集合を描く マンデルブロ集合とは マンデルブロ集合を計算するプログラム wasmを呼び出すJavaScriptの実装 JavaScriptから呼び出せるようにする JavaScriptとの速度比較 ●6-4 サンプルプログラム:ナンバープレースを解く ナンバープレースとは ナンバープレースを解くプログラム Rustの実装 JavaScript側の実装 ●6-5 まとめ ■Chapter7 GUIアプリケーション ●7-1 RustにおけるGUIの現状 GUIクレートの紹介 IcedによるGUIの実装 ●7-2 ウィンドウ プロジェクトディレクトリの準備 アプリケーション基盤の作成 main関数からの実行 ●7-3 ウィジェット ウィジェットの配置 フォントの使用 ウィンドウのサイズ変更 ●7-4 メッセージ メッセージと状態変数の定義 メッセージの送信 メッセージの受信 ●7-5 サブスクリプション レシピの作成 サブスクリプションの作成 メッセージの受信 時間の表示 完成 ■Chapter8 組み込みシステム ●8-1 環境構築 ターゲットとするプラットフォームについて クロスコンパイルの環境構築 QEMU ●8-2 Hello, world! ●8-3 Lチカ LEDの操作方法 Peripheralsの取得 Peripheralsの有効化 GPIOの取得 LEDの操作 ウェイトを入れる Lチカのプログラム ●8-4 embedded-hal 単一のPeripherals クロックの凍結 型制約されたピン設定 その他のデバイス ●8-5 組み込み向けクレート alloc heapless パニックハンドラ cortex-m-rtic ●8-6 参考資料 ■Chapter9 開発ツール ●9-1 実践Cargo プロジェクトのディレクトリ構成 フィーチャ 依存クレートの修正 ワークスペース サブコマンド ●9-2 フォーマッタ・リンター rustfmt clippy ●9-3 コードカバレッジ cargo-tarpaulin ●9-4 ベンチマーク・プロファイラ cargo bench criterion cargo-profiler flamegraph hyperfine ●9-5 CI Travis CI GitHub Actions ■Chapter10 プロダクトをリリースする ●10-1 シングルバイナリ ●10-2 ビルドの再現性 Cargo.lock rust-toolchain ●10-3 バイナリサイズの最適化 最適化のオプション サイズ比較 ●10-4 Profile-Guided Optimization 実行方法 ●10-5 クレートの信頼性 rustsec.org cargo-audit cargo-crev ●10-6 ファジング cargo-fuzz ●10-7 プライベートなクレート cargo publishを禁止する 代替レジストリ ■Part 3 Tips ■Chapter11 いろいろなRustの発展的Tips ●11-1 マクロ 宣言的マクロ 手続きマクロ 関数的マクロ deriveマクロ アトリビュートマクロ ●11-2 FFIによる他言語との連携 サンプル:RustからC言語の関数を呼ぶ サンプル:RubyからRustの関数を呼ぶ FFIを使う上での注意点 その他のバインディングを作るクレート まとめ ●11-3 パニック 自己診断としてのパニック パニックとResultの使い分け パニックが起こるとどうなるか パニックを捕捉する 巻き戻しが起こらない場合 パニックハンドラを置き換える パニックとポイズニング パニックのまとめ ●11-4 unsafe UB (未定義動作) 安全性と健全性 unsafeアンチパターン 契約で理解するunsafe unsafeの2つの使い方 妥当性不変条件と即時UB unsafeをできるだけ安全に使うために valgrind デバッガを使う サニタイザ 参考資料 unsafeのまとめ ●11-5 Rust のエディション エディションとは何か? エディションの歴史 今後予定されているエディション エディション間の互換性について Cargo でのエディションの設定方法 ●11-6 Rust製のOSS ripgrep Alacritty Rust製のOSSでよく使われるライセンス cargo-license ●11-7 Rust のコミュニティ Rust のコミュニティについて Rust 商標ポリシーについて 最新情報を得るために 日本のコミュニティの現状 ●11-8 Rust と競技プログラミング ●11-9 Rustを仕事で使う 業務で使われている例 自社の業務にRustを取り入れるためのヒント まとめ 索 引 ■Column 目 次 機械語とは何か ゼロコスト抽象化 関数型プログラミング言語 Rust? ビルトインマクロ PartialEqとPartialOrd 2015エディションのモジュールシステム Rust の文字列型 Rust におけるasync/await と非同期ランタイム Webフレームワーク 汎用 SQL ライブラリ: diesel Rust とサーバーレスアプリケーション Rust と Prometheus wasm-bindgen web-sys Tierについて xargoとstd Aware Cargo cross によるクロスコンパイル svd2rust RustとOS バイナリにリビジョンを埋め込む 清潔なマクロ 2015エディションのマクロと名前解決
カート
カートに商品は入っていません。