Effective Rust

―Rustコードを改善し、エコシステムを最大限に活用するための35項目

[cover photo]
TOPICS
Programming
発行年月日
PRINT LENGTH
304
ISBN
978-4-8144-0094-2
原書
Effective Rust
FORMAT
Print PDF EPUB
オンライン学習プラットフォーム
購読可
いますぐ読む
Ebook
3,740円
Ebookを購入する
Print
3,740円

Rustはいま最も勢いのある言語の1つ。特に、そのパフォーマンスの高さ、安全性、並行性から、C/C++に代わる言語として、システムプログラミングや低レイヤの開発では高く評価されています。Googleのソフトウェアエンジニアとして、さまざまなGoogleサービスのRust実装を担当してきた著者が、Rustへの深い理解と豊富な経験から得られた実用的なノウハウを共有。所有、借用、生存期間、トレイトといったRust特有の概念を具体例を示して詳しく説明するとともに、Cargoによる依存ライブラリ管理やClippyなどのエコシステムの活用方法を詳述しています。Rustの入門書を読了した読者に、「Rustらしい」プログラミング方法を伝授する一冊です。

正誤表

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

第1刷正誤表

2025年8月更新

■p.13 21行目
【誤】let amount_to_add = 3;
【正】let amount_to_add = 2;

■p.17 2行目
【誤】ポイント
【正】ポインタ

■p.22 5行目
【誤】
| ^^^^^^^^^^^^nnn
【正】
| ^^^^^^^^^^^^

■p.31 11行目
【誤】(format!("{:?", err)})
【正】(format!("{:?}", err))

■p.43 注22
【誤】https://oreil.ly/6_6MC
【正】https://serde.rs/remote-derive.html

■p.65 14行目
【誤】5要素
【正】5つの偶数の要素

■p.96 15行目
【誤】p /// Return the bounding rectangle that encompasses the object.
【正】 /// Return the bounding rectangle that encompasses the object.

■p.98 17行目
【誤】vtableは
【正】vtableには

■p.101 17-18行目
【誤】([項目13])がトレイト制約を利用して、Drawのbounds()メソッドが使えることに依存して書かれている。
【正】([項目13])を、トレイト制約によって、Drawのbounds()メソッドが使えることに依存して書いている。

■p.103 3行目
【誤】起動された
【正】起動される

■p.104 下から13行目
【誤】場合がある([項目19])が、有効な場合もある。このおかげで
【正】場合があるが([項目19])、有効な場合もある。型消去のおかげで

■p.104 下から10行目
【誤】リストの描画は、この良い例となる。
【正】リストの描画が、この良い例だ。

■p.105 7行目
【誤】使用者の便宜を図るには、
【正】使用者の便宜を図るために、

■p.106 下から2行目
【誤】習って
【正】ならって

■p.106 最終行
【誤】API境界
【正】API界面

■p.114 下から12行目
【誤】可変参照はまだスコープ内にあるが、`String`への可変参照を作ることが許される。
【正】可変参照はまだスコープ内にあるが、`String`への不変参照を作ることが許される。

■p.125 17行目
【誤】・C/C++のポインタや参照と同様に、
【正】・C/C++のポインタと同様に、

■p.145 10行目
【誤】allocライブラリには1,000箇所ぐらいcoreでは1,500箇所、
【正】allocライブラリには1,000箇所ぐらい、coreでは1,500箇所、

■p.151 1行目
【誤】mutable std::mutex mu_; protects balance_
【正】mutable std::mutex mu_; // protects balance_

■p.182 11行目
【誤】crates.ioで公開する
【正】crates.io(https://crates.io)で公開する

■p.195 注9
【誤】crate.io
【正】crates.io

■p.196 下から7行目
【誤】1つのバージョンしか許されない
【正】1つのバージョンしか許されない。

■p.203 下から10行目
【誤】高レート
【正】クレート

■p.207 12行目
【誤】ツールを導入に
【正】ツールの導入に

■p.218 12行目
【誤】受け付け内容にする方法だ。
【正】受け付けないようにする方法だ。

■p.218 13行目
【誤】indent
【正】ident

■p.226 下から4行目
【誤】Groupenum
【正】Group enum

■p.235 下から12行目
【誤】「推奨されるが必須ではない」
【正】「必須ではないものの推奨される」

■p.235 下から12行目
【誤】(イタリックに注意)
【正】(太字に注意)

■p.238 注13
【誤】)。でファズテストを
【正】)でファズテストを

■p.243 8行目
【誤】これには2Nの組み合わせが
【正】これには2^Nの組み合わせが

■p.251 注3
【誤】(sysrootクレート(https://oreil.ly/sJzAv\))。
【正】(sysrootクレート(https://oreil.ly/sJzAv))。

■p.255 4行目
【誤】定義されている
【正】定義されている。

■p.255 下から5行目
【誤】避けために役立つツールについて
【正】避けるために役立つツールについて

■p.259 7行目
【誤】同じ名前をオーバライドして
【正】同じ名前をオーバロードして

■p.259 18行目
【誤】オーバライドされた
【正】オーバロードされた

■p.262 13行目
【誤】大きな利用だった
【正】大きな理由だった

目次

まえがき

1章 型
    項目1:データ構造を表現するために型システムを用いよう
    項目2:型システムを用いて共通の挙動を表現しよう
    項目3:OptionとResultに対してはmatchを用いずに変換しよう
    項目4:標準のError型を使おう
    項目5:型変換を理解しよう
    項目6:newtypeパターンを活用しよう
    項目7:複雑な型にはビルダを使おう
    項目8:参照型とポインタ型に慣れよう
    項目9:明示的なループの代わりにイテレータ変換を使用することを検討しよう

2章 トレイト
    項目10:標準トレイトに習熟しよう
    項目11:RAIIパターンにはDropトレイトを実装しよう
    項目12:ジェネリクスとトレイトオブジェクトのトレードオフを理解しよう
    項目13:デフォルト実装を用いて、実装しなければならないトレイトメソッドを最小限にしよう

3章 さまざまなコンセプト
    項目14:生存期間を理解しよう
    項目15:借用チェッカを理解しよう
    項目16:unsafeコードを書かないようにしよう
    項目17:状態共有並列実行には気を付けよう
    項目18:Don't panic
    項目19:リフレクションを避けよう
    項目20:過剰な最適化の誘惑を退けよう

4章 依存ライブラリ
    項目21:セマンティックバージョン(SemVer)を理解しよう
    項目22:可視範囲を最小化しよう
    項目23:ワイルドカードインポートを避けよう
    項目24:APIに型が登場する依存ライブラリは再エクスポートしよう
    項目25:依存グラフを管理しよう
    項目26:忍び寄るフィーチャに注意しよう

5章 ツール
    項目27:パブリックインターフェイスのドキュメントを書こう
    項目28:分別をもってマクロを使おう
    項目29:Clippyに耳を傾けよう
    項目30:ユニットテスト以上のものを書こう
    項目31:ツールのエコシステムを活用しよう
    項目32:CIシステムを設定しよう

6章 標準Rustの向こうへ
    項目33:ライブラリコードをno_std互換にすることを検討しよう
    項目34:FFI境界を通過するものを制御しよう
    項目35:手動でFFIマッピングを書かずにbindgenを用いよう

あとがき
索引