Are you … (\|) ._. (|/) …?

jo@sabotender
KBTG Life
Published in
7 min readMar 28, 2023
Ferris, An Unofficial Mascot of Rust (Img Credit)

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

ก่อนหน้านี้ผมได้เขียนบทความเรื่อง ช้างที่อยู่ในห้อง (An Elephant in the Room) เล่าถึงการเรียนรู้ของ Developers ที่จำเป็นอย่างยิ่งในโลกยุคนี้ที่หมุนไปอย่างรวดเร็ว ในเวลาช่วงต้นปีแบบนี้ นอกจากมนุษย์เงินเดือนอย่างพวกเราจะตั้งตารอโบนัสกันแล้ว ก็ยังเป็นช่วงที่หลายคนกำหนดเป้าหมายของตัวเองกันในปีนี้อีกด้วย โดยที่ KBTG เราจะตั้งเป้าหมายกัน 2 ประเภทด้วยกัน อย่างแรกเรียกว่า Goals เป็นการตั้งเป้าหมายโดยตรงที่สัมพันธ์กับ OKRs ภาพใหญ่ของบริษัท และอย่างที่สองเรียกว่า IDP หรือ Individual Development Plan เป้าหมายส่วนตัวซึ่งจะช่วยพัฒนาและสนับสนุนให้เราทำ Goals ได้อย่างดีมีประสิทธิภาพ ใช่ครับ! พลังแห่งการเรียนรู้นี่แหละคือคำตอบของการพัฒนาอย่างก้าวกระโดดและยั่งยืน

ปกติแล้วผมจะแบ่งแผนพัฒนาตัวเองในแต่ละปีออกเป็น 3 อย่าง ดังนี้

  • ปรับปรุงสิ่งที่ยังทำได้ไม่ดีให้ดีขึ้น
  • ต่อยอดสิ่งที่ดีอยู่แล้ว ให้ดีขึ้นไปอีก
  • ลองทำในสิ่งที่ไม่เคยทำมาก่อน >>> และแน่นอนครับ ในข้อนี้ของปีนี้ผมตั้งใจจะลองเป็น Rustaceans ดูกับเขาบ้าง

Table of Contents

เนื้อหาของบทความนี้ ผมจะแบ่งออกเป็น 4 ส่วนตามนี้ครับ

The Current State of Rust

จริงๆ ผมได้ยินชื่อเสียงของภาษา Rust มาพักใหญ่แล้ว แต่ไม่มีโอกาสในการศึกษาอย่างจริงจังสักที ตัวผมเองจากที่เขียน Java มานมนาน เมื่อประมาณ 4 ปีก่อนก็ได้ไปลองภาษา Go กับ Python มาอย่างละนิดอย่างละหน่อย โดยผมรู้สึกว่าภาษาในการเขียนโปรแกรมแต่ละภาษาก็ยังมีความคล้ายคลึงกันอยู่ประมาณนึง แม้ว่า Syntax หรือ Libraries จะแตกต่างกันก็ตาม ซึ่งก็ถือเป็นเรื่องปกติครับ แต่พอผมได้มาลองจับ Rust เท่านั้นแหละ ผมรู้สึกว่ามันมีอะไรบางอย่างที่ต่างออกไปอย่างชัดเจนเลย ยิ่งทำให้รู้สึกสนใจ ตอนผมทำงานเป็นกรรมการสัมภาษณ์ ผมได้ยินผู้สมัครหลายคนบอกว่าภาษาในการเขียนโปรแกรมมันก็แตกต่างกันแค่ Syntax เท่านั้น แต่ผมว่าไม่ใช่สำหรับ Rust

เอ้า… ขายของหน่อย

Stack Overflow Developer’s Survey 2022

ปี 2022 ที่ผ่านมา Rust ครองตำแหน่งภาษาอันเป็นที่รักของนักพัฒนา (The Most Loved Programming Language) ต่อเนื่องเป็นปีที่ 7 จากผลสำรวจประจำปีของ Stack Overflow ที่ไม่น่ามี Developers คนไหนไม่รู้จัก ซึ่งตำแหน่งอันทรงคุณค่านี้ได้มาจากคำถามประมาณว่าถ้าคุณใช้ Rust อยู่ คุณอยากที่จะใช้ Rust ต่อไปหรือไม่ ซึ่งมีคนถึง 87% ที่ Say Yes! เรียกว่าคะแนนนำโด่งเลยทีเดียว (ถ้าเราเหลือบไปดู Java เนี่ย คนทำงานที่อยากเลิกเยอะกว่าคนอยากใช้ต่อครับ)

อีกตำแหน่งนึงคือเทคโนโลยีที่เป็นที่ต้องการมากที่สุด (The Most Wanted Technology) ซึ่งได้อันดับหนึ่งคู่กับ Python ตามมาด้วย TypeScript ที่คะแนนใกล้เคียงกันมากๆ ส่วนอันดับสี่ก็เป็นของภาษา Go ที่ตามติดกันมาครับ ซึ่งทั้งหมดนี้เรียกได้ว่าเป็นภาษาที่มาแรง มีคะแนนนิยมอยู่ในขาขึ้นอย่างที่เราไม่ต้องสงสัย นอกจากนี้ภาษา Rust ยังเป็นภาษาที่ Developers ลงความเห็นว่าเป็นภาษาที่อยากเรียนรู้มากที่สุดในชั่วโมงนี้ เทียบเท่ากับภาษา Go เลยทีเดียว

Image by Engin Akyurt from Pixabay

ในอีกมุมหนึ่ง ตอนนี้เทรนด์ ESG (Environmental, Social, and Governance) กำลังมา นั่นหมายถึงไม่ว่าเราจะทำธุรกิจอะไร อาชีพอะไร เราควรใส่ใจดูแลสิ่งแวดล้อมและมีความรับผิดชอบต่อสังคมส่วนรวม ซึ่งแน่นอนว่า Developers อย่างเราก็สามารถอยู่ในเทรนด์นี้ด้วยสิ่งที่เรียกว่า Green Coding ครับ (ถ้ามีโอกาสผมจะเขียนอธิบายเรื่องนี้อีกทีนะ) หลายคนอาจจะเคยได้ยินมาบ้าง หรือต่อให้ไม่เคยได้ยินก็น่าจะสามารถเดาความหมายได้ไม่ยาก

มีงานวิจัยนึงที่หลายสำนักมักจะกล่าวถึงหรือนำมาใช้เพื่ออ้างอิงครับ งานวิจัยนี้ทำขึ้นครั้งแรกโดยชาวโปรตุเกสในปี 2017 และมาทบทวนอีกครั้งหนึ่งเมื่อปี 2021 ผมอธิบายง่ายๆ ว่าเป็นการทดลองเพื่อหา Greenest Programming Language หรือภาษาในการเขียนโปรแกรมที่เป็นมิตรกับสิ่งแวดล้อมที่สุด ซึ่งก็น่าสนใจว่าเขาทำการทดลองอย่างไร คำตอบโดยสรุปก็คือเขาทำการทดลองเพื่อหา

  • Execution Time ความเร็วในการทำงาน
  • Memory Usage ปริมาณหน่วยความจำที่ใช้
  • ผลของสองสิ่งนี้ที่มีต่อ Energy Consumption หรือปริมาณการใช้พลังงาน

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

The global results (on average) for Energy, Time, and Mb normalized to the most efficient language in that category. Source: Pereira, et al. (2021)

ทีนี้สิ่งที่น่าสนใจจากตารางด้านบน เราจะเห็นว่า Rust เป็นภาษาที่มีการบริโภคพลังงานน้อยที่สุดเป็นอันดับสองรองจากภาษา C ในระดับที่ตัวเลขใกล้เคียงกันมาก และงานวิจัยนี้ได้ให้มุมมองที่น่าสนใจอีกอย่างหนึ่ง ก็คือภาษาที่ใช้เวลาในการทำงานน้อยหรือใช้หน่วยความจำน้อยไม่ได้บริโภคพลังงานในอัตราที่น้อยตามเสมอไป เราลองดูภาษา Java จะเห็นว่ามันบริโภคหน่วยความจำมากมาย แต่พอดูอัตราการใช้พลังงานกลับน้อยซะงั้น ก็ทำให้แปลกใจอยู่นิดๆ เหมือนกัน

TIOBE Programming Community Index on February 2023

ส่วนสุดท้ายอยากจะพามาดูคะแนนนิยมจากฝั่ง Community กันบ้าง เริ่มที่คะแนนนิยมจาก TIOBE Index ที่จัดอันดับ Popular Programming Languages แบบไม่แบ่งแยกตามกลุ่มการใช้งาน นั่นคือเอาภาษาในการเขียนโปรแกรมทั้งหมดมาจัดอันดับร่วมกันเลย ซึ่งดูไว ๆ มีทั้งหมดเกินร้อยภาษาแน่นอน ใครสนใจว่าเขาหามาได้อย่างไรก็สามารถไปศึกษาได้ที่นี่ครับ ส่วนผมเอาผลล่าสุด ณ เวลาที่เขียนบทความนี้ ก็คือสถิติเมื่อเดือนกุมภาพันธ์ 2023 ที่ผ่านมาให้ดูว่า Rust กลับเข้ามาติด Top 20 อีกครั้ง ในอันดับที่ 20 เป๊ะ ก็คาบเส้นนั่นแหละ ถ้าย้อนไปดูกราฟจะเห็นว่าความนิยมของ Rust มีแนวโน้มที่สูงขึ้นอย่างมีนัยสำคัญตั้งแต่ปี 2015 ซึ่งเป็นปีแรกที่ Rust ออก Stable Release เป็นต้นมา แม้ว่าหลายแหล่งจะบอกว่า Rust เป็นผู้สืบทอดของ C/C++ แต่เราจะเห็นว่าถึงของจะดียังไง ก็ต้องใช้เวลาอยู่ดี และถ้าเราย้อนดูประวัติศาสตร์ของ TIOBE Index จะพบว่า C/C++ จะติดอยู่ในโซน Top 5 มาตั้งแต่อดีตกาลเลยทีเดียว

Edited:
TIOBE Index นั้นอัพเดทเป็นรายเดือนครับ ผมกลับมาดูอีกครั้งในเดือนเมษายน 2023 ภาษา Rust เราเขยิบขึ้นมาเป็นอันดับที่ 19 แล้ว!

ถัดมาขอพาไปดูข้อมูลจาก SlashData State of the Developer Nation ฉบับที่ 23 เป็นข้อมูล ณ Q3 ปี 2022 ที่เก็บข้อมูลจากนักพัฒนามากกว่า 26,000 คน ได้ให้ข้อมูลที่น่าสนใจว่า กลุ่มมหาชนหรือ Community ของภาษา Rust นั้นโตเร็วที่สุดโดยโตขึ้นมากกว่า 3 เท่าภายในระยะเวลา 2 ปีเท่านั้น

SlashData: State of the Developer Nation 23rd Edition

เมื่อต้นปี 2020 จำนวน Rust Developers มีแค่ประมาณ 600,000 คนเท่านั้น และจากรูปด้านบนจะเห็นว่าใน Q3 2022 กลายเป็น 2.8 ล้านคนไปเรียบร้อยแล้ว ในขณะที่ถ้าเราไปดู Programming Language Index ของ SlashData จะเห็นว่า Rust นั้นเติบโตจากอันดับที่ 14 ขึ้นมาเป็นอันดับ 12 ในปัจจุบัน (ผมไม่ได้เอารูป Index มาให้ดูในที่นี้นะครับ แต่สามารถตามเข้าไปดูในที่เอกสารของ SlashData ที่ให้ไว้ใต้รูปด้านบนครับ)

GitHub Octoverse 2022 The Fastest Growing Languages

มาถึงเจ้าสุดท้าย ตอกย้ำกันอีกทีกับสถิติการเติบโตจาก GitHub Octoverse ปี 2022 ที่ผ่านมา แสดงให้เห็นว่าสังคม Rust ในอุตสาหกรรม Open-Source โตขึ้นเร็วมากๆ จากรูปด้านบนจะเห็นว่าอยู่อันดับสอง รองจาก HCL (Hashicorp Configuration Language) ไปนิดหนึ่งเท่านั้นเอง

History of Rust

Rust เกิดมาจากโปรเจคส่วนตัวของคุณ Graydon Hoare ในปี 2006 ขณะที่ทำงานอยู่กับบริษัท Mozilla ต่อมาบริษัทเห็นแววรุ่งก็เลยสนันสนุนโปรเจคนี้อย่างเป็นทางการ และประกาศออกสื่อในปี 2010 พร้อมบอกด้วยว่าจะนำมาใช้ในการพัฒนา Browser Engine ตัวใหม่

ที่มาของชื่อ Rust

หลายสื่อเล่าว่า เฮีย Graydon บอกเองว่าชื่อ Rust มาจากเชื้อราชนิดหนึ่ง ผมลองไปหาข้อมูลดูพบว่าในบ้านเราน่าจะเรียกว่า “ราสนิม” เชื้อรานี้มีสมบัติ Robust, Distributed และ Parallel สอดคล้องกับคุณสมบัติของภาษา Rust ซึ่งแหล่งข่าวบอกว่านอกจากเฮียแกจะชอบวิชา Compiler แล้ว เฮียแกยังชอบวิชาชีววิทยาด้วย “อืม… คอมพิวเตอร์กับชีววิทยาก็ไปกันได้แฮะ” ผมคิดในใจ

“Rust Fungus” Image by Hans from Pixabay

โลโก้ของ Rust

สำหรับโลโก้ของ Rust ผมก็ไปเจอโพสของเฮีย Graydon ที่เข้ามาตอบกระทู้ประมาณว่า มันมาจากที่ทีมงานของเขาชอบขี่จักรยานกัน ไอ้เจ้าชิ้นส่วนที่เป็นเฟืองขับ (Bike Chainring) มันก็ชอบขึ้นสนิม และรูปร่างมันก็เจ๋งง่ะ เลยจับมาใส่ตัว R ซะเลย “โอเค… คราวนี้เป็นคอมพิวเตอร์กับพาหนะ” ผมคิดในใจ

Rust’s Logo
เฮีย Graydon เล่าถึงความเป็นมาของโลโก้ Rust

แล้ว “ปู” มาได้ไง?

ปูมาจากคำที่มหาชนชาว Rust Developers เรียกตัวเองว่า Rustaceans ที่มาจากการเล่นคำภาษาอังกฤษคำว่า “Crustacean” อีกทีหนึ่ง โดยคำว่า Crustacean นั้นหมายถึงพวกสัตว์น้ำที่มีเปลือกแข็ง และต่อมาก็มีคุณ Karen Rustad Tölva ได้ทำการออกแบบเจ้าปูให้มีความน่ารักฟุ้งฟิ้งขึ้นมาแล้วให้ชื่อว่า “Ferris the Crab” (ลองกลับขึ้นไปดูรูปแรกสุดของบทความนี้ได้ครับ) ซึ่งก็แพร่หลายออกไปกลายเป็น Mascot แบบไม่เป็นทางการของภาษา Rust ในที่สุด โดยชื่อ Ferris ก็มาจากการเล่นคำจากคำว่า Ferrous ที่แปลว่า “เกี่ยวกับเหล็ก” ซึ่งก็เป็นการเล่นกับความหมายของคำว่า Rust ที่แปลว่า สนิม อีกทีนึง “อืมมมม… หลายชั้นจริง ๆ” ผมคิดในใจอีกครั้ง

“Crustaceans” by Peter Wilton, CC BY 2.0 , via Wikimedia Commons

น้อน Ferris มีผลิตเป็นสินค้าจำหน่ายหลายหลากรูปแบบ น่ารัก อยากด้ายยยยย ใครมีบริจาคให้ผมบ้าง

Rust Ferris Plushie at DevSwag

Rust Foundation

Rust ออกเวอร์ชัน 1.0 ซึ่งเป็น Stable Release แรกในปี 2015 แต่ผมเข้าใจว่าเฮีย Graydon ในเวลานั้นได้ลาออกจาก Mozilla แล้ว ซึ่งต่อมาเฮียแกได้รับการติดต่อจาก Apple ให้ไปดูแลภาษา Swift ต่อ ผมเคยอ่านบทสัมภาษณ์หลังจากที่แกออกมาแล้ว แกก็บอกว่าชอบทั้งสองภาษาเลย และเชื่อว่าภาษา Rust สามารถไปต่อได้ดี อย่างไรก็ตามชื่อเฮียแกก็กลายเป็นตำนาน Originator ของภาษา Rust ไปเรียบร้อยแล้ว

ต่อมาในปี 2021 เมื่อผ่านช่วงระบาดของ COVID-19 ได้มีการร่วมกันก่อตั้ง Rust Foundation ขึ้นโดย 5 บริษัทยักษ์ใหญ่ ได้แก่ AWS, Huawei, Microsoft, Google และ Mozilla เพื่อขับเคลื่อนเทคโนโลยีเกี่ยวกับ Rust ทั้งหมด ซึ่งปัจจุบันมีสมาชิกเข้าร่วมเพิ่มขึ้นมากมาย และมีขาใหญ่เพิ่มเข้ามาอีก 2 คือ Meta และ JFrog

Edited:
ถ้าจะกล่าวถึงขาใหญ่ใน Rust Foundation ผมแนะนำบทความสั้น ๆ ของ AWS ให้เพิ่มเติมครับ Why AWS loves Rust, and how we’d like to help เพื่อประกอบการตัดสินใจครับ ^^

สำหรับ Microsoft ผมออกจะงง ๆ นิดนึง เพราะอย่างที่พวกเรารู้กันว่าระบบปฏิบัติการ Windows นั้นมีส่วนของภาษา C/C++ อยู่มาก และ Rust นั้นน่าสนใจถึงขนาดจูงใจให้ Microsoft หันมาดูว่าจะสามารถใช้ Rust เข้ามาทดแทน C/C++ ได้อย่างไร แต่ในขณะเดียวกัน Microsoft ก็ได้แรงบันดาลใจจากภาษา Rust และเป็นกรณีศึกษาวิจัยจนก่อเกิดเป็นโครงการ Verona ที่มุ่งเป้าศึกษาหลักของ Concurrency Ownership เพื่อสร้าง Infrastructure Programming Language ภาษาใหม่ที่มีคุณสมบัติหลักคือ Memory Safety เช่นเดียวกันกับ Rust นั่นเอง

และสำหรับ Google ผมว่าออกแนวเรียนรู้เพื่อทำแข่งซะมากกว่า ซึ่งผมจะกล่าวถึงอีกทีในช่วงท้ายของบทความครับ

Compelling Rust

เล่ามาตั้งนาน ถ้าจะให้ลงเนื้อหาสาระว่าภาษา Rust มีอะไรที่ต๊าซซซซซซ (ขอใช้ศัพท์อินเทรนด์) บ้าง ผมเองที่ยังเป็น Baby Rustaceans อยู่ คงบอกได้แค่ผิวๆ ครับ แต่ก็แอบคิดว่าถ้าสิ่งเหล่านี้ทำให้ผมรู้สึกสนใจในภาษา Rust ได้ มันก็อาจจะทำให้ท่านผู้อ่านหันมาสนใจภาษา Rust ได้เช่นเดียวกัน

Rust นำเสนอความสมดุลหรือจะเรียกว่า Trade-offs ที่แปลกใหม่ระหว่าง Low-Level Coding Concepts (นึกถึงภาษา C สมัยที่เราเรียนวิชา System Programming ที่มี ประมาณ Pointer ของ Pointer ของ Pointer) กับ High-Level Coding Concepts ในภาษาสมัยใหม่ (นึกถึงพวก Interfaces, Abstraction, Functional Programming เป็นต้น)

ทีนี้อยากจะยกตัวอย่างแบบเทคนิคอลขึ้นมาให้เห็นภาพหน่อย

  • Rust นำเสนอ Concurrency Programming แบบ Data Race Free!
    นอกจากจุดขายยอดนิยมของภาษา Rust ในเรื่องของ Memory Safety แล้ว ใครที่ต้องเขียนโปรแกรมยุ่งเกี่ยวกับ Concurrency อยู่น่าจะเข้าใจเลยว่าปัญหา Data Race เป็นสุดยอดปัญหาในหมู่ปัญหาเลย ทั้ง Debug ได้ยาก แก้ไขก็ยาก หลายภาษาต้องออกเครื่องมือมาตรวจจับ Data Races โดยเฉพาะ แต่สำหรับ Rust นอกจากคุณจะไม่เจอพวก Null Pointer References, Dangling Pointers, Invalid Memory Addresses แล้วคุณยังกำจัด Data Races ออกไปได้อย่างเหลือเชื่อ
  • Rust นำเสนอ Type-Safe และ Memory Safe ณ Compile-time โดยไม่ต้องใช้ Garbage Collection!!
    ในภาษาสมัยใหม่ที่ไม่อยากให้ Developers ต้องมากังวลกับเรื่อง Memory Management ที่แสนสาหัสเช่นเดียวกับภาษา C/C++ ภาษาเหล่านั้นมักจะมีสิ่งที่เรียกว่า Garbage Collector ติดมาใน Runtime ด้วย เพื่อจุดประสงค์ในการจัดการกับพื้นที่ในหน่วยความจำ และในบางภาษาเช่น Java ก็ถึงขนาดเอา Pointer ออกไปเลยทีเดียว การมี Garbage Collector นั้นแลกมาด้วย Resources ที่ต้องเสียไปให้กับมันเวลาทำงาน ซึ่งแต่ละภาษาก็มากน้อยต่างกันไป แต่สำหรับ Rust ไม่ต้องการ Garbage Collector เลยซะงั้น ในขณะที่การันตีว่าคุณจะไม่มีปัญหากับพื้นที่ในหน่วยความจำ และยังทำงานได้อย่างรวดเร็วอีกต่างหาก ตอนแรกผมก็รู้สึกว่า อารั้ยยยย..มันจะดูดีเกินจริงขนาดนี้ จนได้มาจับของจริงนี่แหละ
  • Rust นำเสนอ Abstraction Concepts ได้ในแบบ No (or Minimal) Performance Cost!!!
    ข้อนี้อธิบายง่าย ๆ ยากครับเนื่องจากจะให้ดีผมคิดว่าเราต้องไปลงมือเขียน Rust สักหน่อยก่อนเพื่อสัมผัสฟีเจอร์บางอย่างที่คนแบบผมซึ่งเคยชินกับ Java มาอย่างยาวนานรู้สึกแปลกใจมาก ๆ ว่ามันทำได้อย่างไรครับ จะให้ยกตัวอย่างก็คือ ฟีเจอร์ Traits กับ Async/Await ของ Rust

ผมว่า Rust ดำเนินรอยตาม Zero-overhead principles ที่ให้ไว้โดยผู้สร้างภาษา C++ ได้ดีนั่นคือ ผมขอยกภาษาอังกฤษมาเลยนะครับ ผมว่ามันขลังกว่า

- What you don’t use, you don’t pay for
- What you do use is just as efficient as what you could reasonably write by hand

จนถึงตอนนี้ ผมค่อนข้างรู้สึกชัดเลยว่า Rust ผลักภาระบางอย่างมาให้โปรแกรมเมอร์เขียนโค้ดลำบากขึ้นครับ แต่มันก็แลกมาด้วยผลลัพธ์ที่ดีและแตกต่างอย่างไม่น่าเชื่อ ซึ่ง Rust เองมองว่า Trade-offs นี้คุ้มค่า! เวลาผมเรียนภาษา Rust ไป มันทำให้ผมนึกถึงคำว่า Mechanical Sympathy ขึ้นมาตะหงิดๆ ถ้าใครไม่รู้จักคำนี้ให้ลองเอาคีย์เวิร์ดนี้ไปค้นดูได้นะครับ มีสื่อถึงความหมายประมาณว่า ถ้าเราเข้าใจคอมพิวเตอร์มากขึ้น เราก็จะเป็นโปรแกรมเมอร์ที่เก่งขึ้นด้วย และ Rust ทำให้เราเป็นแบบนั้น

ผมชอบประโยคนึงในอินเตอร์เน็ตที่เขาพูดถึง Rust ว่าเป็นภาษาที่ใกล้เคียงกับประโยคนี้ครับ “Once your code compiles, it is correct!”

ผมอยากจะยกตัวอย่างเพิ่ม ซึ่งเป็นเรื่องเล็กๆ สำหรับคนที่เคยเขียนโปรแกรมมาก่อนจะต้องคุ้นเคยอย่างแน่นอน นั่นคือ การประกาศตัวแปร ครับ “ตัวแปร” ที่ภาษาอังกฤษเรียกว่า “Variables” นั้น Rust บอกว่า ถึงคำว่า Variable มันจะแปลว่าเปลี่ยนแปลงบ่อย แต่ส่วนมากเวลาเราใช้ตัวแปรในการเขียนโปรแกรมจริงๆ แล้ว ค่ามันไม่ค่อยเปลี่ยนหรอก ดังนั้นเวลาเราประกาศตัวแปรในภาษา Rust มันจะมีคุณสมบัติเป็น Immutable by Default ครับ แต่ถ้าเราอยากให้ตัวแปรนั้นสามารถแก้ไขได้ จะต้องใส่คีย์เวิร์ดอีกตัวหนึ่งกำกับเป็นพิเศษ ซึ่งพอผมนึกถึงภาษา Java ที่ผมคุ้นเคยนั้นมันกลับด้านกันเลย และแน่นอนว่าสิ่งที่ Rust เลือกทำนั้นส่งผลดีต่อ Compiler ด้วย

Variable แปลว่า likely to change often

ผมขายของมาเยอะ แน่นอนว่าเรื่องน่าหงุดหงิดของ Rust ก็ย่อมมีเหมือนกันครับ เพราะอยากที่ผมบอกไปก่อนหน้านี้ว่า Rust ผลักภาระส่วนหนึ่งมาให้กับ Programmers ซึ่งสำหรับ Baby Rustacean แบบผมในตอนนี้ ผมให้เรื่องที่น่าหงุดหงิดของ Rust ไว้สามอันดับนี้เลย

  • str กับ String
    Rust มี data types ที่ไว้ใช้กับตัวอักษรเยอะมากครับ str กับ String เป็นแค่สองในนั้น และแน่นอนว่ามัน Interchange กันลำบากเสียด้วย
  • Ownership และ Borrow Checker
    ตัวตึงที่ทุกคนต้องเข้าใจเลยครับ เป็นอาวุธลับของ Rust ในการทำให้ Memory Safety ซึ่งแน่นอนว่าไม่ง่าย
  • Compile ช้าอะ ไม่ทันใจวัยรุ่น
    ถ้าลองเขียน Go มาก่อนจะรู้สึกแบบที่บอกครับ แต่สิ่งที่ชาวเราเห็นตรงกันคือ Rust Compiler นั้นน่ารักมากครับ นอกจะบอกที่ที่คุณโค้ดผิดแล้ว ยังบอกวิธีแก้มาให้ด้วย ต้องบอกว่าเป็นที่หนึ่งในใจเลย

เรียน Rust นั้นไม่ง่าย แต่สนุกครับ แน่นอนว่ามันไม่ Simple เหมือนภาษา Go

ของแถมท้ายในส่วนนี้ ผมขอแนะนำบทความสำหรับคนที่เขียน Go อยู่หรืออยากจะเปรียบเทียบระหว่างภาษา Go กับ Rust ครับ เป็นบทความชื่อ “Go vs Rust: How can you determine which language is better for your next project?” ที่ผู้เขียนเขาให้มุมมองเอาไว้ โดยผมเอาตารางโดยสรุปมาแปะไว้ด้านล่างให้ดูกันแบบเร็ว ๆ และก็เหมือนเดิมครับ ใครสนใจในรายละเอียด ก็ตามไปตำที่บทความตัวเต็มกันได้เลย

+----------------------+--------------------+---------------------------+
| Characteristics | Go | Rust |
+----------------------+--------------------+---------------------------+
| Memory Management | Garbage Collector | Ownership Model |
| Speed and Performance| Medium | High |
| Learning Curve | Low | High |
| Compile Time | Fase | Slow |
| Deployment | Static Binary | Static Binary |
| Concurrenty | Goroutines | Async/Await and Threading |
+----------------------+--------------------+---------------------------+

ภาษา Rust ยังมีเรื่องราวสนุกๆ และมีกรณีศึกษาอีกมาก หลายบริษัทเปลี่ยนจาก Java มาเป็น Rust หรือแม้แต่เปลี่ยนจาก Go มาเป็น Rust โดยส่วนตัวผมเองก็ยังแอบลุ้นว่า Rust จะไปได้ไกลถึงขนาดไหนกันนะ แนวคิดในการเขียนโปรแกรมแบบใหม่นี้จะสามารถต่อยอดขึ้นไปได้อีกไหม น่าตื่นเต้นอยู่เหมือนกัน

Opinionated Use Cases of Rust

ก่อนที่ผมจะบอกว่า Use Cases ของ Rust ที่ตัวผมเองคิดว่าน่าสนใจมาก ๆ คืออะไร ผมก็คงต้องสรุปข้อดีทั่ว ๆ ไปของ Rust ก่อนสักหน่อยเพื่อให้ผู้อ่านที่ไม่ได้ลงลึกในด้านเทคนิคมากเข้าใจได้ว่าทำไม Rust ถึงเจ๋งและน่าใช้

  • ไม่ใช่แค่ Memory Safety แต่เกือบจะปราศจากบั๊ก
    อย่างที่ผมกล่าวไปก่อนหน้านี้แล้วว่าภาษา Rust ถูกออกแบบมาเพื่อสิ่งนี้เลย Rust นำเสนอหรือจะเรียกว่าบังคับว่าโปรแกรมเมอร์จะเขียนโปรแกรมอย่างไรก็ว่าได้ และสิ่งที่ตอบแทนกลับมานั่นคือถ้าโค้ดคุณคอมไพล์ผ่านเมื่อไหร่ มันแปลว่าบั๊กมันจะเหลือน้อยมาก ๆ แล้ว
  • พอคุณได้ Memory Safety แล้ว Security ก็จะตามมา
    มีช่องโหว่มากมายที่ Attackers จะเล่นกับ Memory ได้ และนอกจากช่องโหว่เหล่านั้นจะไม่เกิดขึ้นแล้ว ความปลอดภัยของภาษา Rust ก็ไม่ได้ยิ่งหย่อนไปกว่าภาษาอื่น
  • ไม่ใช่แค่เร็ว แต่กินทรัพยากรน้อยมาก ๆ ด้วย
    มีบทความ Benchmark ภาษา Rust กับภาษาอื่นมากมายในอินเตอร์เน็ตครับ ผมค่อนข้างมั่นใจว่าหากคุณจะประทับใจกับผลลัพธ์ของมันอย่างแน่นอน แต่คุณแค่ต้องแลกมาด้วยความขยันหมั่นเพียรในการศึกษา Rust และฝึกฝนเขียนมันจนชำนาญ
  • พอใช้ทรัพยากรน้อยมากแล้ว Sustainability ก็จะตามมา
    อย่างที่ได้กล่าวไปข้างต้นของบทความ คุณมีส่วนช่วยสิ่งแวดล้อมมากกว่าภาษาอื่นเมื่อคุณเขียน Rust

มาถึง Use Cases ที่ผมคิดว่าน่าสนใจมาก ๆ ของ Rust ตอนนี้

Rust with Blockchain and Web3 services

ทีแรกผมก็ไม่ค่อยเชื่อเหมือนกันว่านอกจาก Solidity แล้ว Rust จะถูกเอามาเขียนโปรแกรมบน Blockchain โดยรายนามผู้ที่ใช้ Rust ที่ผมหาข้อมูลได้ก็เช่น Polkadot, Solana, Elrond, Near Protocol, และ Hyperledger Sawtooth และถ้าลองไปหา Web3 Programming Languages คุณจะพบว่า Rust ก็เป็นหนึ่งในนั้นด้วย

Rust with WebAssembly (WASM)

WebAssembly คือรูปแบบของโค้ดที่ผมเข้าใจว่าเริ่มแรกมีจุดประสงค์ให้ทำงานอยู่บนบราวเซอร์ แล้วมันพิเศษอย่างไร? มันพิเศษตรงที่ว่ามันทำงานในระดับที่เรียกว่า Near-Native Speed มันสามารถทำบางอย่างที่โค้ดปกติบนบราวเซอร์ไม่สามารถทำได้ และที่สำคัญมันยังทำงานร่วมกับ Javascript ได้อีก ซึ่ง Rust มาเกี่ยวตรงที่ว่าเราสามารถคอมไพล์โค้ด Rust ไปเป็น WebAssembly Module ได้ นั่นแปลต่อไปว่า เราจะสามารถใช้ Rust เขียน Application ไปทำงานบนบราวเซอร์ได้นั่นเอง หรือเราจะเขียนแค่บางส่วนแล้วทำงานร่วมกับโค้ด Javascript ปัจจุบันที่มีอยู่ได้ โดยเราจะได้ประโยชน์ในเรื่องของประสิทธิภาพการทำงานและความปลอดภัยมาเต็ม ๆ

Server-side WebAssembly for Microservices

ต่อเนื่องจากข้อด้านบน ปัจจุบันการใช้งาน WebAssembly เริ่มแพร่หลายเข้าไปยัง ฝั่ง Server ด้วย ไม่ใช่เฉพาะบนบราวเซอร์อีกต่อไป มีเอกสารวิจัยของ IEEE Software ที่บอกว่า WASM app ที่ทำงาน ณ Server-side นั้นทำงานได้เร็วกว่าและกินทรัพยากรน้อยกว่าการเขียน Rust แบบปกติที่ทำงานบน Linux Container ประมาณ 100 เท่าเลยทีเดียว ตัวผมเองยอมรับว่ายังไม่ได้ศึกษารายละเอียดของเรื่องนี้เลยครับ เพราะมันน่าจะเกินระดับของ Baby Rustacean แบบผม แต่ก็พอจะรู้สึกได้ว่าถ้าสิ่งนี้ได้ไปต่อ มันจะต้องสุดยอดมากแน่ และอีกอย่างหนึ่งที่ผมเคยได้ข่าวผ่านหูมาก็คือ Microsoft ก็กำลังทดลองสิ่งที่เรียกว่า Rust-based Kruslet ผมเข้าใจว่า Microsoft ก็พยายามที่จะทำให้ Rust ที่คอมไพล์เป็น WASM นั้นไปทำงานได้นอกบราวเซอร์ นั่นคือบน Kubernetes ด้วยนั่นเอง

ของแถมท้ายในส่วนนี้ สำหรับท่านผู้อ่านที่มีคำถามว่าแล้วจะเริ่มต้นอย่างไรดี ถ้าใครมีพื้นฐานการเขียนโปรแกรมมาก่อนแล้ว ผมแนะนำ e-Learning “Take your first steps with Rust” หรือ Beginner’s Series to Rust ของ Microsoft ซึ่งส่วนตัวผมชอบในความเป็น text-based และการจัดเรียงที่เข้าใจง่าย เนื้อหากระชับเหมาะสำหรับผู้เริ่มต้น แต่ถ้าใครยังไม่มีพื้นฐานเลยอาจจะยากอยู่เหมือนกัน หรือใครชอบแบบ Interactive ก็ลองไปดูในแพลตฟอร์มเจ้าดังพวก Udemy หรือ Youtube ก็มีอยู่พอสมควรครับ และสำหรับคนที่ศึกษา Rust อยู่แบบผมในปัจจุบัน คุณอาจจะสนใจเจ้าสิ่งนี้ครับ Rust Web Developer Roadmap

Rust Web Developer Roadmap 2022

ในช่วงสุดท้ายและท้ายสุดนี้ ผมอยากจะกล่าวถึงภาษาที่ชื่อ Carbon สักหน่อย Carbon เป็นภาษาที่ Google เปิดตัวไปเมื่อประมาณกลางปี 2022 พร้อมจุดมุ่งหมายอันแรงกล้าหมายหมั้นปั้นมือจะให้เป็นผู้สืบทอดของภาษา C++ ด้วยจุดขายเรื่อง Performance กับ Interoperability กับ C++ (ซึ่งมันก็คล้าย ๆ Rust ปะหว่า) เมื่อผมเห็นข่าวภาษา Carbon ครั้งแรกก็แอบรู้สึกว่าบริษัทที่มีจุดยืนอยู่ในระดับท็อปของโลกอย่าง Google อาจจะรู้สึกว่าตัวเองต้องทำอะไรสักอย่าง เพื่อรักษาจุดยืนของตนเองไว้ในทุกด้าน การใช้ผลิตภัณฑ์ของคนอื่นอาจจะไม่โดนใจเท่าผลิตใช้เอง การเรียนรู้สิ่งที่ผิดพลาดมาแต่อดีต เพื่อมาสร้างสิ่งใหม่ให้ดีกว่าเดิม วิถีการเรียนรู้ของโลกก็คงเป็นแบบนั้นสินะ

Happy Rustaceans!

สำหรับใครที่สนใจเรื่องราวดีๆ หรืออยากเรียนรู้เกี่ยวกับ Product ใหม่ๆ จากชาว KBTG สามารถติดตามรายละเอียดกันได้ที่เว็บไซต์ www.kbtg.tech

--

--

jo@sabotender
KBTG Life

principal DEVelopment eXcellence engineer — DEVX@KBTG / Full-time Daddy / Console Gamer & Gunpla Collector