- 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 ที่ขยายตัวขึ้นในปัจจุบัน
ยังไม่มีความคิดเห็น