保証を選ぶRustの重要な特長の1つは、プログラムのコストと保証を制御することができるということです。Rustの標準ライブラリには、様々な「ラッパ型」の抽象があり、それらはコスト、エルゴノミクス、保証の間の多数のトレードオフをまとめています。それらのトレードオフの多くでは実行時とコンパイル時のどちらかを選ばせてくれます。このセクションでは、いくつかの抽象を選び、詳細に説明します。ついて読んでおくことを強く推奨します。「所有される」ポインタ、すなわち「ボックス」です。ボックスは中身のデータへの参照を渡すことができますが、ボックスだけがそのデータの唯一の所有者です。次のことを考えましょう。使うことを許しません。ムーブさせることもできます。(ムーブされていない)ボックスがスコープから外れると、デストラクタが実行されます。それらのデストラクタは中身のデータを解放して片付けます。これは動的割当てのゼロコスト抽象化です。ヒープにメモリを割り当てたくて、そのメモリへのポインタを安全に取り回したいのであれば、これは理想的です。コンパイル時にチェックされる通常の借用のルールに基づいてこれへの参照を共有することが許されているだけだということに注意しましょう。T参照にはイミュータブルな参照とミュータブルな参照がそれぞれあります。それらは「読み書きロック」パターンに従います。それは、あるデータへのミュータブルな参照を1つだけ持つこと、又は複数のイミュータブルな参照を持つことはあり得るが、その両方を持つことはあり得ないということです。この保証はコンパイル時に強制され、目に見えるような実行時のコストは発生しません。多くの場合、それら2つのポインタ型は低コストの参照をコードのセクション間で共有するには十分です。それらのポインタを関連付けられているライフタイムを超えて有効になるような方法でコピーすることはできません。T関連付けられたライフタイムや所有権を持たない、C的な生ポインタがあります。それらはメモリのある場所を何の制約もなく指示します。あるとマークされたコードの外ではそれらが参照を外せないということです。ような安全で低コストな抽象を構築するときには便利ですが、安全なコードの中では避けるべきです。Rc<T>これは、本書でカバーする中では初めての、実行時にコストの発生するラッパです。参照カウンタを持つポインタです。言い換えると、これを使えば、あるデータを「所有する」複数のポインタを持つことができるようになるということです。全てのポインタがスコープから外れたとき、そのデータは削除されます(デストラクタが実行されます)。内部的には、それは共有「参照カウント」(「refcount」とも呼ばれます)を持っています。スコープから外れる度に1減少します。主な役割は、共有データのデストラクタが呼び出されることを保証することです。ここでの中身のデータはイミュータブルで、もし循環参照が起きてしまったら、そのデータはメモリリークを起こすでしょう。循環してもメモリリークを起こさないデータを求めるのであれば、ガーベジコレクタが必要です。保証ここで提供される主な保証は、それに対する全ての参照がスコープから外れるまではデータが破壊されないということです。これは(読込専用の)あるデータを動的に割り当て、プログラムの様々な部分で共有したいときで、どの部分が最後にポインタを使い終わるのかがはっきりしないときに使われるべきです。