借り入れチェッカー


ねえ人々、さびの上のもう一つのブログ柱へようこそ!
最後のポストでは、私は簡単に借り手チェッカーに言及しました.このポストでは、私は借りるチェッカーについてこれまで学んだことを共有するつもりです.今、私たちがそこに入る前に、私たちが最後にした基礎知識に戻る必要があります.
錆のユニークさはメモリの安全性、それを達成する方法は、所有権のメカニズムを実装することです.

所有権とは


所有権は、錆が記憶を管理する方法を管理するために作成されたルールのセットです.JavaScriptのような言語はガベージコレクションを使用しますが、これは基本的には使用しないときにメモリを解放することを意味します.Rustでは、コンパイラがチェックしたルールのセットによって管理されます.
これらの規則は次のとおりです.
  • 変数に格納されている各値は、それが所有者にタグ付けされるか、単に値で初期化されたどんな変数も、その値の所有者です.それは所有者のタグです.
    例えば、
  • let basket = String::from("Basket string");
    
    変数basket こちらはこちらのオーナーです.
  • 一度に一人の所有者がいることができます.
    これは、メモリに割り当てられた値が、一度に1つの所有者を指すことができることを意味します.
    例:上記の例を使用して、より多くの変更を加えます
  • let basket = String::from("Basket string");
    let house = basket;
    println!("This is a {}", basket);
    
    あなたが私のようなJavaScriptから来るならば、これをすることは我々が第1の変数を呼ぶとき、どんなエラーももたらさないでしょうbasket . 錆では、コンパイル時にエラーが発生します.

    we've moved the ownership to the new variable


    もちろん、これは正確なエラーではありません.
    したがってbasket は利用できません.
  • 所有者がスコープから出ると、値は削除されます.
    これは、関数(スコープもスコープ)で変数を初期化するとき、スコープが終わったときに値がドロップされることを意味します.
    例えば、
  • {
    let apple = "apple";
    }
    
    println!("This fruit is an {}", apple);
    
    これはAppleのスコープが削除される前にコンパイルされません.

    どのような借り手チェッカーですか?


    これは、プログラムの所有規則をチェックして検証するコンパイラのメカニズムとして参照できます.変数が値かどうかを指定します.
    我々は、参照、スタックとヒープについて話すことなく借りるチェッカーについて話すことができません.あなたはよく借りのチェッカーを理解するためには、どのように錆データ型を格納する方法を学ぶ必要があります.言語の一意性のために、値がスタックまたはヒープに格納されているかどうかを知る必要があります.それは錆の開発に重要です.

    スタックとヒープ


    スタックとヒープは、実行時にコードを使用できますが、異なる方法で構成されます.
    スタックはそれを取得する順序で値を格納し、逆の順序で値を削除します.これは「最後のin、first out」と呼ばれる.この慣例を説明するために、スタックプレートや本のスタックを考えてください.😆. スタックから削除することは、「Popping」と呼ばれることに加えられます.スタックに格納されているすべてのデータは既知の固定サイズでなければなりません.
    ヒープは組織化されていません.ヒープにデータを入れると、一定量のスペースを要求します.メモリアロケータは、メモリが十分に大きい場合、ヒープ内の空のスロットを検索し、それがあなたの値に割り当てられ、ポインタを返します.これをよく説明するために、公園を考えてください.ジョンと彼の友人/家族がピクニックに出ると決めましょう、彼らはピクニックのためにいくつかのものまたは多くのものをとる必要があります.ジョンは公園でスペースを探したり、スペースを借りたりします.スペースは、人々、そのようなものに依存し、このスペースをヒープ上のメモリを割り当てるために比較することができます.
    ピクニックの正確な位置をポインタと比較することができます.ピクニックがマンゴーの木の下にあると言いましょう、ピクニックを見つけるために、ジョンは彼の友人に話します、ピクニックはマンゴー木の下にあります.
    ピクニックの終わりに、彼らは様々な家に行きます.ピクニックのためのスペースはもはや使用されていません.これは、ヒープの値が現在解放されたり、プログラムの最後にクリーンアップされたときに比較できます.公園はヒープと比較することができる.
    参考: -参照はポインタのようなもので、他の変数が所有しているアドレスに格納されているデータにアクセスするためのアドレスです.参照は、ポインタとは異なり、特定の型の有効な変数を指すように保証されます.ピクニックの例に戻りましょう、ジョンのピクニックが場所であるマンゴー木の下にあったのを思い出してください.ポインタは、値がない場合でも、場所を指します.参照はそうではありません、したがって、もう一つのライフタイムの概念があります.これは別のトピックになります.この投稿をオーバーロードしたくありません.😄.
    そのためには、“借り入れチェッカー”の基本的な概念は、それを導くルールは、メカニズムと私の思考プロセス.
    私は錆本を読んでお勧めします.それは私がさびを書く方法を学んでいるところです.すぐにお会いしましょう!