Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ภาคผนวก E: รุ่นของภาษา Rust (Editions)

ในบทที่ 1 คุณจะเห็นว่าคำสั่ง cargo new ได้เพิ่มข้อมูลเมทาดาตาบางส่วนลงในไฟล์ Cargo.toml ของคุณเกี่ยวกับรุ่น (edition) ของภาษา ภาคผนวกนี้จะอธิบายถึงความหมายของมัน!

ภาษาและคอมไพเลอร์ Rust มีรอบการเผยแพร่ทุกๆ 6 สัปดาห์ ซึ่งหมายความว่าผู้ใช้จะได้รับคุณลักษณะใหม่ๆ (features) อย่างต่อเนื่อง ภาษาโปรแกรมอื่นๆ มักจะปล่อยการเปลี่ยนแปลงขนาดใหญ่ในระยะเวลาที่นานกว่า แต่สำหรับ Rust จะใช้วิธีปล่อยการอัปเดตย่อยๆ ถี่ขึ้น หลังจากเวลาผ่านไป การเปลี่ยนแปลงเล็กๆ น้อยๆ เหล่านี้จะรวมกันเป็นสิ่งใหญ่ๆ อย่างไรก็ดี หากดูจากการเผยแพร่ในแต่ละรอบแบบปกติ อาจเป็นเรื่องยากที่เราจะมองย้อนกลับไปแล้วพูดว่า “ว้าว ระหว่าง Rust 1.10 กับ Rust 1.31 ภาษา Rust เปลี่ยนแปลงไปมากเลย!”

ดังนั้น ทุกๆ 3 ปีโดยประมาณ ทีมงาน Rust จะกำหนดและจัดทำ Rust รุ่น (edition) ใหม่ออกมา ซึ่งแต่ละรุ่นจะรวบรวมฟีเจอร์ต่างๆ ที่เผยแพร่ไปแล้วมารวมเข้าด้วยกันเป็นแพ็กเกจที่ชัดเจน พร้อมทั้งมีเอกสารและชุดเครื่องมือต่างๆ ที่อัปเดตใหม่อย่างครบถ้วน โดยรุ่นใหม่ๆ นี้จะถูกส่งมอบเป็นส่วนหนึ่งของกระบวนการเผยแพร่ปกติทุกๆ 6 สัปดาห์นั่นเอง

การแบ่งรุ่น (Editions) ทำหน้าที่ตอบโจทย์วัตถุประสงค์ที่แตกต่างกันตามกลุ่มบุคคล:

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

ในขณะที่เขียนหนังสือเล่มนี้ มีรุ่นของภาษา Rust ออกมาแล้ว 4 รุ่นด้วยกัน ได้แก่ Rust 2015, Rust 2018, Rust 2021 และ Rust 2024 หนังสือเล่มนี้เขียนขึ้นโดยใช้รูปแบบและสำนวนภาษา (idioms) ของรุ่น Rust 2024

คีย์ edition ในไฟล์ Cargo.toml บ่งบอกว่าคอมไพเลอร์ควรใช้รุ่นใดสำหรับโค้ดของคุณ หากไม่มีการระบุคีย์ดังกล่าว Rust จะใช้รุ่น 2015 เป็นค่าเริ่มต้นด้วยเหตุผลด้านความเข้ากันได้ย้อนหลัง (backward compatibility)

แต่ละโครงการสามารถเลือกเปลี่ยนไปใช้รุ่นอื่นที่นอกเหนือจากรุ่นเริ่มต้นอย่างรุ่นปี 2015 ได้ รุ่นของภาษาอาจมีการเปลี่ยนแปลงที่ไม่เข้ากันย้อนหลัง เช่น การเพิ่มคำสงวนใหม่ที่ส่งผลขัดแย้งกับชื่อตัวระบุในโค้ดเดิมของคุณ อย่างไรก็ตาม ตราบใดที่คุณไม่ได้ทำการกดเลือกยอมรับ (opt in) เพื่อใช้งานการเปลี่ยนแปลงในรุ่นเหล่านั้น โค้ดของคุณก็จะยังคงคอมไพล์ได้ตามปกติแม้ว่าคุณจะอัปเกรดเวอร์ชันคอมไพเลอร์ Rust ที่คุณใช้งานอยู่ก็ตาม

คอมไพเลอร์ Rust ทุกเวอร์ชันจะสนับสนุนทุกรุ่นของภาษาที่เปิดตัวมาก่อนการเผยแพร่คอมไพเลอร์เวอร์ชันนั้นๆ และสามารถเชื่อมโยงเครต (crates) ต่างรุ่นที่รองรับเข้าด้วยกันได้ การเปลี่ยนแปลงของรุ่นภาษาจะส่งผลเฉพาะต่อวิธีที่คอมไพเลอร์ทำการวิเคราะห์ไวยากรณ์ (parse) โค้ดในขั้นแรกเริ่มเท่านั้น ดังนั้น หากโครงการของคุณใช้รุ่น Rust 2015 แต่หนึ่งในโมดูลที่โครงการของคุณต้องพึ่งพา (dependencies) ใช้รุ่น Rust 2018 โครงการของคุณก็จะสามารถคอมไพล์และเรียกใช้งานโมดูลนั้นได้อย่างไม่มีปัญหา เช่นกันในสถานการณ์สลับกันที่โครงการของคุณใช้ Rust 2018 และตัวพึ่งพาใช้ Rust 2015 ก็สามารถทำงานร่วมกันได้ตามปกติ

ขอชี้แจงให้ชัดเจน: คุณลักษณะ (features) ส่วนใหญ่จะพร้อมใช้งานในทุกรุ่น นักพัฒนาที่ใช้ภาษา Rust รุ่นใดก็ตามจะยังคงได้รับการปรับปรุงประสิทธิผลอย่างต่อเนื่องเมื่อมีการอัปเดตเวอร์ชันเสถียร (stable releases) ใหม่ๆ ออกมา ทว่าในบางกรณี โดยเฉพาะเมื่อมีการเพิ่มคำสงวนใหม่ๆ คุณลักษณะใหม่บางอย่างอาจมีให้ใช้งานได้เฉพาะในรุ่นที่ใหม่กว่าเท่านั้น คุณจำเป็นต้องสลับรุ่นของโครงการหากต้องการใช้ประโยชน์จากคุณลักษณะเหล่านั้น

ศึกษาข้อมูลเพิ่มเติมได้ที่ คู่มือรุ่นของภาษา Rust (The Rust Edition Guide) ซึ่งเป็นหนังสืออย่างเป็นทางการฉบับสมบูรณ์ที่แสดงรายละเอียดความแตกต่างของแต่ละรุ่น ตลอดจนแนวทางสำหรับอัปเกรดโค้ดของคุณไปยังรุ่นใหม่โดยอัตโนมัติผ่านคำสั่ง cargo fix