บทนำ
หมายเหตุ: หนังสือฉบับนี้เป็นฉบับเดียวกับ The Rust Programming Language ซึ่งมีจำหน่ายทั้งในรูปแบบหนังสือและอีบุ๊กที่ No Starch Press
ยินดีต้อนรับสู่ ภาษาโปรแกรม Rust หนังสือแนะนำเกี่ยวกับ Rust ภาษาโปรแกรม Rust ช่วยให้คุณเขียนซอฟต์แวร์ได้อย่างรวดเร็วและเชื่อถือได้ การยศาสตร์ระดับสูงและการควบคุมระดับต่ำ มักจะขัดแย้งกันในการออกแบบภาษาโปรแกรม Rust กำลังท้าทายความขัดแย้งดังกล่าว ด้วยการสร้างสมดุลระหว่างความสามารถทางเทคนิคอังทรงพลัง และประสบการณ์ของนักพัฒนาที่ยอดเยี่ยม Rust ให้ทางเลือกับคุณในการควบคุมรายละเอียดระดับต่ำ (เช่นการใช้หน่วยความจำ) โดยปราศจากความยุ่งยากที่เกี่ยวข้องกับการควบคุมดังกล่าว
Rust เหมาะกับใคร
Rust เหมาะกับหลาย ๆ คน ด้วยเหตุผลหลากหลายประการ ลองดูบางกลุ่มจากกลุ่มคนที่สำคัญที่สุดกัน
ทีมงานนักพัฒนา
Rust ได้พิสูจน์แล้วว่าเป็นเครื่องมือที่มีประสิทธิภาพ ในการทำงานร่วมกันระหว่างทีมนักพัฒนาขนาดใหญ่ ที่มีความรู้ด้านการเขียนโปรแกรมระบบในระดับต่าง ๆ โค้ดระดับต่ำมีแนวโน้มที่จะเกิดข้อบกพร่องเล็ก ๆ น้อย ๆ มากมาย ซึ่งในภาษาอื่น ๆ ส่วนใหญ่สามารถตรวจพบได้โดยการทดสอบอย่างละเอียด โดยนักพัฒนาที่มีประสบการณ์เท่านั้น ใน Rust คอมไพเลอร์มีบทบาทเป็นผู้เฝ้าประตู โดยปฏิเสธที่จะคอมไพล์โค้ดที่มีข้อบกพร่องที่เข้าใจอยากเหล่านี้ รวมถึงข้อบกพร่องที่เกิดขึ้นพร้อมกัน ด้วยการทำงานร่วมกับคอมไพเลอร์ ทีมต่าง ๆ จึงสามารถใช้เวลามุ่งเน้นไปที่ตรรกะของโปรแกรม แทนที่จะไล่ตามจุดบกพร่อง
Rust ยังนำเครื่องมือการพัฒนาที่ทันสมัยมาสู่โลกแห่งการเขียนโปรแกรมระบบ
- Cargo คือเครื่องมือจัดการการพึ่งพา (dependency) และการคอมไพล์แบบบูรณาการ ทำให้การเพิ่ม การคอมไพล์ และการจัดการการพึ่งพา นั้นง่ายดายและสอดคล้องกันทั่วทั้งระบบนิเวศของ Rust
- Rustfmt เครื่องมือจัดรูปแบบโค้ด ที่ช่วยให้นักพัฒนาซอฟต์แวร์มีรูปแบบการเขียนโค้ดที่สอดคล้องกัน
- rust-analyzer รองรับการเติมโค้ดให้สมบูรณ์ และข้อความแสดงข้อผิดพลาดในบรรทัด ผ่านการทำงานร่วมกับสภาพแวดล้อมสำหรับการพัฒนาแบบเบ็ดเสร็จ (IDE)
การใช้เครื่องมือเหล่านี้และเครื่องมืออื่น ๆ ในระบบนิเวศของ Rust ช่วยให้นักพัฒนาทำงานได้อย่างมีประสิทธิภาพ ขณะเขียนโค้ดระดับระบบ (systems-level code)
นักเรียน
Rust เหมาะกับนักเรียน และผู้ที่สนใจในการเรียนรู้เกี่ยวกับแนวคิดของระบบ ในการใช้งาน Rust ผู้คนต่าง ๆ จะได้เรียนรู้เกี่ยวกับหัวข้อต่าง ๆ เช่น การพัฒนาระบบปฏิบัติการ ชุมชนมีความยินดีเป็นอย่างยิ่ง และยินดีที่จะตอบคำถามของนักเรียน ด้วยความพยายามเช่นหนังสือเล่มนี้ ทีมงาน Rust หวังว่าจะทำให้ผู้คนจำนวนมากสามารถเข้าถึงแนวคิดของระบบได้ โดยเฉพาะผู้ที่กำลังเริ่มเขียนโปรแกรม
บริษัท
บริษัทหลายร้อยแห่ง ทั้งขนาดใหญ่และขนาดเล็ก ต่างใช้ Rust ในการพัฒนาสำหรับงานที่หลากหลาย ไม่ว่าจะเป็น โปรแกรมบรรทัดคำสั่ง, บริการเว็บ, เครื่องมือ DevOps, อุปกรณ์ฝังตัว, การวิเคราะห์และการแปลงรหัสเสียงและวิดีโอ, คริปโทเคอร์เรนซี, ชีวสารสนเทศศาสตร์, เครื่องมือค้นหา, แอปพลิเคชั่นอินเทอร์เน็ตของสรรพสิ่ง (IOT), การเรียนรู้ของเครื่อง (machine learning) และแม้แต่ส่วนสำคัญของเบราว์เซอร์ Firefox
นักพัฒนาโอเพนซอร์ส
Rust เหมาะกับผู้ที่ต้องการพัฒนาภาษาโปรแกรม Rust, ชุมชน, เครื่องมือสำหรับนักพัฒนา, และไลบรารีของ Rust เราหวังอย่างยิ่งว่าคุณจะมีส่วนร่วมในภาษา Rust
ผู้ที่ให้ความสำคัญกับความเร็วและความเสถียร
Rust เหมาะสำหรับผู้ที่ต้องการความเร็วและความเสถียรของภาษาโปรแกรม ความเร็วในที่นี้หมายถึง ความเร็วของโปรแกรมที่สร้างจาก Rust และความเร็วในการเขียนโปรแกรมของคุณ การตรวจสอบของคอมไพเลอร์ Rust จะทำให้คุณมั่นใจได้ในความเสถียร ผ่านการเพิ่มฟีเจอร์และการปรับโครงสร้างใหม่ สิ่งนี้ตรงกันข้ามกับโค้ดดั้งเดิมอันเปราะบาง ในภาษาที่ไม่มีการตรวจสอบ ซึ่งนักพัฒนามักกลัวที่จะแก้ไข ด้วยการมุ่งเน้นไปที่ zero-cost abstractions ฟีเจอร์ระดับสูงสามารถคอมไพล์เป็นโค้ดระดับต่ำ ที่มีประสิทธิภาพเท่ากับโค้ดที่เขียนด้วยมือ Rust มีความมุ่งมั่นที่จะสร้างโค้ดที่ปลอดภัยและรวดเร็วควบคู่กัน
ภาษา Rust หวังที่จะสนับสนุนผู้ใช้งานรายอื่นเช่นกัน ที่ได้กล่าวถึงข้างต้นนั้นเป็นเพียงผู้ที่มีส่วนได้ส่วนเสียรายใหญ่ที่สุดบางส่วนเท่านั้น โดยรวมแล้ว เป้าหมายที่ยิ่งใหญ่ที่สุดของ Rust คือการกำจัดข้อเสียที่โปรแกรมเมอร์ยอมรับมานานหลายทศวรรษ ด้วยการมอบความปลอดภัยและประสิทธิภาพการทำงาน ความเร็วและการยศาสตร์ ลองใช้ Rust ดูว่าเป็นตัวเลือกที่เหมาะกับคุณหรือไม่
หนังสือเล่มนี้เหมาะกับใคร
หนังสือเล่มนี้คาดการณ์ว่าคุณได้เขียนโค้ดในภาษาโปรแกรมอื่นมาก่อน แต่ไม่ได้เจาะจงว่าเป็นภาษาใด เราได้พยายามทำให้เนื้อหานี้สามารถเข้าถึงได้จากผู้ที่มีพื้นฐานการเขียนโปรแกรมที่หลากหลาย เราไม่ได้พูดอะไรมากมายเกี่ยวกับการเขียนโปรแกรมและวิธีคิดของมัน หากคุณเป็นมือใหม่ในการเขียนโปรแกรม คุณควรอ่านหนังสือที่ให้พื้นฐานเกี่ยวกับการเขียนโปรแกรมโดยเฉพาะ
วิธีใช้งานหนังสือเล่มนี้
โดยทั่วไป หนังสือเล่มนี้จะถือว่าคุณได้อ่านตามลำดับจากหน้าไปหลัง บทถัด ๆ ไปจะสร้างจากแนวคิดในบทก่อนหน้า และบทก่อนหน้าอาจไม่เจาะลึกรายละเอียดในหัวข้อใดหัวข้อหนึ่ง แต่จะกลับมาพูดถึงหัวข้อนั้นอีกครั้งในบทต่อ ๆ ไป
คุณจะพบว่ามีบทสองประเภทในหนังสือเล่มนี้ คือบทภาคทฤษฎี และบทภาคปฏิบัติ ในบทภาคทฤษฎี คุณจะได้เรียนรู้เกี่ยวกับแง่มุมหนึ่งของ Rust ในบทภาคปฏิบัติ เราจะพาคุณสร้างโปรแกรมเล็ก ๆ โดยนำสิ่งที่คุณได้เรียนรู้มาประยุกต์ใช้ บทที่ 2 12 และ 20 เป็นบทภาคปฏิบัติ ส่วนที่เหลือเป็นบทภาคทฤษฎี
บทที่ 1 จะอธิบายวิธีการติดตั้ง Rust วิธีเขียนโปรแกรม “Hello, world!” และวิธีใช้งาน Cargo ซึ่งเป็นเครื่องมือจัดการแพ็คเก็จและเครื่องมือคอมไพล์แบบบูรณาการ บทที่ 2 เป็นการแนะนำการเขียนภาษา Rust แบบลงมือทำ โดยจะให้คุณสร้างเกมทายตัวเลขขึ้นมา ใบบทถัด ๆ ไปจะครอบคลุมถึงแนวคิดระดับสูงและรายละเอียดเพิ่มเติม หากคุณต้องการเข้าสู่โลกของ Rust ทันที่ หากคุณต้องการเริ่มเขียน Rust ทันที บทที่ 2 จะเหมาะสำหรับคุณ บทที่ 3 ครอบคลุมถึงคุณสมบัติต่าง ๆ ของ Rust ที่คล้ายกับภาษาโปรแกรมอื่น ๆ และในบทที่ 4 คุณจะได้เรียนรู้เกี่ยวกับระบบ ownership ของ Rust หากคุณเป็นผู้เรียนที่ละเอียดรอบคอบเป็นพิเศษ และชอบที่จะเรียนรู้ทุกรายละเอียดก่อนจะไปบทถัดไป คุณอาจต้องการข้ามบทที่ 2 ไปยังบทที่ 3 เพื่อเก็บรายละเอียดต่าง ๆ ก่อนจะกลับมายังบทที่ 2 เพื่อลงมือปฏิบัติไปพร้อมกับรายละเอียดที่คุณได้รับ
บทที่ 5 จะกล่าวถึง struct และ method
และบทที่ 6 เนื้อหาจะครอบคุมถึง enum, การส่งออก match
,
และโครงสร้างควบคุมการทำงาน if let
ใน Rust คุณสามารถใช้ struct และ enum เพื่อสร้างประเภทของตัวแปรที่คุณกำหนดเองได้ (custom types)
ในบทที่ 7 คุณจะได้เรียนรู้กับระบบ module ของ Rust และกฎเกณฑ์ความเป็นส่วนตัวเพื่อจัดระเบียบโค้ดของคุณ และส่วนต่อประสานโปรแกรมประยุกต์ (API) บทที่ 8 จะกล่าวถึงโครงสร้างข้อมูลการรวบรวมโดยทั่วไปบางอย่าง ที่ไลบรารีมาตรฐานจัดเตรียมไว้แล้ว เช่น vector, string, และ hash map บทที่ 9 จะสำรวจปรัชญาและเทคนิคการจัดการข้อผิดพลาดของ Rust
บทที่ 10 จะเจาะลึกเกี่ยวกับ trait และ lifetime โดยทั่วไป ซึ่งให้อำนาจแก่คุณในการกำหนดโค้ดที่นำไปใช้ได้กับหลากหลายประเภท
บทที่ 11 เป็นเรื่องเกี่ยวกับการทดสอบ ซึ่งแม้จะมีการรับประกันความปลอดภัยของ Rust
แต่ก็เป็นสิ่งจำเป็นเพื่อให้แน่ใจว่าโปรแกรมของคุณทำงานได้อย่างถูกต้อง
ในบทที่ 12 เราจะพาคุณสร้างโปรแกรมที่มีการทำงานบางอย่าง จากโปรแกรมบรรทัดคำสั่ง grep
ซึ่งสามารถค้นหาข้อความภายในไฟล์ โดยเราจะใช้แนวคิดหลายอย่างที่ได้กล่าวถึงในบทที่แล้ว
บทที่ 13 จะสำรวจตัวปิดและการวนซ้ำ ในคุณสมบัติของ Rust ที่มาจากการเขียนโปรแกรมเชิงฟังก์ชัน ในบทที่ 14 เราจะเจาะลึกมากขึ้นเกี่ยวกับ Cargo และพูดคุยเกี่ยวกับแนวทางการปฏิบัติที่ดีที่สุดในการแบ่งปันไลบรารีของคุณกับผู้อื่น บทที่ 15 จะอภิปรายถึง smart pointer ที่ไลบรารีมาตรฐานจัดเตรียมไว้ให้ และ trait ที่เปิดใช้งานฟังก์ชั่นต่าง ๆ
ในบทที่ 16 เราจะกล่าวถึงโมเดลต่าง ๆ ในการเขียนโปรแกรมแบบพร้อมกัน (concurrent programming) และพูดคุยเกี่ยวกับวิธีที่ Rust ช่วยคุณในการเขียนโปรแกรมในหลายเธรดโดยไม่ต้องกังวล ในบทที่ 17 เราจะต่อยอดโดยการสำรวจไวยากรณ์ async และ await ของ Rust และโมเดลการทำงานแบบพร้อมกันที่ใช้ทรัพยากรน้อย ซึ่งพวกเขารองรับ
ในบทที่ 18 จะดูว่าสำนวนของ Rust เป็นอย่างไร เมื่อเปรียบเทียบกับหลักการเขียนโปรแกรมเชิงวัตถุที่คุณอาจคุ้นเคย
บทที่ 19 เป็นการอ้างอิงถึงรูปแบบ และการจัดการรูปแบบ ซึ่งเป็นวิธีที่มีประสิทธิภาพในการแสดงออกถึงแนวคิด ตลอดทั้งโปรแกรมของ Rust บทที่ 20 ประกอบด้วยหัวข้อระดับสูงที่น่าสนใจ รวมถึง unsafe ใน Rust, macro, และอื่น ๆ เกี่ยวกับ lifetime, trait, type, function, และ closures
ในบทที่ 21 เราจะทำโปรเจกต์ให้เสร็จสมบูรณ์ โดยเราจะใช้งานเว็บเซิร์ฟเวอร์แบบมัลติเธรดระดับต่ำ
สุดท้ายนี้ ภาคผนวกบางส่วนมีข้อมูลที่เป็นประโยชน์เกี่ยวกับภาษา Rust ในรูปแบบที่คล้ายกับการอ้างอิง ภาคผนวก A ครอบคลุมถึงคีย์เวิร์ดของ Rust ภาคผนวก B ครอบคลุมถึงตัวดำเนินการและสัญลักษณ์ของ Rust ภาคผนวก C ครอบคลุมถึงการสีบถอด trait ที่มีในไลบรารีพื้นฐาน ภาคผนวก D ครอบคลุมถึงเครื่องมือพัฒนาที่มีประโยชน์ และภาคผนวก E อธิบายถึงรุ่นต่าง ๆ ของ Rust ในภาคผนวก F คุณจะพบกับหนังสือเล่มนี้ในภาษาอื่น ๆ ที่ได้รับการแปล และในภาคผนวก G จะกล่าวถึง Rust เกิดขึ้นมาได้อย่างไร และ Rust แบบ nightly คืออะไร
ไม่มีวิธีใดผิดในการอ่านหนังสือเล่มนี้ หากคุณต้องการข้ามบางส่วนไป อย่าลังเลที่จะทำ! หากคุณรู้สึกสับสน คุณอาจต้องย้อนกลับไปยังบทก่อนหน้า อย่างไรก็ตาม จงเลือกวิธีที่เหมาะกับคุณ
ส่วนสำคัญของกระบวนการเรียนรู้ Rust คือการเรียนรู้วิธีอ่านข้อความรายงานข้อผิดพลาดที่คอมไพเลอร์แสดง ข้อความเหล่านั้นจะช่วยนำคุณไปสู่โค้ดที่ใช้งานได้ ด้วยเหตุนี้ เราจะยกตัวอย่างโค้ดมากมายที่ไม่สามารถคอมไพล์ไปพร้อมกับข้อความแสดงข้อผิดพลาด ที่คอมไพเลอร์แสดงให้คุณเห็นในแต่ละสถานการณ์ โปรดทราบว่าหากคุณสุ่มเลือกตัวอย่างและทำการรัน ตัวอย่างนั้นอาจไม่สามารถคอมไพล์ได้! ตรวจสอบให้แน่ใจว่าคุณได้อ่านข้อความโดยรอบ เพื่อดูว่าตัวอย่างโค้ดที่คุณพยายามรันนั้นมีข้อผิดพลาดหรือไม่ Ferris จะช่วยคุณแยกแยะโค้ดที่อาจไม่ทำงาน:
Ferris | ความหมาย |
---|---|
โค้ดนี้ไม่สามารถคอมไพล์ได้! | |
โค้ดนี้ทำให้เกิด panic! | |
โค้ดนี้ไม่ได้ทำงานตามที่ต้องการ |
ในสถานการณ์ส่วนใหญ่ สำหรับโค้ดที่ไม่สามารถคอมไพล์ได้ เราจะนำทางคุณไปสู่โค้ดในเวอร์ชั่นที่ถูกต้อง
ซอร์สโค้ด
ไฟล์ต้นฉบับที่ใช้สร้างหนังสือเล่มนี้ถูกเผยแพร่อยู่บน Github
หมายเหตุ: ดูเวอร์ชั่นภาษาไทยคลิกที่นี่