บทความนี้เป็นบทความบันทึกการศึกษาภาษา Rust อาจจะมี code เป็นส่วนใหญ่ และผมจะพยายามลงรายละเอียดให้นะ

Rust language เป็นภาษาโปรแกรมเชิงระบบ (system programming language) ที่เน้นความปลอดภัย (safety) และความเร็ว (speed) พัฒนาโดย Mozilla Foundation

จุดเด่นของ Rust language:

  • ความปลอดภัย: Rust language ออกแบบมาเพื่อป้องกันปัญหาหน่วยความจำรั่ว (memory leaks) และ dangling pointers ซึ่งเป็นปัญหาใหญ่ในภาษาโปรแกรมอื่น ๆ
  • ความเร็ว: Rust language สามารถ compile ลงเป็น native code ทำให้ทำงานได้รวดเร็วเทียบเท่าภาษา C++
  • ความทันสมัย: Rust language เป็นภาษาโปรแกรมที่ใหม่และได้รับการพัฒนาอย่างต่อเนื่อง มี ecosystem ที่เติบโต rapidly
  • ** expressive**: Rust language มี syntax ที่อ่านง่าย เขียนง่าย เข้าใจง่าย

Install Rust

เริ่มต้นที่ติดตั้งภาษา Rust กันก่อน ซึ่งสามารถเข้าไป download และติดตั้งได้ตามลิงค์นี้ https://www.rust-lang.org/tools/install

ซึ่งหลักงจากติดตั้งแล้วอย่าลืม Configuring PATH environment variable ด้วยนะ ซึ่งใน Rust development environment จะมีเครื่องมือทั้งหมดติดตั้งไว้ในไดเร็กทอรี ~/.cargo/bin เราสามารถใช้เครื่องมือของ Rust รวมถึง rustc, cargo และ rustup

หลังจากที่ติดตั้งและตั้งค่าทุกอย่างแล้ว ให้ลอง run command เพื่อ เช็คดูว่าได้ไหม

rustc --version

rustc, cargo และ rustup

rustc

rustc ย่อมาจาก Rust Compiler เป็นโปรแกรม compiler ที่ใช้แปลงโค้ดภาษา Rust ไปเป็น native code ที่สามารถทำงานบน CPU ของเครื่องได้โดยตรง

หน้าที่หลักของ rustc:

  • ตรวจสอบ syntax ของโค้ด Rust
  • แปลงโค้ด Rust ไปเป็น LLVM bitcode
  • Optimize LLVM bitcode
  • Generate native code

การใช้งาน rustc:

Rustc สามารถใช้งานผ่าน command line โดยพิมพ์คำสั่ง rustc ตามด้วยชื่อไฟล์โค้ด Rust ตัวอย่างเช่น

rustc hello_world.rs

rustc command

คำสั่งนี้จะ compile ไฟล์ hello_world.rs ไปเป็น executable file ชื่อ hello_world

ตัวเลือกเพิ่มเติม:

Rustc มีตัวเลือกเพิ่มเติมมากมายที่สามารถใช้ควบคุมการ compile ตัวอย่างเช่น

  • -o : ระบุชื่อ output file
  • -C : ระบุ compiler flag
  • -L : ระบุ path ไปยัง library

ดูเพิ่มเติมที่ https://doc.rust-lang.org/rustc/


cargo

Cargo เป็น build system สำหรับภาษา Rust ช่วยให้ developer สามารถจัดการ project ของ Rust ได้อย่างสะดวก ถ้าบอกให้เข้าใจง่ายๆ มันคือ Package Manager ของ Node และภาษาอื่นๆ นั้นแหละ

หน้าที่หลักของ Cargo:

  • Compile โค้ด Rust
  • จัดการ dependencies ของ project
  • Build project artifacts เช่น executable files, libraries
  • Run tests
  • Deploy project

การใช้งาน Cargo:

Cargo สามารถใช้งานผ่าน command line โดยพิมพ์คำสั่ง cargo ตามด้วย subcommand ตัวอย่างเช่น

cargo build

example cargo command

คำสั่งนี้จะ compile project ของ Rust

subcommand อื่นๆ:

  • cargo new: สร้าง project ใหม่
  • cargo run: รัน executable file ของ project
  • cargo test: รัน tests ของ project
  • cargo doc: generate documentation ของ project

Cargo.toml:

Cargo ใช้ไฟล์ Cargo.toml เพื่อกำหนดค่า project ของ Rust ไฟล์ Cargo.toml ประกอบด้วยข้อมูลต่างๆ เช่น ชื่อ project, เวอร์ชัน, dependencies

ดูเพิ่มเติมที่ https://doc.rust-lang.org/cargo


rustup

rustup เป็นเครื่องมือสำหรับติดตั้งและจัดการ Rust toolchain บนระบบของคุณ Rust toolchain ประกอบด้วยโปรแกรมต่างๆ ที่จำเป็นสำหรับการพัฒนาภาษา Rust เช่น rustc, cargo, และ rustfmt

หน้าที่หลักของ rustup:

  • ติดตั้ง Rust toolchain
  • อัพเดท Rust toolchain
  • เปลี่ยนเวอร์ชันของ Rust toolchain
  • ถอนการติดตั้ง Rust toolchain

การใช้งาน rustup:

Rustup สามารถใช้งานผ่าน command line โดยพิมพ์คำสั่ง rustup ตามด้วย subcommand ตัวอย่างเช่น

rustup install

คำสั่งนี้จะติดตั้ง Rust toolchain เวอร์ชันล่าสุด

subcommand อื่นๆ:

  • rustup update: อัพเดท Rust toolchain
  • rustup default: ตั้งค่าเวอร์ชัน default ของ Rust toolchain
  • rustup uninstall: ถอนการติดตั้ง Rust toolchain

ดูเพิ่มเติมที่ https://rustup.rs


Hello World

หลังจากที่ทำความเข้าใจเครื่องมือของ rust กันแล้ว เรามาเริ่มต้นจากอะไรง่ายๆ อย่าง hello world กันก่อนเลย

เริ่มต้นจาก initial project ขึ้นมาก่อน

cargo new hello

initial project

หลังจากที่ new project แล้ว เราจะได้ folder ชื่อ hello ของโปรเจคเรา

project structure

โดย Cargo.toml จะเป็นไฟล์ที่ตัว cargo ใช้สำหรับจัดการ package (นึกถึง package.json ใน node) และ source code จะอยู่ที่ src/main.rs

Cargo.toml

ลอง build และ run ดูโดยใช้คำสั่ง

cargo build

เราจะได้โฟล์เดอร์ target เพิ่มเข้ามา ซึ่งมันเป็น build folder

build folder

ถ้าอยากลอง run โปรเจคดู ให้ใช้คำสั่ง

cargo run

run project

output

ซึ่งถ้าหากเราสั่ง cargo run โดยไม่ได้สั่ง build ตัว cargo ก็จะ build ให้เราก่อนอยู่ดี แต่ตอนทำโปรเจคจริงๆ ยังไงเราก็ต้อง build ก่อน run อยู่แล้ว