• Rust เป็นภาษาแบบ แนวคิดหลากหลายส่วนถักทอกันอย่างแน่นแฟ้น ทำให้แม้แต่การเข้าใจโปรแกรมพื้นฐานก็ต้องเรียนรู้หลายองค์ประกอบไปพร้อมกัน
  • ฟังก์ชัน, เจเนอริก, enum, pattern matching, trait, reference, ownership, Send/Sync, Iterator ฯลฯ ล้วนเป็น องค์ประกอบแกนหลักที่ถูกออกแบบให้ทำงานร่วมกัน
  • เมื่อเทียบกับ JavaScript แล้ว JS สามารถเขียนโค้ดได้แม้รู้เพียงบางแนวคิด แต่ Rust นั้น ต้องเข้าใจบริบทของภาษาทั้งระบบก่อน จึงจะเขียนโค้ดที่มีความหมายได้
  • ความซับซ้อนลักษณะนี้ของ Rust แม้จะเพิ่มกำแพงในการเรียนรู้ แต่ก็ให้ทั้ง ความปลอดภัยและความสม่ำเสมอ และส่งผลอย่างมากต่อวิธีออกแบบโค้ด
  • โครงสร้างทางภาษาที่ร้อยเรียงกันเช่นนี้ทำให้ Rust มีความพิเศษ และวิสัยทัศน์ของ “Rust ที่เล็กลง” ก็ชวนให้กลับมาทบทวน ปรัชญาภาษาที่เชื่อมประสานกันอย่างประณีต

ความยากในการเรียนรู้ Rust

  • แม้ Rust จะมีอุปสรรคในการเริ่มต้นสูง แต่ก็มีผู้คนจำนวนมากร่วมกันพัฒนา เอกสาร, API และการวินิจฉัยข้อผิดพลาด มาโดยตลอด
  • แนวคิดพื้นฐานได้แก่ ฟังก์ชันแบบ first-class, enum, pattern matching, เจเนอริก, trait, reference, borrow checker, ความปลอดภัยด้านการทำงานพร้อมกัน, iterator เป็นต้น
  • แนวคิดเหล่านี้ พึ่งพาและพันเกี่ยวกัน จนยากจะเรียนรู้แยกเป็นส่วน ๆ และไลบรารีมาตรฐานเองก็ใช้ความสามารถเหล่านี้เกือบทั้งหมด
  • ต่อให้เป็นโค้ด Rust ยาวเพียงราว 20 บรรทัด ก็ยังต้องเข้าใจหลายองค์ประกอบพร้อมกัน เช่นกระบวนทัศน์เชิงฟังก์ชัน, Result และการจัดการข้อผิดพลาด, ชนิดข้อมูลแบบเจเนอริก, enum, iterator เป็นต้น

เปรียบเทียบ Rust กับ JavaScript

  • เมื่อเขียนโปรแกรมตรวจจับการเปลี่ยนแปลงไฟล์แบบเดียวกันด้วย Rust และ JS จะเห็นว่า Rust มีแนวคิดทางภาษาจำนวนมากที่เชื่อมโยงกันอยู่
  • โดยพื้นฐานแล้ว JS สามารถเขียนโค้ดที่ทำงานได้ หากเข้าใจเพียง ฟังก์ชันและการจัดการ null
  • นี่ไม่ได้หมายความว่า Rust แค่ยากกว่าเท่านั้น แต่แสดงให้เห็นว่า Rust เป็น ภาษาที่ออกแบบมาให้ต้องอาศัยความเข้าใจเชิงโครงสร้างของทั้งระบบภาษา

การออกแบบแบบเชื่อมโยงถึงกันของ Rust

  • แก่นของ Rust คือ การผสานกันของฟีเจอร์ที่ถูกออกแบบอย่างเป็นองค์รวม
    • enum จะใช้งานได้ไม่สะดวกหากไม่มี pattern matching และ pattern matching เองก็มีข้อจำกัดหากไม่มี enum
    • Result และ Iterator จะไม่สามารถถูกทำให้เกิดขึ้นได้เลยหากไม่มีเจเนอริก
    • แนวคิด Send/Sync และข้อจำกัดของ println จะถูกแสดงอย่างปลอดภัยไม่ได้หากไม่มี trait
    • borrow checker รับประกันความปลอดภัยของ Send/Sync ผ่านการวิเคราะห์การ capture ของ closure
  • การเชื่อมโยงถึงกันแบบนี้ทำให้ Rust ไม่ได้เป็นเพียงชุดของฟีเจอร์ แต่เป็นระบบภาษาที่บูรณาการกัน

วิสัยทัศน์ของ Rust ที่เล็กลง

  • ในปี 2019 without.boats ได้กล่าวถึง “Smaller Rust” พร้อมอภิปรายถึงความเป็นไปได้ของ Rust ที่เล็กและผ่านการขัดเกลา
  • ปัจจุบัน Rust เติบโตขึ้นมากแล้ว แต่แนวคิดของ Rust ที่เล็กลงยังคงช่วย เตือนให้เห็นแก่นแท้ของการออกแบบภาษาที่ประกบกันอย่างประณีต
  • เสน่ห์ของ Rust อยู่ที่องค์ประกอบทางภาษาซึ่งเป็นอิสระต่อกัน แต่เมื่อรวมเข้าด้วยกันแล้วกลับมอบทั้ง พลังในการแสดงออกและความปลอดภัย

บทสรุป

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

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น