0Pricing
Learn Rust Coding · Pelajaran

Mengapa Lifetime

Mencegah referensi menggantung

Mengapa Lifetime adalah pelajaran Learn Rust Coding gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Learn Rust Coding, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Learn Rust Coding mencakup 4 pelajaran total.

Referensi Harus Tetap Valid

Referensi meminjam data yang bukan miliknya. Rust harus menjamin bahwa data tersebut hidup setidaknya selama referensinya. Lifetime adalah cara kompilator melacak hal ini.

Tugasnya adalah mencegah referensi yang menggantung.

Apa Itu Referensi yang Menggantung?

Referensi yang menggantung menunjuk ke memori yang sudah dibebaskan. Dalam bahasa tanpa pemeriksaan, menggunakannya dapat menyebabkan galat atau masalah keamanan. Rust menolak mengompilasi kode seperti itu.

Pemeriksa Peminjaman saat Bekerja

Kode ini akan membuat referensi ke nilai yang keluar dari cakupan. Rust menolaknya saat kompilasi. Lifetime adalah aturan yang digunakan Rust untuk menentukan hal tersebut.

fn main() {
    let r;
    {
        let x = 5;
        r = &x;
        println!("inside: {}", r);
    }
    // using r here would be a dangling reference
    println!("done");
}

Cakupan Menentukan Lifetime

Lifetime suatu nilai adalah rentang ketika nilai tersebut valid, biasanya cakupannya. Referensi tidak boleh hidup lebih lama daripada nilai yang ditunjuknya.

Di sini x dan referensinya hidup dalam cakupan yang sama, jadi tidak masalah.

fn main() {
    let x = 5;
    let r = &x;
    println!("x is {}, r is {}", x, r);
}

Mengembalikan Referensi

Fungsi yang mengembalikan referensi harus mengembalikan referensi yang tetap valid bagi pemanggil. Anda tidak dapat mengembalikan referensi ke variabel lokal, karena variabel tersebut berakhir ketika fungsi selesai.

Mengembalikan Peminjaman dari Masukan

Yang dapat Anda lakukan adalah mengembalikan referensi yang meminjam dari masukan. Hasilnya valid selama masukan tersebut valid. Inilah yang dijelaskan oleh anotasi lifetime.

fn first_word(s: &str) -> &str {
    let bytes = s.as_bytes();
    for (i, &b) in bytes.iter().enumerate() {
        if b == b' ' {
            return &s[..i];
        }
    }
    s
}

fn main() {
    let sentence = String::from("hello world");
    println!("{}", first_word(&sentence));
}

Lifetime Hanya Berlaku saat Kompilasi

Lifetime murni merupakan konsep saat kompilasi. Lifetime tidak menambahkan biaya saat runtime dan hanya ada agar pemeriksa peminjaman dapat memverifikasi keamanan memori.

Kepemilikan dan Lifetime secara Bersamaan

Kepemilikan menentukan siapa yang membebaskan suatu nilai; lifetime menentukan berapa lama peminjaman nilai tersebut boleh hidup. Bersama-sama, keduanya memungkinkan Rust menjamin keamanan tanpa pengumpul sampah.

fn main() {
    let data = vec![1, 2, 3];
    let view = &data[0..2];
    println!("{:?}", view);
    // data still owns the vector; view just borrows part of it
    println!("{:?}", data);
}

Mengapa Nama Muncul dalam Tanda Tangan

Ketika sebuah fungsi menerima beberapa referensi, kompilator terkadang tidak dapat mengetahui hubungan antar-lifetime-nya. Anda kemudian menambahkan anotasi lifetime untuk memperjelas hubungan tersebut.

Pelajaran berikutnya membahas sintaks tersebut.

Manfaatnya

Berkat lifetime, seluruh kategori galat — penggunaan setelah pembebasan, pointer yang menggantung, dan invalidasi iterator — tidak dapat dikompilasi. Anda mendapatkan kecepatan seperti C dengan keamanan memori.

Model Mental

Anggap lifetime sebagai label pada durasi hidupnya data. Referensi membawa batasan: saya hanya valid selama sumber saya masih hidup. Pemeriksa peminjaman menegakkan aturan ini.

Pemeriksaan Singkat

Uji pemahaman Anda tentang alasan lifetime diperlukan.

Rangkuman

Anda telah mempelajari alasan lifetime diperlukan:

  • Referensi tidak boleh hidup lebih lama daripada data yang dipinjamnya
  • Lifetime mencegah referensi yang menggantung saat kompilasi
  • Lifetime hanya berlaku saat kompilasi dan tidak memerlukan biaya saat runtime
  • Lifetime bekerja bersama kepemilikan untuk menyediakan keamanan memori tanpa pengumpul sampah

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mengapa Lifetime” gratis?

Ya — teks lengkap “Mengapa Lifetime” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Learn Rust Coding, upgrade ke CoddyKit PRO. Kursus Learn Rust Coding mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Mengapa Lifetime”?

Mencegah referensi menggantung Kamu berlatih Learn Rust Coding dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Learn Rust Coding?

Tidak diperlukan pengalaman sebelumnya. Learn Rust Coding di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Mengapa Lifetime” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Learn Rust Coding ini?

Ya. Setiap pelajaran Learn Rust Coding menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mengapa Lifetime
  2. Anotasi Lifetime
  3. Lifetime dalam Struct
  4. Aturan Elisi
← Kembali ke Learn Rust Coding