22章unsafeなコード
このわたくしを弱いつまらぬ女だとか、おとなしい女だなどとはおもってはいけません。
その反対に、敵には容赦はなくて、親しいものには情けを尽くすのです。
名を讃えられるのも、そういう人たちではありませんか。
−エウリピデス、『メディア』†1
[†1] 訳注:ギリシャ悲劇。不実な元夫イオニスへの復讐のために、イオニスの新妻とイオニスと自らの間の子らを殺すことを誓ってのセリフ。訳文は中村善也、「ギリシャ悲劇全集III」人文書院による。
システムプログラミングの密かな喜びは、安全な言語と注意深く設計された抽象化の足元に、まったく安全でない機械語とビット単位の操作が渦巻いていることだ。Rustでは、そのようなことも書くことができる。
本書でここまで紹介してきた言語は、型や生存期間や境界チェックなどによって、メモリエラーやデータ競合を自動的に防止する。しかし、この種の自動的な推論には限界がある。Rustの推論では安全であると認識できないような、有用なテクニックもたくさんある。
unsafeなコードは、Rustに「コンパイラが安全性を保証できない機能だということを理解した上で利用します」と告げるための機能だ。ブロックや関数をunsafeとすることで、標準ライブラリのunsafe関数を呼び出したり、unsafeなポインタを参照解決したり、CとC++などの他の言語で書かれた関数を呼び出したりすることができるようになる。Rustのその他の安全チェック、すなわち、型チェック、生存期間チェック、インデックスの境界チェックは通常通り行われる。unsafeなコードでは、通常のコードでは使えない機能を少しだけ使うことができる。
この、安全なRustの境界を踏み越える能力によって、Rustのさまざまな最も基本的な機能を、Rust自身で実装することが可能になっている。これはCとC++でも同様で、これらの言語も標準ライブラリをCやC++自身で実装している。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access