1 tháng học Rust - Mục tiêu và lộ trình

1 tháng học Rust - Mục tiêu và lộ trình

Tin ngắn hàng ngày dành cho bạn
  • Bắt đầu kỳ nghỉ tết rồi nên mình cũng không đăng bài nữa. Hẹn gặp lại các bạn qua tết nha 😁

    » Xem thêm
  • Tiếp tục về jj. Đang thắc mắc là nó mới thế liệu có ai làm mấy phần mềm dạng GUI cho dễ nhìn chưa. Kiểu giống như git thì có quá nhiều rồi không đếm xuể.

    May quá, tác giả tổng hợp lại luôn rồi Community-built tools around Jujutsu 🥳

    » Xem thêm
  • Turso thông báo rằng họ đang viết lại SQLite bằng Rust. Thế là lại có thêm một bằng chứng nữa cũng cố cho câu nói Rust đang "tái định nghĩa" lại nhiều thứ.

    Nhưng nguyên nhân sâu xa mới thú vị. Tại sao họ lại làm vậy? Ai cũng biết SQLite là nguồn mở, ai cũng có thể tạo bản sao (fork) để chỉnh sửa lại theo ý mình. Lẽ nào nhóm của Turso không thích hoặc không tin vào C - vốn là ngôn ngữ dùng để cấu thành SQLite.

    Mình xin kể chuyện một chút. Turso là một bên cung cấp dịch vụ máy chủ cơ sở dữ liệu dựa trên SQLite, họ đã thực hiện một vài tùy chỉnh trên bản sao của SQLite để phục vụ cho mục đích của mình, gọi nó là libSQL. Họ "hào phóng" cho cộng đồng đóng góp thoải mái.

    Quay trở lại SQLite là mã nguồn mở chứ không phải là đóng góp mở. Chỉ có một nhóm người đứng đằng sau duy trì mã nguồn này, và họ không tiếp nhận yêu cầu kéo (pull request) từ những người khác. Đồng nghĩa mọi thay đổi hoặc tính năng đều là của nhóm người này tạo ra. Có vẻ như SQLite rất phổ biến nhưng cộng đồng không thể làm điều mà họ muốn là đóng góp cho sự phát triển của nó.

    Chúng ta biết rằng hầu hết ứng dụng mã nguồn mở thường đi kèm với một thư mục "tests" với các bài kiểm tra rất nghiêm ngặt. Điều đó giúp cho sự cộng tác trong phát triển trở nên dễ dàng hơn. Nếu muốn chỉnh sửa hoặc thêm một tính năng mới, trước hết bạn cần phải đảm bảo sự thay đổi vượt qua được tất cả bài kiểm tra. Nhiều thông tin cho rằng SQLite không công khai bộ kiểm tra này. Điều này vô tình gây khó khăn cho những ai muốn chỉnh sửa mã nguồn. Vì họ không chắc chắn rằng liệu triển khai mới của mình có phù hợp với những tính năng cũ hay không.

    tursodatabase/limbo là dự án viết lại SQLite bằng Rust đã nhắc đến ở đầu bài. Họ nói rằng nó hoàn toàn tương thích với SQLite và nguồn mở hoàn toàn. limbo đang trong giai đoạn hoàn thiện. Chúng ta hãy chờ xem kết quả trong tương lai thế nào nhé. Bài viết chi tiết tại Introducing Limbo: A complete rewrite of SQLite in Rust.

    » Xem thêm

Vấn đề

Xin chào độc giả của 2coffee.dev. Dạo gần đây tôi ít ra thêm bài mới nào và cũng như không có nhiều thời gian để duy trì thói quen đọc sách mỗi ngày được nữa. Vậy chuyện gì đang xảy ra? Vâng tôi đang bị cuốn hút vào một thứ ngôn ngữ mới: Rust!

Lần đầu nghe đến Rust chắc là khoảng 1-2 năm trước. Thời mà các dự án game Blockchain đang còn rất thịnh hành và ăn nên làm ra. Tôi có một đứa bạn rất chịu khó đầu tư vào lĩnh vực này và bỗng một ngày, anh bạn có nhắc đến cái tên Rust dùng để viết Smart Contract, kèm theo sau đó là cả một bài thuyết trình dài về cách mà nó hoạt động. Chà, chẳng hiểu gì suất! Chẳng lẽ người ta lại sinh ra một ngôn ngữ mới để phục vụ riêng cho Blockchain hay sao? - Tôi suy nghĩ lúc đó.

Không hẳn là không quan tâm, mà vì lúc đó tôi đang hứng thú với một thứ ngôn ngữ khác - Golang! Vâng chính là con chuột lang màu xanh ngọc với cái dáng thon tròn ục ịch ấy. Nhưng ẩn sâu bên trong là tốc độ mạnh mẽ y như cái tên của nó: Go! Go! Go!... Golang lúc đó xuất hiện như một vị cứu tinh bởi Node mà tôi đang sử dụng là một con quái vật với cái bụng đói meo, sẵn sàng ngoạm một miếng thật to hết chiếc bánh mang tên "ngẫu nhiên". Tôi cần thay thế cái "hố đen" này bằng một chú chuột dễ thương hơn!

Vài tháng trở lại đây, Rust được nhắc đến rất nhiều đến nỗi tôi phải tự hỏi nó có gì mà "hót" thế. Thú thật, tôi cũng mới nghiêm túc đọc tài liệu của Rust mấy ngày hôm nay và cảm thấy bị cuốn vào nó. Nào là ngôn ngữ được yêu thích nhất trong năm, cơ chế quản lý bộ nhớ cực kỳ mạnh mẽ, tốc độ thì miễn bàn... Hmm, tuy không phải là một người thích chạy đua theo "trend" nhưng những lời có cánh trên cũng phần nào ăn cắp ánh nhìn của tôi.

Tôi sợ rằng mình không thực sự nghiêm túc trong quá trình học. Một phần thời gian trong ngày là có hạn, nếu nghiên cứu thì thời gian đâu để mà viết bài mới, đi học, đi làm, hay là thêm tính năng mới cho bạn đọc? Chính vì thế tôi đã nghĩ ra cách mà có lợi cho cả 2: vừa học và vừa ghi chép lại những gì mình học được. Nó như là một bản cam kết về quá trình học. Bạn vẫn có bài mới, tôi vẫn được học. Chà, quả là mũi tên trúng hai đích.

Tại sao lại là Rust

Rust đứng đầu trong danh sách ngôn ngữ được yêu thích nhất thông qua khảo sát có trên StackOverflow. Rust giới thiệu cơ chế quản lý bộ nhớ khác biệt với hầu hết ngôn ngữ lập trình thông dụng mà ta đã biết, vì thế, Rust cho hiệu năng và cả tốc độ tuyệt vời. Nếu viết cách vận dụng Rust, tôi có thể tạo ra nhiều công cụ dòng lệnh hữu ích hay máy chủ web với hiệu suất "đáng để mong đợi".

Điều gì khiến bạn lo sợ khi bắt đầu học một ngôn ngữ mới? Với tôi đó là tài liệu của ngôn ngữ đó. Vốn là một lập trình viên JavaScript và trung thành với nó trong nhiều năm. Cách đây không lâu, tôi có học thêm cả cú pháp của Golang, tài liệu của Golang khá đơn giản và đầy đủ khiến cho quá trình học diễn ra nhanh hơn. Không lâu sau đó, tôi có thể chuyển máy chủ của mình thành Go hoàn toàn. Nhưng! Nếu bạn thử tìm tài liệu về JavaScript xem, hàng tá kết quả và chúng...chứa rất nhiều kiến thức. Thú thật, mặc dù ngần này tuổi rồi nhưng mỗi khi nhìn lại đống tài liệu đồ sộ của JS, cũng khiến tôi cảm thấy nản lòng.

Tài liệu của Rust khá đầy đủ và chi tiết. Tuy chưa đọc hết nhưng đọc qua vài đầu mục, cách họ trình bày, cả cái cách giải thích rất tường tận và chi tiết. Thậm chí còn có sơ đồ minh hoạt và giải thích cả lý do tại sao đoạn mã này không hoạt động, cũng như hướng dẫn cách để thoát khỏi lỗi hay gặp. Hãy thành thật đi, có phải những người làm ra Rust xuất thân từ con nhà văn không?

Rust làm được rất nhiều thứ mà tôi hay nghe đến như làm trình biên dịch, command line, một số service hệ thống, phần mềm hay cả máy chủ web... Rất nhiều thứ hay ho mà chắc gì tôi đã biết hết. Nhưng chắc một điều là nó đáng để học và áp dụng trong dự án thực tế của mình.

Mục tiêu và lộ trình

Mục tiêu cuối cùng của tôi là có thể sử dụng thành thạo Rust (nghe có vẻ đầy quyết tâm nhỉ - nhưng mà không biết duy trì được trong bao lâu đây). Sử dụng nó viết thêm một vài service hoặc công cụ phục vụ cho 2coffee.dev. Sau này nếu có thể, tôi cũng muốn áp dụng nó trong dự án của Công ty.

Để đạt được điều đó, chúng ta cần có một lộ trình trong ngắn và dài hạn. Đầu tiên và cũng là chắc chắn, đọc hết tài liệu của Rust tại The Rust Programming Language. Có một điều thú vị là cộng đồng sử dụng Rust đã "fork" tài liệu của nó sang một kho khác và họ bổ sung thêm các câu hỏi cũng như bài kiểm tra ngắn trong hầu hết bài viết, bạn đọc có thể xem tại The Rust Programming Language + Quiz. Tôi đang đọc và thực hành trên bộ tài liệu được fork ra đó.

Sau khi đọc xong, việc tiếp theo là khám phá Library/Framework của Rust thông qua từ khóa "Rust awesome". Tại đây tôi sẽ có một cái nhìn bao quát về những gì cộng đồng cung cấp cũng như những gì Rust làm được.

Tiếp đến là tự viết cho mình một hoặc một vài service cho 2coffee.dev. Có một điều thú vị là tôi đã chuyển blog của mình sang Cloudflare Worker & Pages. Có lẽ Cloudflare cũng kịp thời bắt "trend" khi Worker của họ chính thức hỗ trợ Rust. Còn gì tuyệt vời hơn khi có nơi để chạy luôn mã của mình được viết ra ngay lập tức.

Cuối cùng vẫn là không ngừng học hỏi. Việc nắm được kiến thức cơ bản không có nghĩa là kết thúc. Vẫn còn rất nhiều kiến thức nâng cao cũng như cách thực hành tốt nhất với ngôn ngữ này. Tuy nhiên điều này có lẽ vượt quá "1 tháng học Rust" của tôi nhưng dù sao thì vẫn phải viết ra để nhắc nhở điều mình cần làm.

Tổng kết

Trong thời gian tới, tôi sẽ chịu khó viết ra nhiều bài nói về quá trình học, học được gì, giải thích và cố gắng truyền đạt lại cho bạn đọc một cách dễ hiểu. Bởi khi giải thích lại được vấn đề cho người khác hiểu, lúc đó mới thực sự là bạn hiểu. Như tôi đã nói, xuất thân từ một lập trình viên JS cho nên bạn đọc có thể sẽ thấy tôi "cố gắng" quy đồng một vài khái niệm của Rust sang JS cho dễ hình dung. Hôm nay là 21/09/2023. Hy vọng 21/10/2023 chúng ta sẽ trở lại với nhiều điều tốt đẹp hơn!

Cao cấp
Hello

Tôi & khao khát "chơi chữ"

Bạn đã thử viết? Và rồi thất bại hoặc chưa ưng ý? Tại 2coffee.dev chúng tôi đã có quãng thời gian chật vật với công việc viết. Đừng nản chí, vì giờ đây chúng tôi đã có cách giúp bạn. Hãy bấm vào để trở thành hội viên ngay!

Bạn đã thử viết? Và rồi thất bại hoặc chưa ưng ý? Tại 2coffee.dev chúng tôi đã có quãng thời gian chật vật với công việc viết. Đừng nản chí, vì giờ đây chúng tôi đã có cách giúp bạn. Hãy bấm vào để trở thành hội viên ngay!

Xem tất cả

Đăng ký nhận thông báo bài viết mới

hoặc
* Bản tin tổng hợp được gửi mỗi 1-2 tuần, huỷ bất cứ lúc nào.

Bình luận (2)

Nội dung bình luận...
Avatar
Ẩn danh6 tháng trước
Hi bạn, mong bạn viết tiếp về quá trình học Rust :D
Trả lời
Avatar
Xuân Hoài Tống6 tháng trước
Úi có độc giả ủng hộ là lên bài liền. Ok ạ :D
Avatar
Ẩn danh1 năm trước
Xin chào, tôi bình luận ẩn danh và đang kiểm tra nó có hoạt động hay không?
Trả lời
Bấm hoặc cuộn mạnh để sang bài mới