目次

Rustの勉強[unsafe その6]

ぎじゅつ

はじめに

#

NO IMAGEThe Rust Programming Language 日本語版 - The Rust Programming Language 日本語版

を読んでいる

お勉強

#

NO IMAGEUnsafe Rust - The Rust Programming Language 日本語版

  • やるか
  • unsafeつまらないな
    • 理解できないというかずっと机上の話だからだな
  • 思考も散漫しているので頭が疲れてるな
  • ちょっと集中しないとー
  • 勉強方法も飽きてきたんだよな

メモ

#

グローバル変数をRustは確かにサポートしていますが、 Rustの所有権規則で問題になることもあります。

  • そうだよね
  • Rustってスコープにシャドーイングしないからグローバル変数出てきたらぶっ壊れるよな

定数と不変で静的な変数は、類似して見える可能性がありますが、微妙な差異は、静的変数の値は固定されたメモリアドレスになることです。値を使用すると、常に同じデータにアクセスします。

  • ほー
  • constはそのままbuildされたときに固定の値になるもんな
  • これは格納アドレスが一緒ということか
static mut COUNTER: u32 = 0;

fn add_to_count(inc: u32) {
    unsafe {
        COUNTER += inc;
    }
}

fn main() {
    add_to_count(3);

    unsafe {
        println!("COUNTER: {}", COUNTER);
    }
}
  • まぁこのレベルだったら全然ほかの実装でいいよな
  • stateだし、外出しするのも良さそう

unsafeでのみ動く最後の行動は、unsafeなトレイトを実装することです。

  • unsafeなtrait。。。?

  • あー勝手に実装されてもチェック無視されるのか

    • 本来なら明示的に記述する必要があると
    • なるほどなー

unsafeを使って議論したばかりの4つの行動(強大な力)のうちの1つを行うのは間違っていたり、認められさえもしないものではありません。ですが、unsafeコードを正しくするのは、より巧妙なことでしょう。コンパイラがメモリ安全性を保持する手助けをできないからです。 unsafeコードを使用する理由があるなら、そうすることができ、明示的にunsafe注釈をすることで問題が起きたら、その原因を追求するのが容易になります。

  • ぜんぜんいつ使うかの議論してないんだけどw

まとめ

#
  • unsafe使いたくないな
  • にっちもさっちも行かなくなった場合の最終手段な気がするわ
  • 次は高度なトレイト

NO IMAGE高度なトレイト - The Rust Programming Language 日本語版