プログラマがマスタすべき重要な概念です。Rustの文字列の扱いは、Rust言語がシステムプログラミングにフォーカスしているため、少し他の言語と異なります。動的なサイズを持つデータ構造があるといつも、物事は複雑性を孕みます。文字列もまたサイズを変更することができるデータ構造です。これはつまり、Rustの文字列もまた、Cのような他のシステム言語とは少し異なる振る舞いをするということです。詳しく見ていきましょう。「文字列」は、UTF-8のバイトストリームとしてエンコードされたユニコードのスカラ値のシーケンスです。すべての文字列は、妥当なUTF-8のシーケンスであることが保証されています。他のシステム言語とは異なり、文字列はnull終端でなく、nullバイトを保持することもできます。Rustには主要な文字列型が二種類あります。ついて説明しましょう。「文字列スライス」と呼ばれます。文字列スライスは固定サイズで変更不可能です。文字列スライスはUTF-8のバイトシーケンスへの参照です。文字列リテラルは、静的にアロケートされた文字列スライスです。プログラムの実行中全てにわたって存在しているということです。greetingの束縛はこのように静的にアロケートされた文字列を参照しています。文字列スライスを引数として期待している関数はすべて文字列リテラルを引数に取ることができます。文字列リテラルは複数行にわたることができます。複数行文字列リテラルには2つの形式があります。経由でのみアクセス出来ることに注意して下さい。サイズ不定型であり追加の実行時情報がないと使用できないからです。詳しくはサイズ不定型の章を読んで下さい。いうヒープアロケートされる文字列もあります。この文字列は伸張可能であり、またUTF-8であることも保証されています。メソッドで変換することで作成されます。実装するトレイトを引数として取る関数に対しては自動的には行われません。用いて明示的に変換しなければなりません。変換するとメモリアロケーションが発生します。用いたアクセスはとても高速です。文字列のn番目の文字を探すには文字列上を走査していく必要があります。そのような処理はベクタのアクセスに比べると非常に高コストな演算であり、誤解を招きたくなかったのです。(letter)」というのはUnicodeでの定義と厳密には一致しません。文字列をバイト列として見るかコードポイント列として見るか選ぶことができます。数よりも多くのバイトが含まれています。リストの上を先頭から走査しなければならないことを強調しています。オフセットではないという点です。型強制されるためです。