関連サイト
本書の関連ページが用意されています。
内容紹介
◆プログラミング言語Rustの基本を理解する
「Rustプログラミング言語は、エンパワーメント(empowerment)を根本原理としています: どんな種類のコードを現在書いているにせよ、Rustは幅広い領域で以前よりも遠くへ到達し、自信を持ってプログラムを組む力を与え(empower)ます。」(本書「まえがき」より)
システムレベルのプログラムからWebサーバーやコマンドラインアプリなど、さまざま分野に利用できるプログラミング言語として設計されているRust。本書はRustコミュニティ公式のガイドブックである。
基本的な文法事項から、Rustの中心的な機能である「所有権」の詳細、エラー処理や自動テストの方法、さらにはジェネリック型、スマートポインタ、関数型言語、並行プログラミング、オブジェクト指向の機能など、Rustプログラミングの肝となる要素のすべてを丁寧に解説する。
本書は、Rustの基本を理解する概念の章、Rustの機能を適用した小さなプログラムを構築するプロジェクトの章という2つで構成されている。それぞれを理解していけば、Rustを利用したプログラム開発にすぐに取りかかれるようになっている。
書誌情報
- 著者: Steve Klabnik, Carol Nichols(著), 尾崎亮太(訳)
- 発行日: 2019-06-28 (紙書籍版発行日: 2019-06-28)
- 最終更新日: 2019-06-28
- バージョン: 1.0.0
- ページ数: 608ページ(PDF版換算)
- 対応フォーマット: PDF, EPUB
- 出版社: アスキードワンゴ
対象読者
プログラミング言語Rustに興味のある方、利用されている方
著者について
Steve Klabnik
スティーブ・クラブニック(Steve Klabnik)は、Rust ドキュメンテーションチームのリーダーであり、Rust の核となる開発者の一人です。頻繁にスピーカーとなり、オープンソースプロジェクトの貢献者に頻繁になり、彼は、以前Ruby やRuby on Rails などのプロジェクトに参画していました。クラブニックは、Mozilla に勤務しています。
Carol Nichols
キャロル・ニコールズ(Carol Nichols)は、Rust コアチームのメンバーであり、世界で最初のRust に注目したコンサルタント会社であるInteger 32 という有限会社の共同設立者です。ニコールズは、Rust Belt Rust Conference(Rust 地帯のRust 会議)を管理しています。
尾崎亮太
大学で一応プログラミングを学んだが、同時期に独学でC++ を学び、コンパイラーに怒られる日々を送る。怒られるかもしれないが、Rust でまだまともなプログラムを書いたことはないので、そこら辺の知見はありません。
@train12_find
目次
導入
- Rustは誰のためのものなの
- この本は誰のためのものなの
- この本の使い方
- ソースコード
第1章 事始め
- インストール
- Hello,World!
- Hello,Cargo!
第2章 数当てゲームをプログラムする
- 新規プロジェクトの立ち上げ
- 予想を処理する
- 値を変数に保持する
- 秘密の数字を生成する
- 予想と秘密の数字を比較する
第3章 一般的なプログラミングの概念
- 変数と可変性
- データ型
- 関数
- コメント
- フロー制御
第4章 所有権を理解する
- 所有権とは?
- 参照と借用
- スライス型
第5章 構造体を使用して関係のあるデータを構造化する
- 構造体を定義し、インスタンス化する
- 構造体を使ったプログラム例
- メソッド記法
第6章 enumとパターンマッチング
- enumを定義する
- matchフロー制御演算子
- if letで簡潔なフロー制御
第7章 モジュールを使用してコードを体系化し、再利用する
- modとファイルシステム
- pubで公開するか制御する
- 異なるモジュールの名前を参照する
第8章 一般的なコレクション
- ベクターで一連の値を格納する
- 文字列でUTF–8でエンコードされたテキストを保持する
- ハッシュマップに値に紐付いたキーを格納する
第9章 エラー処理
- panic!で回復不能なエラー
- Resultで回復可能なエラー
- panic!すべきかするまいか
第10章 ジェネリック型、トレイト、ライフタイム
- 関数を抽出することで重複を取り除く
- ジェネリックなデータ型
- トレイト: 共通の振る舞いを定義する
- ライフタイムで参照を検証する
- ジェネリックな型引数、トレイト境界、ライフタイムを一度に
第11章 自動テストを書く
- テストの記述法
- テストの実行のされ方を制御する
- テストの体系化
第12章 入出力プロジェクト: コマンドラインプログラムを構築する
- コマンドライン引数を受け付ける
- ファイルを読み込む
- リファクタリングしてモジュール性とエラー処理を向上させる
- テスト駆動開発でライブラリーの機能を開発する
- 環境変数を取り扱う
- 標準出力ではなく標準エラーにエラーメッセージを書き込む
第13章 関数型言語の機能: イテレーターとクロージャー
- クロージャー: 環境をキャプチャーできる匿名関数
- 一連の要素をイテレーターで処理する
- 入出力プロジェクトを改善する
- パフォーマンス比較 :ループ vs.イテレーター
第14章 Cargoと crates.ioについてより詳しく
- リリースプロファイルでビルドをカスタマイズする
- crates.ioにクレートを公開する
- Cargoのワークスペース
- cargo installでcrates.ioからバイナリーをインストールする
- 独自のコマンドでCargoを拡張する
第15章 スマートポインター
- ヒープのデータを指すBox<T>を使用する
- Derefトレイトでスマートポインターを普通の参照のように扱う
- Dropトレイトで片付け時にコードを走らせる
- Rc<T>は、参照カウント方式のスマートポインター
- RefCell<T>と内部可変性パターン
- 循環参照してメモリーをリークすることもある
第16章 恐れるな! 並行性
- スレッドを使用してコードを同時に走らせる
- メッセージ受け渡しを使ってスレッド間でデータを転送する
- 状態共有並行性
- SyncとSendトレイトで拡張可能な並行性
第17章 Rustのオブジェクト指向プログラミング機能
- オブジェクト指向言語の特徴
- トレイトオブジェクトで異なる型の値を許容する
- オブジェクト指向デザインパターンを実装する
第18章 パターンとマッチング
- パターンが使用されることのある箇所全部
- 論駁可能性: パターンが合致しないかどうか
- パターン記法
第19章 高度な機能
- unsafeRust
- unsafeの強大な力 (superpower)
- 高度なライフタイム
- 高度なトレイト
- 高度な型
- 高度な関数とクロージャー
第20章 最後のプロジェクト: マルチスレッドのWebサーバーを構築する
- シングルスレッドのWebサーバーを構築する
- シングルスレッドサーバーをマルチスレッド化する
- 優美なシャットダウンと片付け