Rust

Unsafe Rust

Unsafe blocks, raw pointers (*const T, *mut T), FFI, unsafe traits, Undefined Behavior (UB), safety invariants

20 คำถามสัมภาษณ์·
Senior
1

คีย์เวิร์ดใดที่เปิดใช้งานพลังพิเศษของโหมด unsafe ใน Rust?

คำตอบ

คีย์เวิร์ด unsafe ปลดล็อกความสามารถห้าอย่างที่ถูกห้ามใน safe Rust ได้แก่ การ dereference raw pointers, การเรียกฟังก์ชัน unsafe, การเข้าถึงตัวแปร static แบบ mutable, การ implement unsafe traits และการเข้าถึง field ของ union บล็อกนี้ส่งสัญญาณให้ compiler ทราบว่านักพัฒนารับผิดชอบในการรับประกัน memory safety

2

โค้ด unsafe ปลดล็อกความสามารถเพิ่มเติมกี่อย่างเมื่อเทียบกับ safe Rust?

คำตอบ

โหมด unsafe ปลดล็อกความสามารถพอดี 5 อย่าง: การ dereference raw pointer, การเรียกฟังก์ชันหรือเมธอด unsafe, การเข้าถึงหรือแก้ไขตัวแปร static ที่ mutable, การ implement trait unsafe และการเข้าถึงฟิลด์ของ union ทั้ง 5 การดำเนินการนี้คือความแตกต่างเพียงอย่างเดียวระหว่าง safe กับ unsafe Rust

3

ไวยากรณ์ที่ถูกต้องในการสร้าง raw pointer แบบ immutable ไปยังตัวแปรใน Rust คืออะไร?

คำตอบ

ไวยากรณ์ในการสร้าง raw pointer แบบ immutable คือ let ptr = &x as *const T ประเภท *const T แทน raw pointer แบบ immutable การสร้าง raw pointer นั้น safe มีเพียง deref เท่านั้นที่ต้องใช้บล็อก unsafe สามารถใช้การ coercion โดยปริยายด้วย let ptr: *const T = &x ได้เช่นกัน

4

ความแตกต่างระหว่าง *const T กับ *mut T ใน Rust คืออะไร?

5

เหตุใดการสร้าง raw pointer จึงได้รับอนุญาตใน safe Rust ในขณะที่การ dereference ไม่ได้รับอนุญาต?

+17 คำถามสัมภาษณ์

เชี่ยวชาญ Rust สำหรับการสัมภาษณ์ครั้งถัดไป

เข้าถึงคำถามทั้งหมด flashcards แบบทดสอบเทคนิค แบบฝึกหัด code review และตัวจำลองสัมภาษณ์

เริ่มใช้ฟรี