การใช้ Rust กับระบบไฟล์
เป้าหมาย
- ใช้ระบบชนิดข้อมูลของ Rust เพื่อจับข้อผิดพลาดได้มากขึ้นตั้งแต่ขั้นตอนคอมไพล์
- เพิ่มผลิตภาพให้สูงกว่าโค้ด C ด้วยการทำงานอย่างการจัดการทรัพยากรให้เป็นอัตโนมัติ
- ลดช่องโหว่ที่เกี่ยวข้องกับหน่วยความจำและย่นเวลาในการดีบัก
ข้อดีของ Rust
- Rust กำจัดพฤติกรรมที่ไม่ได้กำหนดไว้ และมีความสามารถที่ช่วยให้มองเห็นว่าเกิดอะไรขึ้นภายในโค้ด
- สามารถพิสูจน์ความถูกต้องของโค้ดที่เขียนด้วย Rust ได้ จึงลดบั๊กที่ขัดขวางการพัฒนาฟีเจอร์
ตัวอย่างของระบบชนิดข้อมูลใน Rust
- ฟังก์ชัน
iget_locked() มีข้อกำหนดที่ซับซ้อน
- ใน Rust สามารถแทนที่ด้วยฟังก์ชัน
get_or_create_inode() และใช้ระบบชนิดข้อมูลบังคับข้อกำหนดเหล่านี้ได้
การอภิปรายเรื่องการเปลี่ยนชื่อ API
- มีปัญหาเรื่องชื่อของ C API และ Rust API ไม่ตรงกัน
- อาจไม่คุ้นเคยสำหรับชุมชนนักพัฒนาที่มีอยู่เดิม
- อาจจำเป็นต้องทำให้ชื่อสอดคล้องกัน
ปัญหาทั่วไป
- ต้องตัดสินใจว่า abstraction ของ Rust จะถูกใช้ได้ทั่วไปกับระบบไฟล์ของเคอร์เนลทั้งหมด หรือจะเน้นเฉพาะระบบไฟล์แบบง่ายที่เขียนด้วย Rust
- เมื่อโค้ด C พัฒนาไป อาจเกิดปัญหาการซิงก์กับโค้ด Rust
ปัญหาเรื่องวงจรชีวิตของอ็อบเจ็กต์
- วงจรชีวิตของอ็อบเจ็กต์อาจแตกต่างกันไปตามระบบไฟล์
- หากเข้ารหัสวงจรชีวิตแบบเดียวลงใน Rust API อาจทำให้บางระบบไฟล์ใช้งานไม่ได้
ปัญหาของ Rust binding
- ไม่ใช่ทุกระบบไฟล์ที่จะย้ายไปใช้ Rust ได้ทันที
- เมื่อโค้ด C พัฒนาไป Rust binding อาจพังได้
- หาก Rust binding พัง ปัญหานั้นจะตกเป็นภาระของนักพัฒนา Rust-for-Linux
บทสรุป
- เดินหน้าพัฒนา Rust binding ต่อไปพร้อมกับปล่อยให้โค้ด C พัฒนาต่อ
- การเข้ารหัสความหมายจำนวนมากไว้ในระบบชนิดข้อมูลของ Rust จะเป็นเรื่องดีหรือไม่ดีนั้น น่าจะชัดเจนขึ้นเมื่อเวลาผ่านไป
สรุปโดย GN⁺
- การนำ Rust มาใช้กับระบบไฟล์จะช่วยเพิ่มทั้งความปลอดภัยของหน่วยความจำและผลิตภาพได้มาก
- ระบบชนิดข้อมูลของ Rust สามารถบังคับข้อกำหนด API ที่ซับซ้อนได้ จึงช่วยเพิ่มความถูกต้องของโค้ด
- หากนักพัฒนา C เดิมไม่เรียนรู้ Rust ก็อาจเกิดความยากลำบาก เช่น ปัญหาการซิงก์
- หาก Rust binding พัง การแก้ไขจะเป็นหน้าที่ของนักพัฒนา Rust-for-Linux
- โครงการที่มีความสามารถคล้ายกันมีเช่น Fuchsia OS ของ Google
1 ความคิดเห็น
ความคิดเห็นใน Hacker News
การจัดการด้วยฟังก์ชันเดียวทั้งที่แต่ละไฟล์ซิสเต็มดูแลวงจรชีวิตของ inode ต่างกันนั้นขัดกับแนวคิดของชั้นนามธรรม
มีคำถามว่า Rust จำเป็นต้องเปลี่ยนแปลงเพื่อให้เรียก C ได้ง่ายขึ้นหรือไม่
ยังไม่ชัดเจนว่า Rust API เป็นการห่อ C API หรือเป็นการเขียนขึ้นใหม่
การเพิ่ม Rust เข้าไปในเคอร์เนลทำให้เกิดความซับซ้อนเพิ่มเติม
การถกเถียงเป็นไปอย่างมีอารยธรรมมาก
การมีตัวเลือกมากขึ้นใน Linux kernel เป็นเรื่องที่มีประโยชน์เสมอ
unsafeblock ไม่ได้คอมเมนต์บางส่วนด้านล่างหน้าของ lwn.net หยาบคาย
มีการถกเถียงเรื่องชื่อของ C API กับ Rust API ที่ไม่สอดคล้องกัน