Kuest AI

Học mọi thứ, miễn phí

Bắt đầu miễn phí

Học Rust nhanh hơn 10 lần với AI

Hiểu rõ ownership, borrowing và lifetime. Dán lỗi borrow checker, Kuest sẽ giúp bạn hiểu nó đang bảo vệ bạn khỏi điều gì.

817,000+học sinh đã học cùng Kuest

chủ đề
10
Phiên bản 1.0
Ra mắt năm 2015
Loại
Biên dịch, kiểu tĩnh
Nổi tiếng vì
An toàn bộ nhớ không cần garbage collector

Xem cách Kuest hướng dẫn

Kuest hỏi trước khi giải thích, để bạn tự suy nghĩ và nhớ lâu hơn.

Bạn: let s1 = String::from("hi"); let s2 = s1; println!("{}", s1); báo "borrow of moved value: s1". Tại sao?
Kuest: Trong Rust, mỗi giá trị có đúng một owner. Sau let s2 = s1;, theo bạn ai sở hữu String?
Bạn: Tôi nghĩ cả hai cùng sở hữu, giống như sao chép trong Python.
Kuest: Đó là điểm khác biệt cốt lõi. Với String, phép gán sẽ chuyển ownership sang s2. Nếu s1 vẫn cùng sở hữu nó, điều gì sẽ xảy ra khi cả hai ra khỏi scope?
Bạn: Cả hai sẽ cố giải phóng cùng một vùng nhớ. Vì vậy Rust làm s1 không còn hợp lệ sau khi move.
Kuest: Chính xác. Nếu thật sự cần hai chuỗi riêng biệt, bạn có thể viết gì thay thế?
Bạn: let s2 = s1.clone(); để tạo bản sao thật, hoặc let s2 = &s1; nếu tôi chỉ cần borrow nó.

Gán một String sẽ chuyển ownership; clone() tạo bản sao còn & borrow nó mà không move.

Học sinh tập trung học cùng Kuest

học sinh
817,000+
quốc gia
100+
  • Từ điểm C lên A môn hóa

    “Mình đã ngừng chép đáp án và bắt đầu thật sự hiểu bài. Điểm hóa của mình từ C lên A chỉ trong một học kỳ.”

    Học sinh lớp 11, Texas
  • 3 giờ → 40 phút

    “Ghi chú của mình biến thành bài kiểm tra chỉ trong vài giây. Việc từng mất cả đêm giờ chỉ mất bằng một tập phim.”

    Học sinh lớp 10, California
  • Cuối cùng cũng sẵn sàng cho SAT

    “Kế hoạch cho mình biết chính xác cần làm gì mỗi ngày. Lần đầu tiên, mình bước vào phòng thi với tâm trạng bình tĩnh.”

    Học sinh lớp 12, New York
  • Không bao giờ cho mình bỏ qua bước nào

    “Lúc đầu hơi phiền, nhưng đến ngày thi thì đúng là cứu cánh. Mình có thể làm mọi bài mà không cần đến nó.”

    Học sinh lớp 9, Ohio
  • Tốt hơn gia sư của mình

    “Có mặt cả lúc nửa đêm, kiên nhẫn, lại rẻ hơn một buổi học với gia sư cũ của mình.”

    Sinh viên năm nhất, Florida
  • Chuỗi của mình đã 94 ngày

    “Các nhiệm vụ chỉ mất mười phút. Mình làm trên xe buýt. Không hiểu sao giờ mình lại là người giải thích Sinh học cho bạn bè.”

    Học sinh lớp 11, Illinois
  • Cuối cùng mình cũng thông tiếng Tây Ban Nha

    “Nói thành tiếng với gia sư giúp mình sửa phát âm nhanh hơn cả một năm học trên lớp.”

    Học sinh lớp 10, Arizona
  • Tìm ra lỗ hổng chỉ trong một đêm

    “Bài kiểm tra lỗ hổng cho mình thấy là mình chưa từng hiểu mol. Sửa được trong 15 phút.”

    Học sinh lớp 11, Georgia
  • Phụ huynh đây: không còn khủng hoảng lúc 9 giờ tối

    “Con trai tôi nhận được hỗ trợ thực sự mà tôi không phải giả vờ nhớ Giải tích, và tôi có thể xem tiến bộ của con mỗi tuần.”

    Phụ huynh, Washington

Phương pháp

Cách học Rust với Kuest

Trình biên dịch Rust rất nghiêm ngặt, và thông báo lỗi là một phần trong quá trình học. Hãy đọc kỹ từng lỗi, tự hỏi quy tắc nào đang được áp dụng, rồi vẽ ra ai sở hữu gì. Ownership và borrowing sẽ dần sáng tỏ qua nhiều ví dụ nhỏ trong nhiều ngày, chứ không phải một buổi học dài.

  1. Hiểu các quy tắcTrò chuyện với gia sư

    Hỏi về ownership, borrowing hoặc Option và trả lời câu hỏi kiểm tra của Kuest trước khi tiếp tục.

  2. Đọc borrow checkerChụp ảnh

    Dán code và lỗi trình biên dịch, hoặc chụp màn hình, Kuest sẽ giúp bạn thấy quy tắc nào đang được áp dụng.

  3. Vẽ ownershipBảng hướng dẫn

    Xem owner, borrow và scope được vẽ trên bảng học để hiểu rõ move và lifetime.

  4. Có biên dịch được không?Câu đố

    Trả lời các câu đố đưa ra một đoạn code và hỏi liệu nó có biên dịch được không, nếu không thì vì sao.

  5. Ghi nhớ các mẫu thường dùngThẻ ghi nhớ

    Ôn lại các method của Option và Result, cú pháp trait và những mẫu borrow phổ biến bằng flashcard giãn cách.

  6. Tập trung vào điểm vướng mắcTìm lỗ hổng kiến thức

    Hãy để Kuest tìm ra điều khiến bạn thường vấp phải, như lifetime hoặc &mut, rồi chỉ luyện phần đó.

Bạn sẽ học gì

Chạm vào một chủ đề để học ngay.

  1. 01Cargo và kiến thức cơ bảnTạo dự án bằng cargo new và dùng let, mut cùng các kiểu dữ liệu cơ bản
  2. 02Luồng điều khiển và hàmDùng if, loop, while và for, đồng thời trả về giá trị từ biểu thức
  3. 03Ownership và moveDự đoán khi nào một giá trị được move và vì sao không thể dùng biến cũ
  4. 04Borrowing và referenceDùng & và &mut, đồng thời tuân theo quy tắc một bên ghi hoặc nhiều bên đọc
  5. 05String, slice và collectionChọn giữa String và &str, đồng thời dùng Vec và HashMap
  6. 06Struct và enumMô hình hóa dữ liệu bằng struct và enum, thêm method bằng impl
  7. 07Pattern matchingXử lý mọi trường hợp với match, if let và Option<T>
  8. 08Xử lý lỗiTrả về Result<T, E> và lan truyền lỗi bằng toán tử ?
  9. 09Trait và genericChia sẻ hành vi bằng trait và viết hàm generic có bounds
  10. 10LifetimeĐọc lifetime annotation và giải thích vì sao một reference không thể tồn tại lâu hơn dữ liệu của nó

Thử hỏi

Chạm vào một câu hỏi và Kuest sẽ bắt đầu hướng dẫn từng bước.

Giúp bạn chuẩn bị cho

  • Các khóa học lập trình hệ thống
  • Dự án và công việc mã nguồn mở

Một tháng Kuest có giá thấp hơn một giờ học với gia sư

Kiên nhẫn như nhau, mọi lúc, mọi môn học. Hoặc bạn có thể dùng gói miễn phí mãi mãi.

Gia sư riêng

$40–80cho một giờ

  • Cần đặt lịch trước nhiều ngày
  • Mỗi buổi chỉ học một môn
  • Dừng khi hết giờ

Kuest Plus

$10một tháng, thanh toán hằng năm

  • Mọi môn học và kỳ thi trên trang này
  • Bất kỳ lúc nào, lâu tùy bạn cần
  • Câu đố, thẻ ghi nhớ, podcast và đề thi thử

Giải đáp thắc mắc

Buổi học tiếp theo của bạn bắt đầu tại đây

Gói miễn phí mãi mãi. Không cần thẻ.

Bắt đầu miễn phí