Skip to content

Tự học Rust - Bài 18: Lifetimes - Đảm bảo tham chiếu hợp lệ

TuanNDA
Published date:
Edit this post

Table of contents

Open Table of contents

1. Lifetimes là gì?

Mỗi tham chiếu trong Rust đều có một Lifetime, tương ứng với phạm vi mà tham chiếu đó hợp lệ. Hầu hết thời gian, Rust có thể tự suy luận Lifetime (Lifetime Elision), nhưng đôi khi chúng ta cần phải ghi chú tường minh khi trình biên dịch không thể tự đoán được mối quan hệ giữa các tham chiếu.


2. Ký hiệu Lifetime tường minh

Ký hiệu Lifetime bắt đầu bằng một dấu nháy đơn ', ví dụ 'a.

// Hàm trả về tham chiếu có thời gian sống lâu nhất
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
    if x.len() > y.len() {
        x
    } else {
        y
    }
}

Ý nghĩa của 'a ở đây là: Giá trị trả về sẽ sống lâu bằng với tham chiếu có thời gian sống ngắn nhất trong số xy.


3. Static Lifetime ('static)

Một trường hợp đặc biệt là 'static, có nghĩa là tham chiếu đó sống suốt toàn bộ thời gian chạy của chương trình. Các chuỗi văn bản cố định (string literals) mặc định đều có 'static.

let s: &'static str = "Tôi sống mãi mãi.";

4. Tại sao chúng ta cần quan tâm?

Việc ghi chú Lifetimes giúp ngăn chặn lỗi Dangling Reference (Tham chiếu treo) - trường hợp một biến cố gắng truy cập vào vùng nhớ đã bị xóa bỏ. Đây là “vũ khí bí mật” giúp Rust cực kỳ an toàn mà các ngôn ngữ như C/C++ không có được.


Lời kết Bài 18

Lifetimes có thể là khái niệm gây khó hiểu nhất với người mới bắt đầu, nhưng bạn chỉ cần nhớ: “Nó sinh ra để đảm bảo bạn không dùng một thứ gì đó đã bị hủy”. Ở bài tiếp theo, chúng ta sẽ học về Smart Pointers - những con trỏ thông minh giúp quản lý bộ nhớ linh hoạt hơn.

Hẹn gặp lại các bạn!

Previous
Tự học Rust - Bài 9: Tuples & Enums - Cấu trúc dữ liệu linh hoạt
Next
Tự học Rust - Bài 8: Mảng (Arrays) & Vectors