Tóm tắt nội dung video
Chào mọi người
Hôm nay mình làm video về ngôn ngữ lập trình Rust.
Ngôn ngữ lập trình Rust đã chính thức được tích hợp vào Linux kernel từ phiên bản 6.1 tháng 12/2022, tính ra tới giờ cũng hơn 2 năm rồi.
Mình thấy các job về kĩ sư lập trình nhúng trên Linux hay kĩ sư phần mềm viết chương trình điều khiển thiết bị trên Linux, Tây gọi là device driver software engineer á, có yêu cầu là biết Rust là 1 lợi thế, thậm chí là viết Linux kernel module bằng Rust luôn.
Về hệ điều hành thì đã có 1 hệ điều hành tên là Redox OS được viết bằng Rust.
Redox OS là hệ điều hành như Linux, Unix nhưng được viết hoàn toàn bằng Rust thay vì C.
Các phần mềm hệ thống được viết mới thì sẽ có 2 lựa chọn, viết bằng Rust hay viết bằng C, cán cân sẽ nghiêng về Rust nhiều hơn.
Vì Rust là ngôn ngữ ra đời sau, có 1 số cái hay hơn C như sử dụng bộ nhớ 1 cách an toàn hơn nhưng mà Rust sẽ khó viết hơn C.
Cũng có 1 xu hướng khác đó là viết lại 1 số phần mềm bằng Rust trước đó được viết bằng ngôn ngữ lập trình C.
Trong video này mình sẽ biên dịch phần mềm mã nguồn mở uutils coreutils được viết bằng Rust để có các lệnh Linux xài.
Trong quá trình làm mình sẽ phân tích nhiều thứ để các bạn học được ngôn ngữ lập trình Rust 1 cách thực chiến và nhanh, gọn, lẹ.
Vài nội dung chính về ngôn ngữ lập trình Rust trong video này:
1. rustc và cargo được đóng gói sẵn trên AlmaLinux 9 dạng RPM quá cũ, không biên dịch được uutils coreutils.
2. Cài chương trình biên dịch Rust mới nhất từ trang chủ của Rust.
Rust cài từ trang chủ sẽ có các file như: cargo, cargo-clippy, cargo-fmt, cargo-miri, clippy-driver, rls, rust-analyzer, rust-gdb, rust-gdbgui, rust-lldb, rustc, rustdoc, rustfmt thực ra chỉ là file liên kết tới rustup.
3. Biên dịch mã nguồn (source code) 1 chương trình viết bằng Rust thành file nhị phân định dạng ELF trên Linux và chạy nó.
Để biết Rust là ngôn ngữ lập trình kiểu biên dịch (compile), chung nhóm với C, C++, Go và Pascal ngày xưa.
File nhị phân (binary) là file chứa mã máy (machine code) để chạy trên máy tính.
4. Có thể biên dịch Rust bằng lệnh rustc.
Tuy nhiên với chương trình Rust lớn, phức tạp thì phải xài cargo.
5. Cargo là chương trình quản lí gói của Rust như npm của NodeJS.
cargo cũng là chương trình biên dịch của Rust thay cho lệnh rustc.
Cargo.toml là file chỉ dẫn biên dịch cho lệnh cargo.
Khai báo các thư viện đã xài trong mã nguồn Rust sẽ để ở dependencies trong Cargo.toml.
Các thư viện khi được tự động lấy về từ trang crates.io sẽ để trong thư mục target/release/deps hoặc target/debug/deps.
6. Cargo.lock là file tự động sinh ra trong quá trình biên dịch Rust bằng lệnh cargo.
Nó sẽ ghi lại thông tin như chi tiết về các thư viện cần cài, các thư viện cần cài phụ thuộc vào thư viện nào, coi như kết quả quá trình biên dịch để nếu bị lỗi và biên dịch lại sẽ bỏ qua các bước đã biên dịch thành công trước đó.
7. Rust cho phép nhúng mã nguồn của C++ vào bên trong nó, nhờ cpp crate.
Khi biên dịch Rust tới phần nào là code của C++ nó sẽ gọi tới chương trình biên dịch C++ trên AlmaLinux 9.
gcc-c++ là phần mở rộng của GCC, để biên dịch mã nguồn của C++.
8. Xóa hết kết quả biên dịch Rust và các file sinh ra trong quá trình biên dịch Rust bằng cargo clean.
9. Cách nhận biết thư viện chuẩn của Rust trong mã nguồn.
Cách nhận biết các thư viện của Rust lấy từ crates.io trong mã nguồn.
10. uutils coreutils có thể được biên dịch theo kiểu multicall binary của BusyBox.
Chi tiết kĩ thuật và các nội dung khác, các bạn xem và thực hiện như trong video nha.
Cảm ơn mọi người.