11章トレイトとジェネリクス
コンピュータ科学者は、ケース1、ケース2、ケース3のように分けて、均一でない構造にして扱う傾向がある。一方、数学者はシステム全体を統合する唯一の原理を求める傾向がある。
−Donald Knuth†1
[†1] 訳注:米国のコンピュータ科学者。アルゴリズム解析の父とも称せられる。1974年にチューリング賞を受賞している。組版システムTeXの作者としても知られる。
プログラミングにおける最大の発見は、さまざまな型の値を処理するコードが書けるということだ。まだ書かれていない型の値を処理することすらできる。2つの例を示す。
Vec<T>
はジェネリックなベクタだ。任意の型に対してベクタを作ることができる。Vec
を書いたプログラマが考えもしなかった、ユーザが定義した型に対しても機能する。File
、TcpStream
を始めとするさまざまな型に、.write()
メソッドが実装されている。このような型を仮にwriter型と呼ぼう。プログラム中では、writer型を参照として保持し、それにデータを送ることができる。実際の型を気にする必要はない。後から誰かが新しいwriter型を追加した場合でも、プログラムはその型を既にサポートしていることになる。
もちろん、この機能はRustが新たに導入したものではない。この機能は多相性もしくはポリモルフィズム(polymorphism)と呼ばれ、新たなプログラム言語技術として1970年代に盛んに研究された。現在では、この機能は事実上ほぼすべての言語で提供されている。Rustは2つの関連する機能で多相性をサポートする。トレイトとジェネリクスだ。多くのプログラマにとって、これらの概念はなじみ深いものだと思うが、Rustでは、Haskellの型クラスにヒントを得た新たなアプローチが取られている。 ...
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.