การสนับสนุน Rust สำหรับเคอร์เนล Linux เผชิญกับคำวิจารณ์จาก Torvalds

Linus Torvalds ได้ตรวจสอบแพทช์ที่ใช้ความสามารถในการสร้างไดรเวอร์ในภาษา Rust สำหรับเคอร์เนล Linux และแสดงความคิดเห็นที่สำคัญบางประการ

ข้อร้องเรียนที่ใหญ่ที่สุดมีสาเหตุจากความเป็นไปได้ที่จะเกิด panic() ในสถานการณ์ข้อผิดพลาด เช่น ในสถานการณ์ที่มีหน่วยความจำเหลือน้อย เมื่อการดำเนินการจัดสรรหน่วยความจำแบบไดนามิก รวมถึงภายในเคอร์เนล อาจล้มเหลว Torvalds ระบุว่าวิธีการดังกล่าวในเคอร์เนลนั้นโดยพื้นฐานแล้วไม่สามารถยอมรับได้ และหากไม่เข้าใจประเด็นนี้ เขาก็สามารถ NAKed โค้ดใดๆ ที่พยายามใช้วิธีการดังกล่าวได้อย่างสมบูรณ์ ในทางกลับกัน ผู้พัฒนาแพตช์เห็นด้วยกับปัญหานี้และเห็นว่าสามารถแก้ไขได้

ปัญหาอีกประการหนึ่งคือการพยายามใช้จุดลอยตัวหรือประเภท 128 บิต ซึ่งไม่เป็นที่ยอมรับสำหรับสภาพแวดล้อมเช่นเคอร์เนล Linux สิ่งนี้กลายเป็นปัญหาที่ร้ายแรงยิ่งขึ้นเนื่องจากในขณะนี้ไลบรารี Rust หลักไม่สามารถแบ่งแยกได้และแสดงถึงหยดขนาดใหญ่เพียงหยดเดียว - ไม่มีวิธีใดที่จะขอเฉพาะคุณสมบัติบางอย่างเท่านั้น ป้องกันการใช้ฟังก์ชันการทำงานที่มีปัญหาอย่างใดอย่างหนึ่ง การแก้ปัญหาอาจต้องมีการเปลี่ยนแปลงคอมไพเลอร์และไลบรารีของสนิม แม้ว่าในขณะนี้ทีมงานยังไม่มีกลยุทธ์สำหรับวิธีการปรับใช้ไลบรารีภาษาแบบโมดูลาร์

นอกจากนี้ Torvalds ยังตั้งข้อสังเกตอีกว่าตัวอย่างไดรเวอร์ที่ให้มานั้นไม่มีประโยชน์ และแนะนำให้เราใช้เป็นตัวอย่างไดรเวอร์บางตัวที่สามารถแก้ไขปัญหาที่แท้จริงได้

อัปเดต: Google ได้ประกาศการมีส่วนร่วมในโครงการริเริ่มที่จะผลักดันการสนับสนุน Rust เข้าสู่เคอร์เนล Linux และได้ให้เหตุผลทางเทคนิคในการแนะนำ Rust เพื่อต่อสู้กับปัญหาที่เกิดจากข้อผิดพลาดของหน่วยความจำ Google เชื่อว่า Rust พร้อมที่จะเข้าร่วม C เป็นภาษาสำหรับการพัฒนาส่วนประกอบเคอร์เนล Linux บทความนี้ยังยกตัวอย่างการใช้ภาษา Rust เพื่อพัฒนาไดรเวอร์เคอร์เนลในบริบทของการใช้งานในแพลตฟอร์ม Android (Rust ได้รับการยอมรับว่าเป็นภาษาที่รองรับอย่างเป็นทางการสำหรับการพัฒนา Android)

มีข้อสังเกตว่า Google ได้เตรียมต้นแบบเบื้องต้นของไดรเวอร์ที่เขียนด้วยภาษา Rust สำหรับกลไกการสื่อสารระหว่างกระบวนการของ Binder ซึ่งจะช่วยให้สามารถเปรียบเทียบประสิทธิภาพและความปลอดภัยของการใช้งาน Binder ใน C และ Rust ได้โดยละเอียด ในรูปแบบปัจจุบัน งานยังไม่เสร็จสมบูรณ์ แต่สำหรับนามธรรมพื้นฐานเกือบทั้งหมดของฟังก์ชันเคอร์เนลที่จำเป็นสำหรับ Binder ในการทำงาน เลเยอร์ได้เตรียมไว้สำหรับการใช้นามธรรมเหล่านี้ในโค้ด Rust

ที่มา: opennet.ru

เพิ่มความคิดเห็น