Belajar Pengaturcaraan Rust · Pelajaran

Jangka Hayat untuk Rujukan Selamat

Dalami jangka hayat, iaitu mekanisme Rust yang memastikan rujukan sentiasa sah dan mencegah penuding tergantung pada masa penyusunan.

Pelajaran 3 daripada 311 langkah

Jangka Hayat untuk Rujukan Selamat ialah pelajaran Belajar Pengaturcaraan Rust percuma di CoddyKit. Ini ialah pelajaran 3 daripada 3. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Belajar Pengaturcaraan Rust, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Belajar Pengaturcaraan Rust merangkumi sejumlah 3 pelajaran.

Mengapa Lifetime Penting

Peraturan pemilikan dan peminjaman Rust menghalang banyak ralat memori yang lazim. Namun, terdapat satu lagi lapisan keselamatan: lifetime.

Lifetime memastikan rujukan dalam kod anda sentiasa menunjuk kepada data yang sah. Lifetime menyelesaikan masalah rujukan tergantung, iaitu keadaan apabila rujukan mungkin menunjuk kepada memori yang telah dinyahperuntukkan.

Risiko Penuding Tergantung

Bayangkan suatu keadaan apabila fungsi mencipta data, mengembalikan rujukan kepadanya, kemudian data itu dimusnahkan apabila fungsi tamat. Rujukan yang dikembalikan itu kemudiannya akan menunjuk kepada memori yang tidak sah.

Rust menggunakan lifetime untuk menghalang perkara ini pada masa penyusunan. Rust menyemak bahawa sebarang rujukan yang anda gunakan akan kekal sah selama mana anda memerlukannya, sekali gus memastikan keselamatan memori.

Rust Membuat Inferens Lifetime

Anda tidak semestinya perlu menulis anotasi lifetime secara eksplisit. Rust mempunyai set peraturan pengguguran lifetime yang membolehkan penyusun membuat inferens lifetime dalam corak yang lazim.

Sebagai contoh, dalam fungsi dengan satu rujukan input, lifetime rujukan itu sering diberikan secara automatik kepada rujukan output. Ini menjadikan kod anda lebih kemas!

Bila Perlu Membuat Anotasi

Apabila Rust tidak dapat membuat inferens lifetime, anda mesti menganotasinya secara eksplisit. Ini memberitahu penyusun tentang hubungan antara lifetime bagi rujukan yang berbeza.

Sintaks untuk anotasi lifetime ialah tanda apostrof diikuti huruf kecil, seperti 'a. Ia ialah parameter generik untuk lifetime, bukannya tempoh tertentu.

Parameter Lifetime Fungsi

Apabila fungsi menerima beberapa rujukan dan mengembalikan satu rujukan, Rust perlu mengetahui lifetime rujukan input manakah yang patut dimiliki oleh rujukan output. Ini memastikan rujukan yang dikembalikan sentiasa sah.

Sintaks <'a> mengisytiharkan parameter lifetime generik. Mari kita lihat satu contoh:

fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
  if x.len() > y.len() {
    x
  } else {
    y
  }
}

fn main() {
  let string1 = String::from("abcd");
  let string2 = "xyz";
  let result = longest(string1.as_str(), string2);
  println!("The longest string is: {}", result);
}

Lifetime 'static

Lifetime 'static ialah kes khas. Ia menunjukkan bahawa rujukan boleh hidup sepanjang tempoh keseluruhan atur cara.

Literal rentetan (contohnya, "hello world") mempunyai lifetime 'static kerana literal tersebut disimpan terus dalam perduaan atur cara dan tersedia sepanjang pelaksanaan.

fn main() {
  // 'static lifetime for a string literal
  let s: &'static str = "I live for the entire program!";
  println!("{}", s);

  // This is also implicitly 'static
  let another_s = "Hello from static land!";
  println!("{}", another_s);
}

Struktur yang Menyimpan Rujukan

Jika struktur menyimpan rujukan, anda perlu menambahkan anotasi lifetime pada takrif struktur tersebut. Ini memastikan mana-mana tika struktur tidak melebihi lifetime data yang dirujuk oleh rujukannya.

Parameter lifetime struktur memberitahu Rust bahawa semua rujukan di dalamnya mestilah mempunyai sekurang-kurangnya lifetime tersebut.

struct ImportantExcerpt<'a> {
  part: &'a str,
}

fn main() {
  let novel = String::from("Call me Ishmael. Some years ago...");
  let first_sentence = novel.split('.').next().expect("Could not find a '.'");
  let i = ImportantExcerpt {
    part: first_sentence,
  };
  println!("Excerpt part: {}", i.part);
}

Lifetime dengan Generik

Lifetime ialah satu bentuk generik! Anda boleh menggabungkannya dengan generik jenis untuk mencipta struktur data atau fungsi yang fleksibel dan selamat.

Sebagai contoh, struktur boleh menyimpan rujukan kepada jenis generik, yang semuanya dihadkan oleh satu parameter lifetime, bagi memastikan hubungan data yang kompleks kekal sah.

Mentafsir Ralat Penyusun

Apabila anda mula-mula berdepan dengan ralat lifetime, ralat tersebut mungkin kelihatan menakutkan. Ralat yang paling lazim ialah "pinjaman mungkin tidak hidup cukup lama".

Biasanya, ini bermakna anda cuba menggunakan rujukan selepas data yang dirujuknya telah digugurkan, atau Rust tidak dapat membuktikan kesahihannya. Memahami mesej ini membantu anda melaraskan anotasi lifetime.

Semakan Pantas: Lifetime

Antara berikut, yang manakah paling tepat menerangkan masalah teras yang ingin diselesaikan oleh anotasi lifetime eksplisit Rust?

Lifetime: Keselamatan Masa Penyusunan

Anda telah mempelajari bahawa lifetime ialah bahagian penting dalam jaminan keselamatan memori Rust. Lifetime menghalang rujukan tergantung dengan memastikan semua rujukan sah sepanjang penggunaannya.

  • Rust sering membuat inferens terhadap lifetime menggunakan peraturan pengguguran.
  • Anda menggunakan anotasi eksplisit seperti 'a apabila inferens tidak dapat dilakukan.
  • Lifetime penting untuk fungsi yang mengembalikan rujukan dan untuk struktur yang menyimpan rujukan.
  • Lifetime 'static khas kekal sepanjang tempoh keseluruhan atur cara.

Menguasai lifetime ialah kunci untuk menulis kod Rust yang teguh!

Percuma untuk bermula

Pelajari Rust dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
39
Pelajaran
144

Soalan Lazim

Adakah pelajaran “Jangka Hayat untuk Rujukan Selamat” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Belajar Pengaturcaraan Rust, termasuk “Jangka Hayat untuk Rujukan Selamat”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Belajar Pengaturcaraan Rust merangkumi sejumlah 3 pelajaran.

Apakah yang akan saya pelajari dalam “Jangka Hayat untuk Rujukan Selamat”?

Dalami jangka hayat, iaitu mekanisme Rust yang memastikan rujukan sentiasa sah dan mencegah penuding tergantung pada masa penyusunan. Anda berlatih Belajar Pengaturcaraan Rust menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Belajar Pengaturcaraan Rust?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Belajar Pengaturcaraan Rust di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 3.

Berapa lamakah pelajaran “Jangka Hayat untuk Rujukan Selamat” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Belajar Pengaturcaraan Rust ini?

Ya. Setiap pelajaran Belajar Pengaturcaraan Rust menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Memahami Model Pemilikan Rust
  2. Penjelasan tentang Rujukan dan Peminjaman
  3. Jangka Hayat untuk Rujukan Selamat
← Kembali ke Belajar Pengaturcaraan Rust