5章参照
ライブラリで何かをできなくすることはできない。†1
−Mark Miller
[†1] 訳注:http://tagide.com/blog/research/constraints/参照。
これまで見てきた、単純なヒープへのポインタであるBox<T>
や、String
値やVec
値の内部にあるポインタは、所有権を持つポインタであった。所有者であるポインタがドロップされると参照先もドロップされる。Rustには、所有権を持たないポインタ型、参照(reference)がある。参照は、参照先の生存期間に何の影響も持たない。
実際のところ、話はむしろ逆で、参照は参照先よりも長生きしてはいけない。プログラマは、参照が参照先よりも長生きすることがないことを、プログラム中で明確にしなければならない。これを強調するために、Rustはある値に対する参照を作ることを借用(borrowing)と呼ぶ。借りたものは、いつかは所有者に返さなければならない。
「プログラム中で明確にしなければならない」という文を読んで何か怪しいと思ったなら、よい勘をしている。参照自体には何も特別なところはない。中身はただのアドレスだ。しかし、参照を安全に保つルールが、Rust固有のものなのだ。研究だけのために作られた言語以外で、このようなルールを持つ言語は見たことがないはずだ。このルールの習得は、Rustの習得において最も面倒な部分ではあるが、このルールによって防がれる古典的で日常的なバグの範囲は驚くべきものだし、マルチスレッドプログラミングへ与える影響も莫大なものがある。再度言うが、これがRustの大胆な主張なのだ。
本章では、Rustの参照がどのように機能するのか、参照や関数やユーザ定義型に生存期間情報を組み込むことで、どのようにこれらを安全に利用できるようにしているのかを説明する。また、ある種の一般的なバグが、実行時の性能低下を引き起こすことなく、この機能によってコンパイル時に検出されていることを示す。 ...
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.