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
Viết cat bằng Rust (không có highlight syntax cho Rust ;-;)
Ruby:
use std::{fs::File, io::{BufRead, BufReader}};
use clap::Parser;

#[derive(Debug, Parser)]
struct Args {
    filename: String
}

fn main() {
    let filename = Args::parse().filename;
    if let Err(err) = run(&filename) {
        println!("{err}: {filename}");
        return;
    }
}

fn run(filename: &str) -> Result<(), std::io::Error> {
    let reader = BufReader::new(File::open(filename)?);
    for line in reader.lines() {
        let line = line?;
        println!("{line}")
    }
    Ok(())
}
Vì cat đơn giản chỉ đọc từ stdin / file rồi ghi ra stdout nên thay vì đọc từng dòng một thì đọc / ghi theo chunk (1024 chars, eg) sẽ nhanh hơn chút. Giả sử mà mỗi dòng chỉ có 1 từ mà có cả triệu từ thì code thím viết sẽ rất chậm vì gọi println quá nhiều.
 
rust code embedded chắc cũng ổn các bác nhỉ ,ko biết ở VN nhiều đơn vị nào làm embedded dùng rust chủ yéu ko ta
 
Vì cat đơn giản chỉ đọc từ stdin / file rồi ghi ra stdout nên thay vì đọc từng dòng một thì đọc / ghi theo chunk (1024 chars, eg) sẽ nhanh hơn chút. Giả sử mà mỗi dòng chỉ có 1 từ mà có cả triệu từ thì code thím viết sẽ rất chậm vì gọi println quá nhiều.
Mình cũng nghĩ đến chuyển đóng vào iter() rồi dùng map() để nhồi vào một biến và trả ra. Thanks bro đã góp ý.
 
Hay quá bác. Mình cũng mê rust. Có cách nào học chung ko

via theNEXTvoz for iPhone
Nếu có thì bác lên Rust Community trên Discord hoặc vào The Coding Den (Kênh #rust), em hay ở trong đó hỏi câu hỏi về code. Kênh IT VOZ LAB (Discord) không xôm lắm với chắc đa phần là không có mấy ai học Rust ở đó. Hoặc không thì bác cập nhật thông tin tự học hàng ngày trên Thread này cũng được, sẽ có chế nào đó vô góp ý =))
 
dejavu à :amazed: cách đây chục năm cũng có mấy topic dạng này, cũng mấy ông thần vào khịa qua khịa lại so kiến thức với nhau:ops: lúc đó thay vì rust lại là golang :byebye:
Chắc kệ mấy ông đó thôi bác, Thread này là nhật kí tự học chứ cũng không phải là bàn ưu nhược điểm của một ngôn ngữ. Chủ yếu là làm được sản phẩm gì chứ mấy ổng cũng toàn chửi qua chửi lại nhìn mắc mệt
 
Cập nhật 13/06/2024:
  • Viết xong được 7 CLI Tools ;-; Dù cách viết khá đần nhưng đi hỏi mọi người trên Discord cũng học được nhiều cái hay về xử lý Lifetime, Borrowing với Ownership, Error Handling.
  • Học thêm về mở rộng dự án: dự án của mình vẫn còn rất nhỏ và chỉ trong duy nhất một tệp .rs. Mình chưa dùng extern crate hay tự viết cho mình một lib riêng để quản lý chương trình

Học thêm, học thêm
 
Cập nhật (24/06/2024): Hoàn thành Buukuru, một công cụ để tải Webnovel từ Syosetu về, mình đã có một công cụ tương tự nhưng viết bằng Python, nên giờ mình quyết định viết nó bằng Rust. Hiện tại tính đến thời điểm mình viết thì mình không dám chắc là nó nhanh hơn bản Python vì chưa tối ưu, cũng chưa xử lý hết unwrap() nên coi như là một dự án chơi: GitHub - duy103zxc/buukuru: A tool for downloading light novels, web novels from various sources (https://github.com/duy103zxc/buukuru)
 
Thím tìm mấy trang discord của ngôn ngữ kiểu gì vậy chỉ em với
 
Viết cat bằng Rust (không có highlight syntax cho Rust ;-;)
Ruby:
use std::{fs::File, io::{BufRead, BufReader}};
use clap::Parser;

#[derive(Debug, Parser)]
struct Args {
    filename: String
}

fn main() {
    let filename = Args::parse().filename;
    if let Err(err) = run(&filename) {
        println!("{err}: {filename}");
        return;
    } 
}

fn run(filename: &str) -> Result<(), std::io::Error> {
    let reader = BufReader::new(File::open(filename)?);
    for line in reader.lines() {
        let line = line?;
        println!("{line}")
    }
    Ok(())
}
Không có ý toxic gì nhưng sao thiết kế syntax ngôn ngữ dị vậy nhỉ:
println!
line?
 
println! là macro.
? là cách xử lý error, kết hợp result pattern và option type của functional programming.
Thực tế thì mình cũng chưa hiểu lắm khái niệm về Macro :>
Còn ? thì mình hơi kị, tức là đa phần cần phải xử lý lỗi cẩn thận, mình vẫn chưa sửa được thói quen lạm dụng unwrap() với expect(), không quá nhiều lúc thực sự đóng if let hoặc thực sự gói giá trị vào Option hoặc Result rồi xử lý thông qua match cho lắm :> Nên code em đọc hơi ngu.
 
Đây là nhật kí lập trình của cá nhân mình, vừa học vừa làm để đóng góp cho Open Source

Đa phần nhiều người dùng Rust làm Backend, thậm chí Rust Fullstack luôn.

Lý do chơi Rust (Ít nhất là của mình):
  • Không có Null (Từng mê null handler bên Kotlin, nhưng mê cách rust làm hơn)
  • không garbage collection nhưng không phải manual memory management (Tất nhiên là C/C++ có thể dùng RAII)
  • nhanh (Nhanh hơn tất cả các ngôn ngữ dùng garbage collection)
  • lập trình ít khi phải tra StackOverflow (Thật sự là từ lúc lập trình Rust đến giờ mình chỉ có đọc Documentation với phân tích lỗi Compiler in ra thôi)
  • Tương thích code: Không phải update codebase quá thường xuyên (Nhìn các dev còng lưng là biết)

Tính đến thời điểm hiện tại mình đã
  1. Hoàn thành The Book (Sách học lập trình Rust, tên đầy đủ là “Rust Programming Language Book”). Bản dịch của chú daohainam` trên Github mới đến Chương 11 (Tiếng Việt) nên còn lại là đọc Tiếng Anh, bị lỗi thuật ngữ chút, cũng may là từ đầu học bằng The Book xong rồi mới chuyển về Tiếng Việt học lại. Mất mấy tuần trời mới hiểu được tương đối cơ chế Ownership, Borrowing và Reference rồi cả Result<> và Option, unwrap() và Lifetime các kiểu :LOL:
  2. Đọc được một chút (Mình chỉ tham khảo trong lúc học The Book thôi) Rust By Example.
  3. Hoàn thiện hết 98 Problems trong Rustlings
  4. HIỆN TẠI (09/06/2024) - Đang thực hiện 20 dự án CLI Programs ngắn trên Github (Thử thách trên Github). Đồng thời tự mò thêm trong The Coding Den và The Rust Programming Community trên Discord (Có nhiều ông chỉ cho các coding practices rồi cách lập trình safe :LOL:)
Nhật kí học tập thui
Nhờ thím đánh giá so với mấy ngôn ngữ họ C khác như Java, .Net, C++ thì Rust nó có gì hơn và kém.
 
Nhờ thím đánh giá so với mấy ngôn ngữ họ C khác như Java, .Net, C++ thì Rust nó có gì hơn và kém.
Mình không phải dân chuyên đâu bác, mình cũng chưa nghịch C/C++ nhiều và biết là mọi người có dùng RAII để xử lý memory management nữa (Rust dùng Ownership thay vì GC hay Manual Memory Management), .Net thì cho mỗi bên Windows (Mình không biết cái này có cross-platform không, với lại mình đang bên Linux nên làm cái này bất tiện hơn bên Win), còn Java/Kotlin thì vấn đề là NPE với tên Class dài quá (Tất nhiên là Kotlin đã hỗ trợ xử lý Null tốt hơn nhiều và Syntax cũng trở nên dễ đọc hơn so với Java và đồng thời hỗ trợ Data Class và tương thích với Java Codebase - Nhưng bác phải dùng Jetbrains IDE để làm điều này ;-;). Nên chung quy lại nó đều có những nhược điểm mà mình không chịu được. Có thể sẽ có số ngôn ngữ trong đấy hợp bác nên so sánh của mình phiến diện và chỉ mang tính chất tham khảo

Mình chưa phải dân thực chiến nhiều và chắc chắn rằng vẫn còn một chặng đường dài để đi.

Bác nên cân nhắc về bác sẽ sử dụng Rust để làm gì, cá nhân mình biết Rust Team quyết định tập trung nhiều vào Backwards Compatibility nên codebase của mình sẽ tránh bị lỗi thời, với dễ duy trì trong tương lai. Đồng thời, mình cần làm ứng dụng GUI, CLI cho Desktop và làm Back-end cho Web nữa và Rust đáp ứng đủ nó (Tất nhiên là Python làm điều này dễ dàng hơn, nhưng mình bắt mình viết Rust vì nó không sử dụng GC và bắt buộc mình tuân theo programming convention từ rất sớm).
 
Sửa lần cuối:

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.181
Quay lại
Lên đầu trang