เรื่องเล่าจากสนามโค้ด: Rust กับพลังที่ซ่อนอยู่ของความมั่นใจ

Bernard Kolobara ผู้พัฒนาเบื้องหลัง Lubeno ได้แชร์ประสบการณ์ตรงว่า Rust ไม่ได้แค่ปลอดภัย แต่ยังช่วยให้เขาทำงานได้เร็วขึ้นในระยะยาว โดยเฉพาะเมื่อโค้ดเบสเติบโตจนไม่สามารถจำทุกส่วนได้หมด การ refactor โค้ดในภาษาทั่วไปมักทำให้เกิดความลังเล แต่ Rust กลับให้ความมั่นใจว่า “ถ้ามันคอมไพล์ผ่าน ก็ปลอดภัยแล้ว”

เขาเล่าถึงเหตุการณ์ที่เจอ bug จากการใช้ mutex ร่วมกับ async await ซึ่งดูเหมือนจะไม่เกี่ยวกันเลย แต่ Rust กลับตรวจจับได้ว่า mutex guard ถูกถือข้าม await point ซึ่งอาจทำให้เกิด undefined behavior เพราะ scheduler อาจย้าย thread ไปปลดล็อก mutex บน thread ที่ไม่ใช่ตัวเดิม ซึ่ง Rust ไม่ยอมให้เกิดขึ้นเด็ดขาด

ในขณะที่ TypeScript กลับปล่อยให้ bug แบบ race condition หลุดไปถึง production โดยไม่เตือนอะไรเลย เช่น การ redirect ด้วย window.location.href ที่ไม่ได้หยุดการทำงานทันที ทำให้คำสั่ง redirect ถัดไปเขียนทับคำสั่งแรกโดยไม่รู้ตัว

Rust เพิ่ม productivity ผ่านความมั่นใจ
เมื่อโค้ดเบสใหญ่ขึ้น Rust ช่วยให้กล้า refactor โดยไม่กลัวผลกระทบ
ความปลอดภัยของ type system และ borrow checker ทำให้มั่นใจว่าโค้ดไม่พัง
Productivity เพิ่มขึ้นแม้โค้ดจะซับซ้อนขึ้น

ปัญหา mutex guard กับ async await
Rust ไม่อนุญาตให้ถือ mutex guard ข้าม await point
Scheduler อาจย้าย thread ทำให้ unlock เกิดบน thread ที่ไม่ใช่ตัวเดิม
การแก้ไขคือปลดล็อกก่อน await เพื่อหลีกเลี่ยง undefined behavior

ความสามารถของ Rust compiler
ตรวจจับ bug ที่เกิดจากการจัดการ thread และ lifetime ได้แม่นยำ
บังคับให้เขียนโค้ดที่ปลอดภัยแม้ในสถานการณ์ที่ซับซ้อน
ระบบ type และ lifetime ทำงานร่วมกันอย่างเป็นระบบ

ตัวอย่าง bug ใน TypeScript
การใช้ window.location.href ไม่หยุดการทำงานทันที
เกิด race condition ที่ redirect ถูกเขียนทับ
การแก้ไขคือใช้ return เพื่อหยุดการทำงานหลัง redirect

มุมมองเรื่องการทดสอบ
Rust ลดความจำเป็นในการเขียน test เพื่อป้องกัน regression
Compiler ทำหน้าที่เป็น safety net ที่แข็งแกร่ง
แต่ในบางกรณีที่ type system ไม่ครอบคลุม การเขียน test ก็ยังจำเป็น

https://lubeno.dev/blog/rusts-productivity-curve
🎙️ เรื่องเล่าจากสนามโค้ด: Rust กับพลังที่ซ่อนอยู่ของความมั่นใจ Bernard Kolobara ผู้พัฒนาเบื้องหลัง Lubeno ได้แชร์ประสบการณ์ตรงว่า Rust ไม่ได้แค่ปลอดภัย แต่ยังช่วยให้เขาทำงานได้เร็วขึ้นในระยะยาว โดยเฉพาะเมื่อโค้ดเบสเติบโตจนไม่สามารถจำทุกส่วนได้หมด การ refactor โค้ดในภาษาทั่วไปมักทำให้เกิดความลังเล แต่ Rust กลับให้ความมั่นใจว่า “ถ้ามันคอมไพล์ผ่าน ก็ปลอดภัยแล้ว” เขาเล่าถึงเหตุการณ์ที่เจอ bug จากการใช้ mutex ร่วมกับ async await ซึ่งดูเหมือนจะไม่เกี่ยวกันเลย แต่ Rust กลับตรวจจับได้ว่า mutex guard ถูกถือข้าม await point ซึ่งอาจทำให้เกิด undefined behavior เพราะ scheduler อาจย้าย thread ไปปลดล็อก mutex บน thread ที่ไม่ใช่ตัวเดิม ซึ่ง Rust ไม่ยอมให้เกิดขึ้นเด็ดขาด ในขณะที่ TypeScript กลับปล่อยให้ bug แบบ race condition หลุดไปถึง production โดยไม่เตือนอะไรเลย เช่น การ redirect ด้วย window.location.href ที่ไม่ได้หยุดการทำงานทันที ทำให้คำสั่ง redirect ถัดไปเขียนทับคำสั่งแรกโดยไม่รู้ตัว ✅ Rust เพิ่ม productivity ผ่านความมั่นใจ ➡️ เมื่อโค้ดเบสใหญ่ขึ้น Rust ช่วยให้กล้า refactor โดยไม่กลัวผลกระทบ ➡️ ความปลอดภัยของ type system และ borrow checker ทำให้มั่นใจว่าโค้ดไม่พัง ➡️ Productivity เพิ่มขึ้นแม้โค้ดจะซับซ้อนขึ้น ✅ ปัญหา mutex guard กับ async await ➡️ Rust ไม่อนุญาตให้ถือ mutex guard ข้าม await point ➡️ Scheduler อาจย้าย thread ทำให้ unlock เกิดบน thread ที่ไม่ใช่ตัวเดิม ➡️ การแก้ไขคือปลดล็อกก่อน await เพื่อหลีกเลี่ยง undefined behavior ✅ ความสามารถของ Rust compiler ➡️ ตรวจจับ bug ที่เกิดจากการจัดการ thread และ lifetime ได้แม่นยำ ➡️ บังคับให้เขียนโค้ดที่ปลอดภัยแม้ในสถานการณ์ที่ซับซ้อน ➡️ ระบบ type และ lifetime ทำงานร่วมกันอย่างเป็นระบบ ✅ ตัวอย่าง bug ใน TypeScript ➡️ การใช้ window.location.href ไม่หยุดการทำงานทันที ➡️ เกิด race condition ที่ redirect ถูกเขียนทับ ➡️ การแก้ไขคือใช้ return เพื่อหยุดการทำงานหลัง redirect ✅ มุมมองเรื่องการทดสอบ ➡️ Rust ลดความจำเป็นในการเขียน test เพื่อป้องกัน regression ➡️ Compiler ทำหน้าที่เป็น safety net ที่แข็งแกร่ง ➡️ แต่ในบางกรณีที่ type system ไม่ครอบคลุม การเขียน test ก็ยังจำเป็น https://lubeno.dev/blog/rusts-productivity-curve
LUBENO.DEV
The unexpected productivity boost of Rust
Rust is known for having a steep learning curve, but in this post we will be looking at another curve, the one showing developer productivity in relation to the project size.
0 Comments 0 Shares 21 Views 0 Reviews