潜水しているような気分が続く。
人と会話するとき、まるで息を止めていたかのような疲れを覚え、すごく底に潜っていたことに気づく。
潜水なのか、それとも、沈没か。
この潜っている感じがいつまで続くかわからない。
火をつけたタバコを吸いたくて、手巻きをする。
今日の勉強
rust
TRPL pp.155-160
Stringの内部表現
- Stringは
Vec<u8>のラッパ- Stringの長さはUTF-8エンコードされたベクタの長さになる
- 添え字で取得しようとすると、UTF-8エンコードされた最初のバイトが帰ってくる
- ユーザーはバイト値が帰ってくることを期待していない
- Rustは誤解を防ぐためにCompileしない
- ユーザーはバイト値が帰ってくることを期待していない
- Stringは
UTF-8の別の要点
- Rustの観点から文字列を見る方法
- バイト
- u8値のベクタ
- スカラー値
- char型
- 書記素クラスタ
- 人間が文字と呼ぶもの
- バイト
- 添え字アクセス禁止理由
- Rustは添え字アクセスという処理が常に定数時刻(
O(1))であることを望む- 合法な文字がいくつあるかを決定するのに、文字列の中身を全体操作する必要があり、時間がかかりすぎてしまう
- Rustは添え字アクセスという処理が常に定数時刻(
- Rustの観点から文字列を見る方法
文字列にアクセスる方法
- スライスする
- 範囲として
[]を使って、特定のバイトを含む文字列スライスを作れる- 無効な範囲だったら実行時にパニックする(Compileは通る)
- 範囲として
- 走査
- charメソッドを使用し、char型の値を返す
- bytesメソッドで、各バイトをそのまま返す
- 合法なUnicodeのスカラー値は、2バイト以上からなる場合もある点は注意
- 書記素クラスタを得る方法は複雑なので、標準ライブラリには入っていない
- スライスする
トレードオフ関係
- 文字列の複雑性の露出と
- エラーの起きる可能性の排除
ハッシュマップ
HashMap<K,V>- K型のキーとV型の値にチア王関係を保持する
- ハッシュ関数を開始て行う
- これが、キーの値とメモリ配置方法を決める
- ベクタのように番号ではなく、どんな方にもなりうるキーを使ってデータを参照したいときに有用
- コレクションからHashMapをuseする必要あり
- 初期化処理で自動でスコープに導入される機能には含まれていない
- よってサポートが少ない
- 生成するための組み込みマクロなし
- よってサポートが少ない
- 初期化処理で自動でスコープに導入される機能には含まれていない
- データはヒープに保持される
- ハッシュマップは均質
- キーは同じ型
- 値も同じ型
作り方
new()+insert(key, value)collectメソッド- 色々なコレクション型にデータをまとめあげる
- 型注釈が必要
HashMap<_,_>- アンダースコアを使用しているのは、元のデータから型推論するから