Martin Odersky さんと Lex Spoon さんの "The Architecture of Scala Collections" を EPFL Scala Team の許可を得て翻訳しています。
eed3si9n による非公式翻訳 (user-contributed work) なので、EPFL は一切関知しません。 翻訳の間違い等があれば遠慮なく Issues などで訳者の方にご指摘ください。

Scala コレクションのアーキテクチャ

Martin Odersky, Lex Spoon

2010年12月15日

このガイドは Scala コレクションフレームワークのアーキテクチャを詳細に説明する。Scala 2.8 コレクション API原文)と比べ、より内部の仕組みについて詳しくなっている。また、このアーキテクチャを使えば、コレクションの機能の大部分をフレームワークから再利用して独自のコレクションを数行で定義できることが分かるだろう。

Scala 2.8 コレクション API には多くの異なるコレクションに一貫して定義される多くのコレクション演算がある。全てのコレクション型に対して毎回全てのコレクション演算を新しく実装していたのでは、どこからかコピーされたコードが大量生産されてしまう。そのような重複コードは時を経るにつれ、コレクションライブラリの一部にだけ演算が追加されたり変更されたりして一貫性を失っていく。新たなコレクションフレームワークの第一の設計目標は一切の重複を廃し、全ての演算を限りなく少ない場所で定義することだった。(理想的には全ての演算があった一ヶ所だけで定義できればよかったのだが、再定義が必要だった例外もいくつかあった。)多くの演算をコレクションの「テンプレート」で実装して、個々の親クラスや実装クラスではそれを柔軟に継承するという設計方針を取った。以下のページにおいて、フレームワークの「パーツ」を構成するテンプレートやその他のクラスやトレイト、そしてそれらの設計方針を説明する。

続いては、