16章コレクション
われわれは皆、マクスウェルの悪魔のように振る舞う。体系化する生き物(Organisms organize)だ。2世紀もの間、真面目な物理学者たちがこの漫画めいたイメージを維持してきたのは、われわれが日常に同じようなことを経験しているからだ。われわれは、メールを並び替え、砂の城を作り、ジグゾーパズルを解き、小麦と籾殻を選り分け、チェスのコマを並び替え、切手を集め、本をアルファベット順に並べ、対称性を作り上げ、ソネットやソナタを作り、部屋を整理整頓する。しかも、これらの作業は、知能を用いさえすれば、それほど大きなエネルギーを必要としない。
−James Gleick『The Information: A History, a Theory, a Flood』†1
[†1] 訳注:邦題『インフォメーション:情報技術の人類史』(新潮社、2013)
Rustの標準ライブラリには、さまざまなコレクション(collection)が含まれている。コレクションは、データをメモリ上に格納するジェネリック型で、Vec
やHashMap
についてはこれまでにも紹介している。本章では、これらの2つの型のメソッドを詳細に説明するとともに、他の半ダースほどの標準コレクションについても説明する。だがその前に、Rustのコレクションと他の言語のコレクションの体系的な差異について説明しておこう。
1つ目の違いは、移動と借用があらゆる場所で起こることだ。Rustは値のディープコピーを避けるために、移動を用いる。これがVec<T>::push(item)
が、引数を参照ではなく値で取る理由だ。値はベクタの中に移動する。4章の図でこれが実際にどのように機能するかを示した。String
をVec<String> ...
Get プログラミングRust 第2版 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.