簡潔なQスマートフォン用の表示で見る簡潔なQこの広告は、90日以上更新していないブログに表示しています。NonNullが安定化され、1.25.0から使えるようになる。そこでNonNullの利用例としてInternerを実装してみた。Rustにある生ポインタ型のひとつです。いう名前になりました。内部には残っていますが、安定化の予定はなくなりました。使えるようになるはずです。Rustのポインタ関連型は仕様の微妙な違いを意識して使い分ける必要があります。以下にそれを列挙しました。参照型はエイリアスに関する仮定があることに注意してください。なし」の意味は、その参照の指すメモリには他からの干渉はないとして最適化してよいという意味で、関数の引数が参照だった場合に適用されます。特別に、引数や戻り値で渡されたときにエイリアスなしと仮定されます。コードを書くときは、「ライフタイムがついていないけど、真正な参照」というのを表現する必要がある場合があります。Rustの型システムでうまく表現できない参照としては、双方向連結リストがよく知られています。ここでは別の例として、internerと呼ばれるデータ構造を書いてみます。これは以下のようなAPIを備えたデータ構造です。文字列に対して一意な整数を0から順に振って返す。振られた番号から文字列を復元する。なかったらpanic。}}Internerの設計Internerは正引きと逆引きのためのデータ構造が必要なので、素朴に書くと次のようになります。usize>,}しかしこの場合同じ文字列を二重に格納するので無駄があります。使い回すことにします。概念的には次のようなものを考えます。対する変更ができないので意図した通りにはなりません。キーを生ポインタで保持することを考えます。以下のようにすることを考えます。usize>,}その上で、このデータ構造は以下の不変条件を満たすようにします。どのような構造になっているかわからないので、パフォーマンス上の利点があると断言はできませんが、非ゼロであるとわかっているものは非ゼロにしたほうがいいはずです。型パラメータを持たないので、変性については特に考える必要はありません。共変なので注意が必要ですが、Cellのように特殊なことをやっていなければ共変で問題ないことが多いです。型パラメータを持たないので、所有については特に考える必要はありません。組み合わせて使う必要があるかもしれません。つけない」としてもたいてい安全です。