~/VibeHandbook
PDF ฟรี

ภาษา

rust-lang.org

Rust

คืออะไร

Rust เป็นภาษาระบบ (systems language) แบบคอมไพล์ ที่เน้นความปลอดภัยของหน่วยความจำ (memory safety) ภาษาส่วนใหญ่ใช้ garbage collector — ตัวเก็บกวาดหน่วยความจำอัตโนมัติที่ทำงานอยู่เบื้องหลังเพื่อคืนพื้นที่หน่วยความจำที่ไม่ได้ใช้แล้ว Rust ข้ามขั้นตอนนั้นไป แล้วพิสูจน์ตั้งแต่ตอนคอมไพล์ว่าหน่วยความจำของโปรแกรมคุณถูกจัดการอย่างถูกต้อง ลองนึกภาพหนังสือในห้องสมุด: มีคนถือและเขียนในหนังสือเล่มนั้นได้ทีละคนเท่านั้น และระบบจะไม่มีทางให้ยืมหนังสือที่ถูกคืนและทิ้งไปแล้ว — คุณจึงไม่มีทางไปใช้สิ่งที่หายไปแล้วโดยไม่ได้ตั้งใจ นั่นคือสิ่งที่โมเดล ownership (ความเป็นเจ้าของ) และ borrowing (การยืม) ของ Rust ทำให้กับข้อมูลของคุณ มันรับประกันตั้งแต่ก่อนที่โปรแกรมจะรันจริงว่าคุณจะไม่เจอ data race (สองส่วนของโค้ดเปลี่ยนแปลงสิ่งเดียวกันพร้อมกัน) หรือบั๊ก use-after-free (การใช้หน่วยความจำที่ถูกเก็บกวาดไปแล้ว) ผลลัพธ์ที่ได้คือความเร็วระดับเดียวกับ C แต่มีวิธียิงเท้าตัวเองน้อยลงมาก

จุดแข็ง

  • ความปลอดภัยของหน่วยความจำและความปลอดภัยของเธรด (thread safety) ถูกตรวจสอบตั้งแต่ตอนคอมไพล์โปรแกรม โดยไม่ต้องใช้ garbage collector (ตัวเก็บกวาดหน่วยความจำเบื้องหลังที่ภาษาส่วนใหญ่ต้องใช้)
  • ประสิทธิภาพเทียบเท่า C และ C++
  • ระบบชนิดข้อมูล (type system) ที่หลากหลาย, การจับคู่รูปแบบ (pattern matching) และเครื่องมือจัดการแพ็กเกจระดับหนึ่ง (Cargo เครื่องมือ build-and-package ในตัวของ Rust)
  • ข้อความ error จากคอมไพเลอร์ที่ดีเยี่ยม อธิบายว่าอะไรผิดพลาดและจะแก้ยังไง

ข้อแลกเปลี่ยน

  • เส้นโค้งการเรียนรู้ที่ชัน — borrow checker (ส่วนของ Rust ที่บังคับใช้กฎ "ถือได้ทีละคน" ของหนังสือด้านบน) ต้องใช้เวลาจริง ๆ กว่าจะคุ้นเคย
  • เขียนช้ากว่าและคอมไพล์นานกว่าภาษาระดับสูงอื่น ๆ
  • เกินความจำเป็นสำหรับสคริปต์ง่าย ๆ หรือโปรโตไทป์เร็ว ๆ
  • Rust แบบ async และโค้ด generic ที่เกี่ยวข้องกับ lifetime หนัก ๆ อาจซับซ้อนจริงจัง

เมื่อไหร่ควรเลือกใช้

เลือกใช้ Rust เมื่อประสิทธิภาพ ความน่าเชื่อถือ และการควบคุมทรัพยากรสำคัญพร้อมกันทั้งหมด: ซอฟต์แวร์ระบบ, game engine, เครื่องมือ command-line, WebAssembly, embedded หรือบริการที่ประสิทธิภาพเป็นเรื่องวิกฤต มันเข้ากันไม่ดีกับสคริปต์แบบใช้แล้วทิ้ง ที่การรับประกันความปลอดภัยไม่คุ้มกับความยุ่งยากที่ต้องแลก

เข้ากับ vibe coding แค่ไหน

AI assistant สร้างโค้ด Rust ที่ดูสมเหตุสมผลได้ แต่ borrow checker คือผู้ตัดสินตัวจริง — เตรียมใจไว้ว่าต้องคัดลอก error จากคอมไพเลอร์กลับไปให้ AI แล้วทำซ้ำไปเรื่อย ๆ ซึ่งได้ผลดีเพราะข้อความวินิจฉัยของ Rust นั้นแม่นยำและโมเดลสามารถนำไปแก้ไขต่อได้ สั่ง AI ให้พึ่งพา Result และ ? สำหรับการจัดการ error ให้เลือกใช้ owned types หรือการยืม (borrow) ที่ชัดเจนแทนการต่อสู้กับ lifetime และให้แนะนำ crate (แพ็กเกจโค้ดที่นำกลับมาใช้ซ้ำได้ของ Rust ซึ่งระบุไว้ใน Cargo.toml) อย่างชัดเจน ขอให้สร้างเคสทดสอบ cargo test ด้วย เพื่อให้คุณตรวจสอบความปลอดภัยและพฤติกรรมได้ เมื่อโมเดลเสนอ unsafe ให้ทักท้วงกลับและขอทางเลือกที่ปลอดภัยก่อนเสมอ

fn main() {
    let nums = vec![3, 1, 4, 1, 5, 9, 2, 6];
    let sum: i32 = nums.iter().filter(|&&n| n % 2 == 0).sum();
    println!("Sum of evens: {sum}");
}