技術記事以外

技術記事以外の振り返りやその日学んだことのちょっとしたメモなどを置く予定です

今日の学習メモ

Rustのライフタイムとか所有権は馴染みがないのでとても難しい

numb86-tech.hatenablog.com

なんとなく一番わかりやすかったのでメモ

doc.rust-lang.org

  • メモリについて全く気にしなくていい言語もあれば、自分で allocate したり解放したりしないといけない言語もある。Rust はさらに別の所有権を通じてメモリを管理するアプローチをとっている
  • スタックには固定サイズのデータ、つまりポインタなどが入れられる。こちらは allocate とは呼ばない。場所もサイズも分かっているのでスタックにデータを入れる作業はとても速い
  • ヒープにはサイズのわからないデータをある一定のスペースを確保して格納する。空いているスペースを探すために、スタックにデータを入れるよりもヒープに allocate するほうが時間がかかる

doc.rust-lang.org

  • 何となーく雑に理解した後にRust本を読むと内容がたまに入ってきやすい
  • サイズ固定の変数をイコールで繋いだ時(integer, booleanなど)は値がそのままコピーされてスタックで管理される
  • Stringなどのサイズがわからないものを使った時は、実データへの参照・lengthやcapacityの情報を持ったものが新しく作られる、このときに古い変数の持っていた同じ情報は無効化される(=所有権の移動)。それをしないと両方の変数のライフタイムが終了したときに二重に実データのメモリの解放が発生する可能性があるため。
  • cloneメソッドなどを使って意図してディープコピーを作ることができるが、これはコストの高い作業となる(実データごと作り直してヒープで管理するから)