- โปรเจกต์ Rust for Linux กำลังผลักดัน ฟีเจอร์ภาษาหลักที่จำเป็นต่อการพัฒนาเคอร์เนล พร้อมทั้งมีส่วนช่วยต่อยอดตัวภาษา Rust เอง
- หัวใจสำคัญมี 3 อย่างคือ Field Projection, In-place Initialization และ Arbitrary Self Types
- ฟีเจอร์เหล่านี้ช่วยให้สามารถเขียน โครงสร้างเฉพาะของเคอร์เนล เช่น smart pointer, หน่วยความจำแบบตรึงตำแหน่ง (Pin), RCU ใน Rust ได้อย่างเป็นธรรมชาติมากขึ้น
- ทีม Rust ให้ความสำคัญกับความมั่นคงของการออกแบบ จึงพัฒนาอย่างค่อนข้างช้า แต่เพราะมี เป้าหมายที่ชัดเจนอย่าง Linux kernel ทำให้โฟกัสการพัฒนาสูงขึ้น
- การเปลี่ยนแปลงนี้จะส่งผลต่อ ecosystem ของ Rust นอกเหนือจากเคอร์เนลด้วย และคาดว่าจะช่วยมากในเรื่อง การจัดการ smart pointer และการทำโค้ดให้เรียบง่ายขึ้น
การปรับปรุงภาษา Rust และบทบาทของ Linux kernel
- สาเหตุที่การพัฒนาฟีเจอร์ใหม่ของภาษา Rust ค่อนข้างช้า มาจาก ความระมัดระวังเพื่อไม่ให้การออกแบบที่ไม่ดีถูกตรึงไว้ในภาษา และปัญหาเรื่อง "alignment in attention"
- โปรเจกต์ Rust ดำเนินงานโดยอาศัยอาสาสมัครเป็นหลัก ดังนั้นหากไม่มีคนที่โฟกัสกับฟีเจอร์ใดโดยเฉพาะ การพัฒนาก็จะล่าช้า
- โปรเจกต์ Rust for Linux เป็นหัวข้อที่หลายคนให้ความสนใจอย่างมาก จึงช่วยให้ สามารถรวมแรงไปที่ฟีเจอร์หลักบางอย่างที่เคอร์เนลต้องการ ได้
- Tyler Mandry ผู้ร่วมเป็นผู้นำทีมภาษา Rust กล่าวในงาน Kangrejos 2025 ถึงฟีเจอร์ภาษาที่กำลังจะมาถึง พร้อมระบุว่าโปรเจกต์ Linux kernel ทำหน้าที่เป็น ตัวเร่ง ให้กับพัฒนาการของ Rust
- ฟีเจอร์หลักได้แก่ Field Projection, In-place Initialization, Arbitrary Self Types
- การพัฒนาเคอร์เนลช่วยชี้ให้เห็น กรณีใช้งานจริงและข้อกำหนดทางเทคนิค อย่างชัดเจน ทำให้ทิศทางการออกแบบภาษาของ Rust เป็นรูปธรรมมากขึ้น
- ลำดับความสำคัญสูงสุดตอนนี้คือการทำให้ ฟีเจอร์ unstable ที่ถูกใช้ใน kernel bindings อยู่แล้ว กลายเป็นมาตรฐาน
Field Projection
- เป็นความสามารถในการดึงพอยน์เตอร์ของฟิลด์เฉพาะออกมาจากพอยน์เตอร์ของ struct โดยเป็นความพยายามที่จะทำให้รูปแบบ C ของ
&(r->field) ใช้งานใน Rust ได้อย่างทั่วไป
- เดิมทีทำได้เฉพาะกับ reference (
&) และ pointer (*mut) เท่านั้น แต่ยังมีข้อจำกัดเมื่อใช้กับ smart pointer ที่ผู้ใช้กำหนดเอง
- Rust for Linux กำลังผลักดันให้ขยายสิ่งนี้ เพื่อให้ เข้าถึงฟิลด์ด้วยไวยากรณ์เดียวกันได้กับพอยน์เตอร์ทุกชนิด
- โดยเฉพาะเมื่อจัดการกับชนิด Pin (struct ที่ห้ามย้ายตำแหน่ง) ระบบจะออกแบบให้ตอนทำ field projection สามารถแปลงเป็น
Pin<&mut Field> หรือ &mut Field ได้โดยอัตโนมัติ
- หากฟีเจอร์นี้ถูกนำมาใช้ จะช่วยให้รองรับแพตเทิร์น RCU (Read-Copy-Update) ใน Rust ได้อย่างปลอดภัย ทำให้เข้าถึงข้อมูลประสิทธิภาพสูงได้โดยไม่ต้องใช้ lock
- ขณะนี้กำลังมีการหารือใน tracking issue บน GitHub และตั้งเป้าให้เสถียรก่อน Debian 14 (2027)
Arbitrary Self Types
- เป็นฟีเจอร์ที่ทำให้ สามารถนิยามเมธอดที่รองรับ smart pointer ได้
- เดิมรองรับเพียงรูปแบบ
fn method(&self) แต่ตอนนี้จะสามารถใช้รูปแบบอย่าง fn method(self: Pin<&mut MyStruct>) ได้ด้วย
- ในเคอร์เนลมีการใช้ตัวครอบพอยน์เตอร์หลายแบบ เช่น Arc, Pin, Mutex จึงเป็นฟีเจอร์ที่จำเป็น
- ระหว่างการพัฒนามีปัญหาเรื่อง ชนกับ trait
Deref แต่กำลังแก้ด้วยการเพิ่ม trait Receiver แบบใหม่
Receiver มีหน้าที่ระบุว่าพอยน์เตอร์ใดสามารถใช้เป็น arbitrary self type ได้
- สำหรับการพัฒนาเคอร์เนล ฟีเจอร์นี้ช่วยให้ การเรียกผ่านสายโซ่ของพอยน์เตอร์ ยังคงกระชับอ่านง่าย
- Ding กำลังใช้เครื่องมือ Crater เพื่อตรวจสอบความเข้ากันได้กับแพ็กเกจ Rust ที่มีอยู่ และระบุว่ามีโอกาสทำให้เสถียรได้ภายใน 1 ปี
In-place Initialization
- เป็นฟีเจอร์ที่จะรองรับ
pin_init!() macro ที่ใช้อยู่ในเคอร์เนลในระดับภาษา
- เป็นความสามารถในการ กำหนดค่าเริ่มต้นให้วัตถุโดยตรงในหน่วยความจำโดยไม่ต้องย้ายหลังสร้างเสร็จ ซึ่งมีประโยชน์กับ struct แบบ Pin,
Future, dyn trait เป็นต้น
- ขณะนี้มีข้อเสนอ 3 แนวทางที่กำลังพิจารณาควบคู่กัน
- แนวทางคีย์เวิร์ด
init: เพิ่มไวยากรณ์น้อยที่สุดและใช้ trait PinInit ที่มีอยู่เดิม
- แนวทาง reference แบบ
&out: เพิ่ม reference สำหรับเขียนอย่างเดียวคล้าย out pointer ใน C และรองรับการกำหนดค่าเริ่มต้นระดับฟิลด์
- แนวทางออปติไมซ์แบบ C++: หากวัตถุจะถูกย้ายไป heap ทันที ก็สร้างบน heap โดยตรงตั้งแต่แรก
- แผนสุดท้ายคือจะ ทดลองทั้งแนวทาง PinInit และ out-reference เพื่อพิสูจน์การใช้งานจริง
- หากฟีเจอร์นี้ถูกนำมาใช้ คาดว่าจะช่วย ทำให้โครงสร้างของโค้ด Rust ฝั่ง asynchronous เรียบง่ายขึ้นโดยรวม ไม่ใช่แค่ในเคอร์เนล
อิทธิพลของ Rust for Linux ต่อ Rust
- Linux kernel กำลังทำหน้าที่เป็น สนามทดสอบที่สมจริง สำหรับการพัฒนาภาษา Rust
- แม้ทั้ง 3 ฟีเจอร์จะเริ่มต้นจากความต้องการเฉพาะของเคอร์เนล เช่น smart pointer, หน่วยความจำแบบตรึงตำแหน่ง, โครงสร้างด้าน concurrency แต่ท้ายที่สุดนักพัฒนา Rust ทั่วไปก็จะได้รับประโยชน์ด้วย
- การเปลี่ยนแปลงเหล่านี้ถูกมองว่าเป็นตัวอย่างของ วงจรเสริมแรงเชิงบวก ระหว่างการพัฒนาเคอร์เนลกับการพัฒนาภาษา
2 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ผมใช้เวลาสักพักกว่าจะอ่านและทำความเข้าใจเอกสาร RFC ของฟีเจอร์ lightweight clones ของ rust ได้ ตอนแรกฟีเจอร์นี้ก็ดูน่าสนใจมาก แต่สุดท้ายก็ยิ่งรู้สึกอีกครั้งว่า rust เป็นภาษาที่เรียนให้เชี่ยวชาญได้ยาก สำหรับคนอย่างผมที่ไม่ได้เรียน rust หรือ C++ อย่างจริงจัง มันให้ความรู้สึกเหมือนเอาแนวคิดและฟีเจอร์ทั้งหมดของ modern C++ มาผสมกับองค์ประกอบของ haskell ถึงอย่างนั้นพอเห็นคนจำนวนมากสร้างของที่มีประโยชน์ด้วย rust ก็รู้สึกว่ามันต้องมีอะไรบางอย่างที่ถูกต้องอยู่ดี เพราะงั้นคงจะกลับไปลองใช้ rust แบบจริงจังอีกครั้งในเร็ว ๆ นี้ ลิงก์ RFC ที่เกี่ยวข้อง
จากประสบการณ์ของผม C++ ซับซ้อนกว่า rust มาก เช่น แค่รูปแบบการ initialisation ก็มีตั้ง 8 แบบ ประเภทของ value ก็มีถึง 5 แบบอย่าง xvalues ทั้งเรื่อง formatting และ naming convention ก็ไม่สม่ำเสมอ ไหนจะ rule of 5, exception handling, เวลาทำ move assignment ก็ต้องเช็ก
this != otherตลอด, perfect forwarding, SFINAE, ปัญหาเรื่องตัวแทนของ trait และจุดซับซ้อนอื่น ๆ อีกมาก ถ้าจะใช้ C++ ให้ถูกต้องก็ต้องเรียนรู้ convention ที่กองทับอยู่บนมาตรฐานเพื่อให้เขียนโค้ดได้ปลอดภัยและเร็วไปพร้อมกัน และหลายอย่างอย่าง exception handling ก็ชนกันเองหมด หรือไม่ก็ต้องเลือกแนวทางที่ไม่ค่อยเหมาะนักในชุมชน rust บรรยากาศต่อข้อเสนอ lightweight clones เริ่มเป็นลบมากขึ้นเรื่อย ๆ เพราะมันซับซ้อนเกินไป เอกสารทางการของ rust เกี่ยวกับทิศทางการออกแบบ ก็ระบุว่าความซับซ้อนเป็นอุปสรรคใหญ่ที่สุด แม้ว่าฟีเจอร์ที่ถูกเสนอใน rust ไม่จำเป็นต้องเรียบง่ายเสมอไป แต่ lightweight clone แค่ทำให้สิ่งที่ทำได้อยู่แล้วง่ายขึ้นนิดหน่อยเท่านั้น และถ้าคนเข้าใจมันได้ยาก นั่นก็เป็นปัญหา
rust ดูยิ่งใหญ่มหาศาลเมื่อมองจากไกล ๆ แต่พอเขียนจริงกลับชินได้เร็ว ตัวอย่างเช่น ตอนแรกผมไม่เข้าใจแนวคิด lifetime เลย ก็เลยเขียนโดยใช้แค่ Rc<> พอได้พื้นฐานแล้วกลับไปเรียน lifetime ใหม่ก็เข้าใจง่ายขึ้นมาก จริง ๆ แล้วผู้ใช้ส่วนใหญ่แทบไม่ต้องสนใจฟีเจอร์อย่าง lightweight clones เลยด้วยซ้ำ
ถ้าเทียบกับ C มันซับซ้อนกว่ามาก แต่ถ้าเทียบกับ C++ มันง่ายกว่ามาก แทบไม่ถึงขั้นต้องไปคุ้ยเอกสารหรือหนังสืออ้างอิงเพื่อทำความเข้าใจโค้ด rust อยู่ในจุดที่พอดีมาก คือ "ไม่ซับซ้อนจนปวดหัว แต่ก็ไม่ง่ายจนโค้ดกลายเป็นยุ่งเหยิง" แถมโดยพื้นฐานแล้วโค้ดก็มี correctness มาด้วย
ความซับซ้อนของ rust ไม่เหมือน C++ ตรงที่โอกาสใช้ผิดแบบไม่ตั้งใจมีน้อยกว่า และถ้าใช้ clippy ก็จะช่วยแปลงเป็นโค้ดที่ idiomatic มากขึ้นให้อัตโนมัติ ดังนั้นแม้จะไม่รู้จักฟีเจอร์ใหม่อย่าง lightweight clones โดยตรงก็ยังถูกแนะนำได้ ส่วนใหญ่แค่ใช้ตัวเลือก --fix ของ clippy ก็เอามาใช้ได้ง่าย นี่เป็นจุดที่ต่างจาก c++ อย่างชัดเจน เพราะ c++ มักมีผลข้างเคียงคือฟีเจอร์ที่ไม่ได้ใช้สะสมขึ้นเรื่อย ๆ หรือไม่ก็ถูกใช้แบบซับซ้อนเกินจำเป็น ทำให้ความซับซ้อนพอกพูนต่อไป
เห็นมีคนบอกว่าโครงการ Rust for Linux ช่วย rust ได้มาก ผมเลยลองหาไฟล์ "*.rs" ใน kernel tree ด้วยความอยากรู้ ดูแล้วพบว่ามีเลเยอร์ความเข้ากันได้ของ API อยู่ใต้โฟลเดอร์ rust และใน kernel tree ก็มีแค่ไดรเวอร์ proof of concept บางตัวที่เป็นการ rewrite ไดรเวอร์เดิมแบบตรง ๆ เท่านั้น (ยกเว้นไดรเวอร์ nvidia ที่ยังไม่เสร็จ) ดูเหมือนแทบยังไม่มีอะไรที่ถูกใช้งานจริง การ rewrite android binder เป็น rust ก็ดูเหมือนแทบจะค้างอยู่เฉย ๆ ความรู้สึกโดยรวมคือมันเหมือนโครงการทดลองเล็ก ๆ น่ารัก ๆ และก็อดสงสัยไม่ได้ว่าจำเป็นด้วยหรือที่จะทำการทดลองร่วมพัฒนาภาษาแบบนี้ใน source tree ของซอฟต์แวร์ที่สำคัญที่สุดในโลก ผมกลับคิดว่าทำใน OS ที่เน้นการทดลองมากกว่าอย่าง redox น่าจะเหมาะกว่า
ไดรเวอร์ GPU สำหรับ Apple silicon เขียนด้วย rust และผู้เขียนเองก็บอกว่าถ้าพัฒนาเป็น C จะยากกว่านี้มาก แม้ยังไม่ได้ upstream แต่เขากล่าวไว้ว่า "เวลาเขียนไดรเวอร์เคอร์เนลที่ซับซ้อนขึ้นมาใหม่ มักจะเจอปัญหาสารพัดอย่าง race condition, memory leak, use-after-free ฯลฯ แต่พอเขียนด้วย rust ปัญหาเหล่านั้นแทบไม่มีเลยและทำงานได้เสถียรมาก ฟีเจอร์ด้านความปลอดภัยทำให้มั่นใจได้ว่าไดรเวอร์นี้ทั้ง thread-safe และ memory-safe และตัวการออกแบบเองก็ไหลไปในทิศทางที่ดีอย่างเป็นธรรมชาติ ผมคิดว่านี่คือเวทมนตร์ของ rust" ลิงก์ประสบการณ์ของผู้เขียน และสำหรับคำถามว่าควรทำการทดลองแบบนี้ใน kernel tree หรือไม่ ก็มีการกล่าวว่า Torvalds ไม่เห็นด้วยกับข้อกังวลนั้น
ความเห็นที่ว่า "การ rewrite android binder เป็น rust เหลือแค่ค้างอยู่เฉย ๆ" ไม่เป็นความจริง โครงการนี้มีแผนจะมาแทนที่ implementation ภาษา C อย่างสมบูรณ์ บทความที่เกี่ยวข้อง ไดรเวอร์หลักสำหรับฮาร์ดแวร์ Apple ตระกูล M ก็เขียนด้วย rust เช่นกัน และไม่ใช่แค่การ rewrite แบบตรง ๆ หรือ proof of concept
ถ้าจะสร้างไดรเวอร์ที่ซับซ้อน ก็ต้องมีชั้น interface ก่อน โครงการ RfL กำลังทำงานเพิ่มชั้นโครงสร้างพื้นฐานแบบนั้นเข้าไปใน upstream และเมื่อฐานเหล่านี้สะสมมากพอ จึงจะเขียนไดรเวอร์ที่ซับซ้อนได้ Redhat กำลังทำ nova, asahi กำลังทำ Apple GPU, collabora กำลังทำสำหรับ ARM Mali ถ้ายังจะบอกว่าไดรเวอร์ GPU ทั้งสามตัวนี้ไม่ใช่ไดรเวอร์ที่ซับซ้อน ก็ไม่รู้แล้วว่าอะไรถึงจะเรียกว่าซับซ้อน
สำหรับข้ออ้างที่ว่าการ rewrite binder เป็น rust ยังแค่ค้างอยู่เฉย ๆ หากดูจากข้อความ commit ใน Linus tree จะเห็นว่าสถานะของมันสมบูรณ์มาก Rust binder ผ่านการทดสอบ binder ของ Android Open Source Project ทั้งหมดแล้ว และแอปกับฟีเจอร์ต่าง ๆ ก็ทำงานได้โดยแทบไม่มีปัญหา บนทั้งอีมูเลเตอร์ cuttlefish และ Pixel 6 Pro ก็สามารถบูตและรันแอปได้ปกติ ตอนนี้ฟังก์ชันการทำงานก็เทียบเท่า C binder แล้ว เหลือเพียงฟีเจอร์ด้านดีบักบางส่วนที่กำลังจะถูกเพิ่มเข้ามา อีกทั้งโครงการ rust for linux เดิมก็เริ่มนอก kernel tree แต่สุดท้ายถ้าจะทดลองการรวมเข้าจริง ก็ต้องทดลองภายใน tree อยู่ดี
เป้าหมายของโครงการนี้ไม่ใช่การทดลองร่วมพัฒนาภาษา แต่คือการใช้ rust ในการพัฒนา linux kernel เป็นจุดประสงค์หลัก นักพัฒนาหลักเป็นคนเริ่มโครงการนี้เองเพราะอยากใช้ rust เนื่องจากมันเป็นซอฟต์แวร์ที่สำคัญมาก จึงต้องเดินอย่างระมัดระวังและใช้เวลาสร้างพื้นฐานพอสมควร ส่วนที่ rust ได้ประโยชน์ตามมาจากโครงการนี้ก็เป็นเพียงผลพลอยได้
ผมเพิ่งเห็นในบทความส่วนที่พูดถึง <i>field projection ว่าตอนนี้มีการตัดสินใจแล้วว่าฟิลด์ของ struct ทุกตัวจะถูก pin แบบเชิงโครงสร้าง ทำให้ได้ชนิดอย่าง Pin<&mut Field> ออกมาเสมอ</i> ก่อนหน้านี้ผมพลาดประเด็นนี้ไป แม้จะเป็นเรื่องที่ซับซ้อนเชิงเทคนิค แต่ก็ดีใจที่การตัดสินใจนี้ช่วยคลายปัญหาที่เคยเป็นตัวถ่วงในการถกเถียงหลายครั้ง
ผู้คนกำลังถกเถียงกันเรื่อง <i>แบบออกแบบสุดท้ายที่ได้แรงบันดาลใจจาก C++ ซึ่งเป็นเทคนิคการคาดการณ์การปรับให้เหมาะสม โดยเมื่อสร้างค่าใหม่เพื่อเอาไปจัดสรรบน heap แล้วต้องย้ายทันที ก็จะสร้างมันขึ้นมาบน heap ตั้งแต่แรก</i> ตรงนี้ชื่อว่า 'optimization' อาจทำให้เข้าใจผิดได้ จึงมีการคุยกันเรื่องเปลี่ยนชื่อ
ผมอาจยังไม่เข้าใจความซับซ้อนของปัญหานี้ดีพอ แต่รู้สึกว่าแค่กำหนด calling convention ที่เหมาะสมก็น่าจะแก้ได้ง่ายไม่ใช่หรือ เช่น ถ้า struct มีขนาดเกิน x หรือมี marker type ก็ให้ caller ส่งบัฟเฟอร์มาแบบ outref แล้ว callee ก็เขียน struct ลงบัฟเฟอร์นั้นโดยตรง แบบนั้นถึงจะเขียนโค้ดทั่วไปก็ยังเลี่ยงการจัดสรรบนฮีปซ้ำซ้อนได้ และยังลดการคัดลอกที่ไม่จำเป็นในสถานการณ์อื่น ๆ ด้วย เป็นหัวข้อที่ลงทุนความพยายามกันมาเยอะแล้ว ผมเลยยิ่งสงสัยว่าทำไมวิธีแก้ที่เสนอถึงดูใช้งานยากกว่า
ผมคิดว่าถ้าไม่ทำฟีเจอร์นี้เป็นการ optimization ภายใน แต่ทำให้ชัดเจนเป็นฟังก์ชันอย่าง
newไปเลย จะเข้าใจตรงกันง่ายกว่าสำหรับทุกคนใน C++ semantics แบบนี้เรียกว่า elision
ขอเสนอชื่ออย่าง 'coalesced heap construction' หรือ 'coalesced heap allocation'
ทุกครั้งที่ได้ยินคนพูดถึงฟีเจอร์ต่าง ๆ ของ rust ผมก็อดปล่อยมุกไม่ได้ว่า "อย่างน้อยอย่าเอา tokio เข้าไปใส่ในเคอร์เนลก็แล้วกัน" แต่ถ้าวันหนึ่ง rust พัฒนาไปมากพอและมี direct composition renderer เกิดขึ้น จนสามารถมีแอปที่รันทั่วทั้งเคอร์เนลได้ แบบนั้นก็คงเป็นสถานการณ์ที่น่าสนใจไม่น้อย
การทำ async runtime ภายในเคอร์เนลนั้น trivial มาก จริง ๆ แล้ว workqueue ของ kernel เองก็เป็น runtime อยู่แล้ว
ถ้าไม่ได้พูดเล่น ก็แปลว่าเข้าใจโครงสร้างของการเขียนโค้ดเคอร์เนลด้วย rust (และ C) ผิดไปแบบพื้นฐานเลย เวลาเขียนในเคอร์เนล rust ก็ทำงานแบบ no_std เหมือนกัน ไม่มี C stdlib และใช้ cargo หรือ crates ไม่ได้ ถ้าจะใช้ tokio ก็ต้องเขียนมันใหม่ไปครึ่งหนึ่ง แล้วเปลี่ยนการโต้ตอบกับ OS ทั้งหมดอย่าง socket ให้เป็นแบบของเคอร์เนล
ผมคิดว่าฟีเจอร์ rust ชุดนี้ที่เข้ามาใน Linux รอบนี้ ไม่ได้จำกัดประโยชน์แค่กับเคอร์เนล แต่เป็นฟีเจอร์ชุดแรก ๆ ที่มีประโยชน์กว้างขวางกับตัวภาษา rust เอง รู้สึกเหมือนการพัฒนาฟีเจอร์ที่ยึดเคอร์เนลเป็นศูนย์กลางเคยไปขัดขวางการพัฒนาฟีเจอร์ของภาษา/ไลบรารีอื่น ๆ อยู่บ้าง
เท่าที่ผมเข้าใจ systems programming คือพื้นที่ใช้งานลำดับแรกของ rust อยู่แล้ว ไม่ว่าจะเป็น OS, embedded หรือระบบที่ซับซ้อนซึ่งอิง C โดยแก่นสำคัญคือ interoperability ฟีเจอร์รอบนี้จริง ๆ แล้วไม่ได้มีไว้เพื่อเคอร์เนลเท่านั้น แต่ดูเป็นยูทิลิตีทั่วไปที่จำเป็นสำหรับการทำ systems programming ในโลกจริง
มีความคืบหน้าเพื่อการพัฒนาเคอร์เนล/เฟิร์มแวร์เกิดขึ้นหลายด้านอยู่แล้ว เพียงแต่ไม่ใช่สิ่งที่ทุกคนพูดถึงกันตลอด Philipp เป็นคนหนึ่งที่ผลักดันการเปลี่ยนแปลงใหญ่ในด้านนี้โดยเฉพาะ
บทบาทหลักของ rust คือการเขียนโปรแกรมระบบระดับล่าง ส่วนพื้นที่อื่น ๆ ภาษาจัดการหน่วยความจำแบบ managed ที่คอมไพล์สำหรับ userspace มักเป็นตัวเลือกที่ดีกว่ามาก และในระบบที่จัดโครงสร้างแบบ Self หรือ Inferno หรือสถาปัตยกรรมแบบ Android ผมก็คิดว่าไม่เป็นปัญหาถ้าจะโฟกัสกับความสามารถสไตล์ C ระดับล่างแบบนี้
ฟีเจอร์เหล่านี้ยอดเยี่ยมพอที่จะช่วยได้ในด้านอื่นนอกเหนือจากเคอร์เนลด้วยเช่นกัน (โดยเฉพาะ generalized projections) ผมพอใจมากที่ Linux มีส่วนผลักดันการพัฒนาของภาษา rust
ผมสงสัยว่ามีงานวิจัยหรือเครื่องมือที่ใช้ LLM เพื่อแปลงโค้ด c เป็น rust แบบอัตโนมัติหรือไม่ ลองคิดดูว่าถ้าให้ LLM สร้างโค้ด rust สำหรับ chat, usb, i2c, GPU driver แล้วให้มัน build/test ได้จริงจะเป็นไปได้แค่ไหน หรืออาจลองกับโปรเจกต์ที่ 'เล็กกว่า' อย่าง sqlite, apache, nginx ได้หรือเปล่า
ถ้าไม่นับแนวทาง LLM ก็มีโครงการ c2rust ที่มีกรณีใช้งานจริงอยู่แล้ว LLM โดยพื้นฐานยังเป็นแค่การประมาณ จึงทำให้ถูกต้องแม่นยำไม่ได้และก่อ subtle bug เยอะมาก ถ้าไม่ผูกเข้ากับ formal method ก็ยังไม่ค่อยใช้ได้จริง หลายปัญหาก็ไม่สามารถเจอได้ด้วย unit test อย่างเดียว และตัวอย่างโปรเจกต์ที่เสนอว่า 'เล็กกว่า' นั้นจริง ๆ ก็ไม่ได้เล็กพอ ดูกรณีใช้งานจริง
ทาง Darpa ก็สนใจงานวิจัยลักษณะนี้และเริ่มให้ทุนแล้ว แต่ยังไม่ถึงขั้นมีผลงานออกมาชัดเจน
การจัดแนวแบบคลั่งไคล้ (alignment in dogmatism)