+10

Rust tutorial #1: Giới thiệu về ngôn ngữ lập trình Rust

Hello hello, xin chào tất cả anh em. Anh em nào đã vào đây thì comment mình chào nhau một cái cho đông vui nhé! Năm mới kính chúc mọi người và gia đình có một năm an khang, thịnh vượng! ❤️ ❤️ ❤️

Chào mừng mọi người đến với series Học lập trình Rust cùng Dev Success 101. Rust là một ngôn ngữ lập trình được đánh giá cao trên thế giới về hiệu năng và cũng là ngôn ngữ lập trình mà mình thấy lắm drama nhất. Bài viết này là phần mở đầu trong series dành cho anh em muốn bắt đầu tìm hiểu về ngôn ngữ lập trình Rust. Thông qua các bài viết trong series, mình hy vọng các bạn sẽ có một số kiến thức cần thiết nhất định để có thể sử dụng Rust.

Giới thiệu về Rust

Rust là một dự án mã nguồn mở được sáng lập bởi Graydon Hoare - một nhân viên tại Mozilla - công ty nổi tiếng trên thế giới với trình duyệt web Firefox. Sau đó, dự án của Graydon Hoare nhanh chóng lọt vào mắt xanh của Mozilla và được tài trợ phát triển. Tới năm 2010, Rust đã có những phiên bản release chính thức đầu tiên.

Một trong số điểm sáng của Rust có thể kể tới như sự công nhận từ cộng đồng thông qua các survey report từ một số công ty lớn. Chẳng hạn như trong kết quả báo cáo hàng năm của Stack Overflow Developers Survey trong nhiều năm gần đây (Rust luôn đứng #1 trong bảng xếp hạng các ngôn ngữ lập trình được yêu thích nhất và có tỉ lệ lập trình viên đã sử dụng Rust trong năm đó muốn tiếp tục dùng lại Rust trong năm tiếp theo cao nhất. Dưới đây là trích dẫn từ báo cáo của Stack Overflow Developers Survey 2023:

Rust is the most admired language, more than 80% of developers that use it want to use it again next year. Compare this to the least admired language: MATLAB. Less than 20% of developers who used this language want to use it again next year.

image.png

Hay trong một report khác đó là The State of Developer Ecosystem 2023 của JestBrains, Rust cũng được yêu thích khi chiếm 10% tỉ lệ người bình chọn, theo ngay sau đó là Go (9%). Nếu chúng ta các nhìn vào các ngôn ngữ lâu đời như: PHP (1%) và Ruby (2%) thì chúng ta cũng có thể hình dung ra được mức độ yêu thích và sự tin tưởng của cộng đồng dành cho Rust.

image.png

Trust in Rust: A story of growth: Rust is the only commonly used language to set a new popularity record this year. Aspiring to replace C++ with its strict safety and memory ownership mechanisms, Rust might initially edge out Go, as every sixth Go user is thinking about adopting Rust. Along with Scala, Rust stands out as the language that the fewest programmers want to migrate from.

Ưu điểm của Rust

Có thể mọi người sẽ thấy Rust có nhiều ưu điểm khác nhau như: hỗ trợ web assembly, cộng đồng mạnh mẽ và ngày một phát triển, tài liệu học tập nhiều... Tuy nhiên, dưới đây mình nghĩ sẽ là hai điểm nổi bật nhất khi mình suy nghĩ về ưu điểm của Rust.

An toàn bộ nhớ

Một trong những lỗ hổng bảo mật phổ biến nhất đó là memory-unsafety. Trong báo cáo CWE Top 25 Most Dangerous Software Weaknesses. Đây là danh sách 25 lỗ hổng phần mềm nguy hiểm nhất được tổng hợp hàng năm.

image.png

Nếu để ý kỹ một chút trong báo cáo CWE Top 25 năm 2023 hoặc cả các năm trước đó nữa thì các lỗ hổng phần mềm nguy hiểm thường tập trung nhiều vào vấn đề memory-unsafety. Chẳng hạn như:

  1. Out-of-bounds Write (787): Ghi ngoài ranh giới bộ nhớ.
  2. Use After Free (416): Sử dụng một đối tượng đã được giải phóng.
  3. Out-of-bounds Read (125): Đọc ngoài ranh giới bộ nhớ.
  4. NULL Pointer Dereference (476): Sử dụng con trỏ NULL.
  5. Improper Restriction of Operations within the Bounds of a Memory Buffer (119): Hạn chế không đúng các hoạt động trong ranh giới bộ nhớ.
  6. Integer Overflow or Wraparound (190): Tràn số nguyên.

Các lỗ hổng trên thường liên quan đến việc xử lý bộ nhớ không đúng. Điều này có thể dẫn đến những vấn đề nghiêm trọng liên quan đến an toàn bộ nhớ trong ứng dụng phần mềm.

Trong một báo cáo của Microsoft năm 2019, 70% số lượng các bản vá lỗi bảo mật của Microsoft trong 12 năm (2006 - 2018) đều là các lỗi liên quan tới memory.

image.png

Thật may mắn khi Rust lại được thiết kế ra để hạn chế các lỗ hổng bảo mật như memory-safe giúp đảm bảo được tính an toàn bộ nhớ cho chương trình thông qua các cơ chế: Ownership, Borrowing và Lifetime System. Các cơ chế này đều được thực hiện kiểm tra nghiêm ngặt ngay tại thời điểm bạn viết các dòng code của mình. Điều này giúp tránh được các lỗi bảo mật thường gặp về bộ nhớ bên trên.

Hiệu suất cao

Rust là một ngôn ngữ lập trình chủ yếu được thiết kế để cung cấp hiệu suất cao, an toàn và khả năng kiểm soát bộ nhớ. Việc này đạt được nhờ một số đặc điểm:

  • Rust giúp developer kiểm soát trực tiếp quy trình quản lý bộ nhớ thông qua cơ chế ownership và borrowing.
  • Không có garbage collection (dọn rác) nên không phải mất thêm chi phí cho hoạt động của GC hay không bị dừng đột ngột do thiếu GC. Thay vào đó, Rust thực hiện quản lý bộ nhớ tại thời điểm biên dịch, giúp chương trình chạy mượt và hiệu quả hơn.
  • Rust là ngôn ngữ lập trình static type, tạo điều kiện thuận lợi để trình biên dịch dễ dàng tối ưu hóa mã nguồn cho tốc độ tốt hơn.
  • Sử dụng ít tài nguyên hơn so rất nhiều khi với các ngôn ngữ lập trình khác như PHP, Ruby, Java...

Một số kết quả benchmark giữa Rust và C cho thấy hiệu suất của Rust là đang kinh ngạc khi tiệm cận gần với C. Ví dụ về bài benchmark helloworld giữa Rust, C và PHP. Thời gian thực thi của Rust là 2.1ms so với 2.2ms so với C. Memory sử dụng của Rust (1MB) thậm chí còn sử dụng ít hơn so với C (1.3MB). Thời gian thực thi của PHP là 50ms so với 2.1ms của Rust. Memory là 51.3MB so với 1MB của Rust. Một vài ví dụ khác, Rust cũng bỏ xa so với các ngôn ngữ như: PHP, Ruby.

lang code time stddev peak-mem time(user) time(sys) compiler/runtime
rust 1.rs 2.1ms 0.7ms 1.0MB 0ms 0ms rustc 1.68.0
c 1.c 2.2ms 0.5ms 1.3MB 0ms 0ms gcc 12.2.0
php 1.php 50ms 0.6ms 51.3MB 18ms 14ms php 8.2.4

Rust sẽ dành cho ai?

Rust là một ngôn ngữ lập trình vừa có các đặc tính của ngôn ngữ lập trình bậc thấp như C, C++, vừa có các tính năng của các ngôn ngữ lập trình bậc cao như Go, Java. Chính bởi vậy nên Rust rất đa năng khi có thể được sử dụng để phát triển đa dạng các loại hình ứng dụng như: ứng dụng desktop, networking, blockchain, CLI tool, web assembly, các ứng dụng web như: REST, gRPC, GraphQL... và thậm chí hệ điều hành.

Rust rất đa di năng nên trên lý thuyết thì một ông Rust Developer có thể tham gia code được nhiều loại hình dự án. Tất nhiên đó là lý thuyết, còn trên thực tế thì việc bạn dùng Rust cho lập trình nhúng, machine learning hay lập trình web thì sẽ đòi hỏi thêm nhiều các kiến thức chuyên môn khác nhau nữa. Vậy thì nếu ông dev đó có khả năng trau dồi thêm kiến thức chuyên môn khác thì ông ấy sẽ dễ nhảy hơn khi không phải mất công học thêm môn ngôn ngữ lập trình một khi đã thành thục Rust.

Microsoft là một trong số các công ty lớn trên thế giới đã ứng dụng Rust để viết lại một số module trên hệ điều hành Windows để giảm các vấn đề gây ra bởi lỗi về memory management và concurrency bug. Dropbox thì sử dụng Rust để cải thiện các vấn đề về performance và cũng thu đã lại nhiều trái ngọt. Hay chẳng hạn như Viblo, Rust được ứng dụng Rust vào trong một số các sản phẩm 😄.

Vậy thì... nếu bạn là blockchain developer... hãy học Rust vì có các cơ hội nghề nghiệp và cộng đồng sử dụng lớn khi nhiều hệ thống blockchain đang được phát triển bằng Rust. Chẳng hạn như Pokadot, Near... Còn nếu bạn web developer, devops engineer, system engineer... thì hãy tìm đến Rust khi và chỉ khi bạn đang rất cần một sự đảm bảo về an toàn bộ nhớ nhưng vẫn phải mang lại một hiệu năng cao.

Một lưu ý đặc biệt đối với các dự án web mà còn đòi hỏi time-to-production gấp gáp thì các bạn hãy cân nhắc thật kỹ lưỡng nếu bạn không có một team Rust đủ mạnh. Bởi sử dụng Rust sẽ làm tăng time-to-production. Mình lấy ví dụ đơn giản nhất đó là khi bạn phát triển REST API bằng Node.js, trong quá trình phát triển việc code sẽ có live reload nhanh chóng để test nhưng điều này sẽ phải đánh đổi trong Rust vì bạn cần đợi để code biên dịch lại. Tuy đã có cache cho quá trình compile nhưng chúng ta vẫn phải chờ lâu hơn khi so sánh với Node.js hoặc Bun.sh.

Tổng kết

Trên đây là bài đầu tiên giới thiệu về ngôn ngữ lập trình Rust trong series Học lập trình Rust cùng Dev Success 101. Các bạn cũng nắm được cơ bản về điểm mạnh của Rust cùng một số nhược điểm trước khi học cách sử dụng nó. Hãy follow Dev Success 101 để đón đọc các phần tiếp theo của series này nhé.


Mọi người ủng hộ mình bằng cách giúp mình một lượt like và subscribe cho kênh Dev Success 101 trên các trang bạn yêu thích như Viblo / YouTube / TikTok với nhé. Đây là các kênh mà mình mới tạo nên rất cần sự ủng hộ từ mọi người. Mình rất cảm ơn tất cả các bạn đã đón đọc.

✴️ Subscribe kênh! https://l.devsuccess101.com/subscribe
✴️ Join our Discord community for help https://l.devsuccess101.com/discord
✴️ Donate: Momo, Paypal

✴️ TikTok: https://l.devsuccess101.com/tiktok
✴️ YouTube: https://l.devsuccess101.com/youtube
✴️ Viblo: https://l.devsuccess101.com/viblo
✴️ Facebook: https://l.devsuccess101.com/facebook
✴️ Discord: https://l.devsuccess101.com/discord


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí