1 คะแนน โดย GN⁺ 2024-09-27 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

การเขียน Rust ใหม่

  • ภาษาโปรแกรม Rust ให้ความรู้สึกราวกับเป็นผลิตภัณฑ์รุ่นแรก
  • เสน่ห์ช่วงแรกของ Rust: algebraic types, ความปลอดภัยของหน่วยความจำ, ไม่มีประสิทธิภาพตก, ตัวจัดการแพ็กเกจสมัยใหม่
  • หลังจากใช้งานมา 4 ปี Rust ไม่ได้สมบูรณ์แบบเสมอไป
  • การพัฒนาของภาษาช้าลงมาก
  • ฟีเจอร์ที่ยังไม่เสถียรจำนวนมากไม่ได้ถูกรวมเข้าใน Rust รุ่นเสถียร

ภาษาที่ยอดเยี่ยม

  • อยาก fork คอมไพเลอร์ของ Rust และสร้าง edition ใหม่ชื่อ "seph"
  • สามารถเพิ่มฟีเจอร์ใหม่ได้พร้อมกับคงฟีเจอร์เดิมของ Rust ไว้

function traits (effects)

  • Rust นิยาม traits ให้กับ struct แต่ก็จำเป็นต้องนิยาม traits ให้กับฟังก์ชันด้วย
  • สามารถใช้แสดงคุณลักษณะต่างๆ ของฟังก์ชันได้
    • ฟังก์ชันทำให้เกิด panic หรือไม่
    • มีขนาดสแตกคงที่หรือไม่
    • ฟังก์ชันทำงานจนจบหรือหยุดรอกลางทาง
    • ฟังก์ชันเป็น pure หรือไม่
    • ฟังก์ชันรันโค้ดที่ unsafe หรือไม่
    • ฟังก์ชันรับประกันการสิ้นสุดการทำงานหรือไม่

ฟีเจอร์ระดับคอมไพล์ไทม์

  • โปรเจกต์ Rust จำนวนมากใช้ third-party crates เป็นจำนวนมาก
  • crates เหล่านี้เพิ่มความเสี่ยงด้าน supply chain
  • มีข้อเสนอให้เพิ่มฟีเจอร์ที่ต้องอนุญาตอย่างชัดเจนก่อนเรียกใช้ฟังก์ชันที่อ่อนไหวด้านความปลอดภัย
  • หากจะเรียกใช้ฟีเจอร์อย่าง fs_write ต้องอนุญาตอย่างชัดเจนก่อน

Pin, Move และการยืมของ struct

  • Pin เป็นแฮ็กที่ซับซ้อนเพื่อแก้ปัญหาของ borrow checker ใน Rust
  • การใช้ marker trait Move แทน Pin ดูสมเหตุสมผลกว่า
  • มีข้อเสนอให้เพิ่มไวยากรณ์ที่สามารถระบุฟิลด์ของ struct ให้อยู่ในสถานะถูกยืมได้
  • มีข้อเสนอให้เพิ่ม marker trait Move และ trait Mover

คอมไพล์ไทม์

  • นำฟีเจอร์ comptime ของ Zig มาใช้เพื่อแทนภาษาแมโครของ Rust
  • เพิ่มอินเทอร์พรีเตอร์ขนาดเล็กที่สามารถรันโค้ดได้ในช่วงคอมไพล์ไทม์
  • ใช้ Rust เองแทนภาษาแมโครของ Rust

การแก้ไขเล็กน้อย

  • แก้ไข impl<T: Copy> for Range<T>
  • แก้ไข derive ที่มี associated types
  • รองรับ logical AND ใน expression แบบ if-let
  • ปรับปรุงการใช้งาน raw pointers
  • เพิ่มอาร์กิวเมนต์ Allocator ให้กับ built-in collection types ทั้งหมด

ความคิดส่งท้าย

  • ฟีเจอร์ async ก็ต้องการการปรับปรุงเช่นกัน แต่ควรแยกเป็นอีกโพสต์หนึ่ง
  • การเปลี่ยนแปลงส่วนใหญ่เข้ากันไม่ได้กับ Rust แบบเดิม
  • อาจจำเป็นต้องมี Rust edition ใหม่
  • กำลังพิจารณา fork คอมไพเลอร์ด้วยตนเองแทนที่จะหมดแรงกับกระบวนการ RFC บน GitHub

สรุปโดย GN⁺

  • แม้ Rust จะมีเสน่ห์ในช่วงแรก แต่ก็ไม่ได้สมบูรณ์แบบ
  • การพัฒนาของภาษาช้าลง และฟีเจอร์ที่ยังไม่เสถียรจำนวนมากไม่ได้ถูกรวมเข้าใน Rust รุ่นเสถียร
  • มีข้อเสนอหลายอย่าง เช่น function traits, ฟีเจอร์ระดับคอมไพล์ไทม์, และการปรับปรุง Pin กับ Move
  • ข้อเสนอเหล่านี้อาจช่วยปรับปรุงการใช้งานของ Rust ได้อย่างมาก
  • ภาษาอื่นที่มีฟีเจอร์คล้ายกันคือ Zig

1 ความคิดเห็น

 
GN⁺ 2024-09-27
ความคิดเห็นจาก Hacker News
  • ความคิดเห็นต่อกระบวนการ RFC ของ Rust

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

    • ยกตัวอย่าง crate Cargo-watch ซึ่งเป็นแอปเฝ้าดูไฟล์แบบง่าย ๆ แต่เมื่อรวม dependency แล้วกลับมีโค้ดมากถึง 4 ล้านบรรทัด
  • สถานะปัจจุบันของ Rust

    • ตอนนี้ Rust อยู่ในช่วง "การทำงานเพื่อการยอมรับในวงกว้าง"
    • การพัฒนาฟีเจอร์ที่ช้าลงเป็นเรื่องธรรมชาติและเป็นสัญญาณที่ดี เพราะการตัดสินใจออกแบบที่ผิดอาจสร้างความเสียหายมากกว่า
    • เสน่ห์ของ Rust อยู่ที่การเป็นภาษาที่ปลอดภัยด้านหน่วยความจำและพร้อมใช้งานจริงโดยไม่มี GC มากกว่าการมีฟีเจอร์ใหม่
  • ความคิดเห็นต่อการเขียน Rust ใหม่ด้วย Rust

    • การเขียน Rust ใหม่ด้วย Rust ดูเหมือนเป็นมุกตลกเชิงเสียดสีแบบเมตา
  • ความไม่พอใจต่อกระบวนการตัดสินใจของ Rust

    • มีความไม่พอใจต่อกระบวนการตัดสินใจที่ล่าช้า แต่ปัญหานี้เป็นเรื่องของคนและเวลา มากกว่าจะเป็นปัญหาทางเทคนิค
    • ฟีเจอร์เก่าบางส่วนยังคงค้างอยู่ แต่ก็มีหลายฟีเจอร์ที่จะไม่มีวันถูกทำให้เสถียร
  • ความเห็นของ Josh Triplett

    • เขาชี้ว่าตัวอย่างบางอย่างไม่ถูกต้อง และได้แชร์ลิงก์ที่เกี่ยวข้อง
  • ความคิดเห็นต่อความซับซ้อนของ Rust

    • Rust มีฟีเจอร์อยู่มากแล้ว แต่ก็ยังมีคนที่ต้องการฟีเจอร์เพิ่มอีก
    • Zig เรียบง่ายกว่า เร็วกว่า และมีดราม่าในชุมชนน้อยกว่า
  • ความคิดเห็นต่อความเร็วของ Rust

    • เมื่อโปรเจกต์เติบโตเต็มที่ขึ้น ก็ต้องใช้ความพยายามมากในการขัดเกลาฟีเจอร์เดิม
    • ความร่วมมือระหว่างทีมยากขึ้น และมีเป้าหมายระดับโปรเจกต์เพื่อปรับปรุงเรื่องนี้
  • ความคิดเห็นต่อการปรับปรุง Mutex

    • มีความพยายามอย่างมากในการปรับปรุง primitive สำหรับการซิงโครไนซ์ของ Rust
    • มีการเพิ่มฟีเจอร์อย่าง async function ซึ่งกลายเป็นพื้นฐานสำหรับการสร้างฟีเจอร์ที่ซับซ้อนกว่า
  • ความคิดเห็นต่อความเร็วในการพัฒนาฟีเจอร์ของ Rust

    • มีคนบ่นว่าภาษาพัฒนาเร็วเกินไปหรือช้าเกินไป
    • ฟีเจอร์บางอย่างคืบหน้าช้า แต่ก็ยังมีกิจกรรมจำนวนมากกำลังดำเนินอยู่
  • ความคิดเห็นต่อการออกแบบฟีเจอร์ของ Rust

    • ฟีเจอร์อย่าง function trait เพิ่งมีการสำรวจการออกแบบครั้งใหญ่เมื่อไม่นานมานี้
    • ฟีเจอร์ด้าน compile time ไม่สามารถแก้ได้ในระดับภาษา และทางออกอย่าง WebAssembly มีแนวโน้มเป็นไปได้มากกว่า
  • ปัญหา borrow checker ของ Rust

    • การทำความเข้าใจโครงสร้างแบบอ้างอิงตัวเองเป็นปัญหาที่ยากมาก
    • รู้วิธีรองรับ partial borrow อยู่แล้ว แต่ปัญหาคือจะเปิดเผยสิ่งนี้ออกไปใน type system อย่างไร
  • ฟีเจอร์ compile time ของ Rust

    • มีการเขียน RFC เพื่อทำให้กฎของ macro มีพลังมากขึ้น
    • ยังต้องมีงานเพิ่มอีกมากสำหรับการแยกวิเคราะห์เชิงโปรแกรม
  • ฟีเจอร์ไม่เสถียรของ Rust

    • มีฟีเจอร์ที่ยังไม่เสถียรอยู่มาก และจำเป็นต้องจัดระเบียบสิ่งเหล่านี้
  • ความคิดเห็นต่อความเร็วในการพัฒนาของ Rust

    • การออกจากโครงการของ Mozilla ทำให้โปรเจกต์ช้าลง แต่ก็ยังดีกว่าการเดินไปในทางที่ผิด