thảo luận Nhật kí tự học lập trình Rust - phát triển ứng dụng Desktop (Both CLI + GUI)

  • Người tạo chủ đề Người tạo chủ đề duykhanh471
  • Ngày bắt đầu Ngày bắt đầu
moẹ hôm trước mày mò làm cái tool trading bên solana làm rust này khoai thật sự
 
Do bạn swallow hết result của std::io rồi return void thôi. Thường thì create sẽ trả về Result<File>, write sẽ trả về Result<usize>, rất nhiều dev assert ngay đoạn code impl luôn chứ ko unit test.


Mấy cái example ngta assert contents, nhưng bạn có thể assert len.
Giờ mới để ý tin nhắn của fen, t không hiểu lắm ý của assert đoạn code impl là sao?
 
Chào cả nhà lâu r không quay lại :))

Giờ đang chạy Rust :> cày Stream với làm một số ứng dụng hay ho, khi nào gửi hàng xin Feedback từ các Seniors sau =)) giờ đẩy thớt lên đã
 
Làm Rust backend, đang trong quá trình (Chủ yếu để bump thread này lên với tiếp tục học). Thông báo cho dõng dạc.

Đợt này mình quay lại TheOdinProject để ôn lại nhiều thứ và xây dựng phần Frontend cho Rust Web App. Còn Backend thì đọc luôn cuốn Rust2Prod: Foreword | Luca Palmieri (https://www.lpalmieri.com/posts/2020-05-24-zero-to-production-0-foreword/) (Sample của tác giả)

Tiếp tục học tốt nha
có link sách ko bác. Mình có quyển cũ của ông này thôi

via theNEXTvoz for iPhone
 
Đá thớt. Đợt này em cũng đang mò mò Rust, viết dở 1 cái KV server theo khóa của Pingcap, talent-plan/courses/rust at master · pingcap/talent-plan (https://github.com/pingcap/talent-plan/tree/master/courses/rust). Có lúc xài đến Arc Mutex các thứ mệt phết, nhưng cũng thích cái là nó đảm bảo mình không bị race condition :beauty:
Chưa động đến Arc Mutex dù có học qua, bác sử dụng thêm cả Concurrent nữa hay sao v. À mà cái Talent Plan là gì vậy bác, thấy có share bên cộng đồng Rust khác nhưng không biết nó là về cái gì.
 
^
Về Arc với Mutex thì nó liên quan đến code parallel/concurrent để tăng khả năng xử lý bác ợ. Về nguyên tắc cơ bản thì 2 cách chạy là:

  • Parallel: 2 luồng độc lập cùng xử lý.
  • Concurrent: 1 luồng chạy nhiều việc cùng lúc, nhưng nếu với việc phải đợi kết quả (query database hoặc query HTTP v.v.) thì chuyển sang việc khác.

Quay về Arc với Mutex của Rust thì nó lại liên quan đến một nguyên tắc khác về đọc/ghi dữ liệu, bất kể mình đang chạy concurrent hay parallel: trong 1 thời điểm, có thể có 1 hoặc nhiều luồng đọc song song, nhưng đọc xong thì chỉ có 1 luồng được ghi, và sau khi ghi xong thì mới cho phép đọc tiếp. Rust đưa ra các cấu trúc dữ liệu để đảm bảo việc này:

  • Mutex để đảm bảo việc chỉ có 1 luồng đang đọc hoặc ghi dữ liệu xuống
  • Tương tự, có RwLock để đảm bảo nhiều luồng đọc, nhưng vẫn 1 luồng ghi

Cơ mà Mutex thì lại không thể được chia sẻ giữa nhiều luồng khác nhau, từ đấy nó mới phải bị "gói" ở trong Arc. Arc đơn giản là 1 cái "hộp" được chia sẻ giữa nhiều luồng khác nhau, nhưng có 1 bộ đếm đi kèm với nguyên tắc là 1 nếu được dùng đến thì bộ đếm tăng lên; nếu không được dùng nữa thì bộ đếm giảm đi và đến cuối cùng, số đếm đó về 0. Khi số đếm về 0, cái được đựng bên trong "'hộp" cũng được giải phóng.

---

Cái Talent Plan kia là của công ty Pingcap, chuyên về database. Họ có 1 cái khóa học về Rust bằng cách cho mình tự tay viết 1 cái KV database (đơn giản hơn Redis), từ đơn giản đến phức tạp. Lúc đầu thì bác chỉ chạy cái KV database trong bộ nhớ, xong rồi expose nó dưới dạng single-threaded TCP server, rồi thêm xử lý concurrency thì dùng đến Arc Mutex. Mình được hướng dẫn luôn về error handling các thứ em thấy cũng hay và hạp lý :D
 

Thống kê chủ đề

Ngày tạo
duykhanh471,
Người trả lời cuối
emlameo4`,
Trả lời
142
Lượt xem
27.188
Quay lại
Lên đầu trang