Có ae nào học Rust hay đang làm việc với Rust (doanh nghiệp hoặc side project) cho mình xin review về ưu nhược điểm cũng như góc nhìn của ae về tương lai của ngôn ngữ ngữ này, đặc biệt là với các hệ thống backend tải cao! Thanks ae
Tương lai của Rust với backend system
Sao không nghe ai bàn đến chọn database nào tải cao, setup database thế nào để chịu tải nhỉ, toàn nghe bàn hiệu năng Golang, rust, trong khi phần yếu nhất là kết nối từ web server tới database. Web server bèo bèo cũng chịu nổi vài chục nghìn request đồng thời, còn database select nặng, nhiều data là hẹo. Ngày xưa trend nodejs thì mang node ra để chê PHP.
Bạn có yêu thích Rust, sử dụng Rust làm ngôn ngữ chính hay không? Nếu:
- Người ta nói rằng nó KHÔNG có tương lai.
- Người ta nói Rust rất có tương lai bạn sẽ đâm đầu vào Rust?
Cũng hỏi luôn là bạn đang sử dụng ngôn ngữ lập trình nào làm ngôn ngữ chính? Bạn đã viết được bao nhiêu dòng code ở ngôn ngữ mà bạn xem là chính này?
Có lẽ nhiều bạn ngày nay không chịu học các cái nền tảng để rồi bị mấy cái gọi là hype bem cho u đầu sứt trán. Nếu để ý thấy những gã nhảy loi choi hết “công nghệ” này đến công nghệ khác thì nói chung là chẳng thể trở thành lập trình viên hoặc người viết code đúng nghĩa mà đó chỉ là những gã, nói thế nào nhỉ, nói là “lợi dụng sự kém hiểu biết CNTT của người khác để kiếm ăn”, ứng tuyển vào cty người ta toàn làm cho team bị rối hơn là làm ra sản phẩm.
Trước đây nhiều năm thì sao? Lúc đó thì Java, .NET & C#, PHP. Chục năm trở lại đây thì sao? Nào là từng Ruby, Python, JavaScript, TypeScript, GoLang. Vài năm trở lại đây thì sao? Rust, Julia, Zig. Trong khi đó, có vài gã có vẻ là lạc hậu quê mùa, đi xài cái chẳng ai biết có tuổi đời cũng không già như C nhưng so với các Hype khác thì cũng già ( Erlang - 1986) và đã kiếm rất nhiều tiền (cho những ai lười đọc: mấy gã này phát triển WhatsApp bằng ngôn ngữ Erlang) và bán công ty được hàng tỉ đô la.
Hãy thử tìm hiểu xem vì sao Linus Torvalds nói về các ngôn ngữ lập trình, ổng có thể hơi lập dị khi cho rằng C là tốt hơn mọi thứ, nhưng ổng đã làm rất tốt với 1 thứ ngôn ngữ mà ổng dùng hàng ngày và không nhảy loi choi cái nào khác. Với ổng, C là tốt nhất với ổng vì ổng thích cái cách C làm việc trực tiếp với phần cứng, còn mấy ngôn ngữ khác, trừu tượng gì đó ổng xem là… kinh khủng.
Một Linus Tovalds thôi thì có vẻ là hơi ca đặc biệt, liệt kê nhiều quá thì không xuể, thôi thì bơm thêm 2 gã nữa là Jeff Atwood mà rất nhiều anh em lên đây đang sử dụng sản phẩm của gã này, gã này trải qua thời gian cũng có vài ngôn ngữ khác nhau nhưng nói chung là không nhảy loi choi (chủ yếu là C# viết theo trường phái thiên VB, sau này học thêm Ruby), có nhảy thì cứ xem gã dùng ngôn ngữ trước đó như thế nào để thấy gã cũng là bậc thầy. Rồi cụ Douglas Crockford thì dùng ngôn ngữ lập trình nào?
Nếu vẫn lăn tăn, thử xem gã Mark Zugkerberg lập trình ngôn ngữ nào? Có lẽ cũng loanh quanh PHP mà thôi.
Vì sao người ta nhảy loi choi nhiêu ngôn ngữ? Đơn giản: họ chẳng học ngôn ngữ nào nên đầu nên đũa . Cái này không chỉ đúng trong ngôn ngữ lập trình, mà học ngôn ngữ tự nhiên cũng vậy, bạn mà gặp chàng/ nàng nào nay đi học ngoại ngữ này, mai học ngoại ngữ khác… dám cá luôn là các thứ tiếng mà anh ta/ cô ta “thành thạo” là kiểu như: Helllo! How R U? I’m 5 thank U, and U? và hết, qua tiếng khác cũng bấy nhiêu chuyện.
Túm cái váy lại, nếu bạn thích chơi với trâu bò mà không sợ bị húc thủng bụng, thử chọn 1 ngôn ngữ họ C để học, còn sợ bị trâu húc thì chọn họ ngôn ngữ không có sừng. Chọn đại diện nào trong 2 họ chính này? Không khó chọn: cái nào đã có lịch sử trên 20 năm thì chọn, nếu vẫn chịu thua không biết cái nào già/ trẻ, đọc tiếp bên dưới:
Các đại diện cho 2 họ này mà bạn lên mạng hoang mang vì toàn đọc được những thứ hype (mà trình digital literacy còn thấp nên bạn bó tay, lạc lối) thì cứ tìm trong textbook của các trường đại học lớn trên thế giới có ngành Computer Science. Học cho vững 1 ngôn ngữ đi rồi sau này có nhảy qua cái khác cũng dễ dàng, nhanh chóng.
Cảm ơn lời khuyên của bác, background của e là dev C++ (3yoe), làm core lib của 1 app trên 100M user. Tuy ko quá sâu nhưng cũng đã đụng chạm nhiều vấn đề khó với c++ như multithread, deadlock, race condition, và các vấn đề về hiệu suất … E chỉ muốn hỏi góc nhìn của ae về tương lai của Rust, vì e cũng đọc 1 số comment của các dev trên Reddit và sự thành công của các dự án lớn của họ khi migrate từ Java/Go/… sang Rust.
https://discord.com/blog/why-discord-is-switching-from-go-to-rust
https://dropbox.tech/infrastructure/rewriting-the-heart-of-our-sync-engine
2 ví dụ của bạn đều là case ở ngôn ngữ (Java và Python) chuyển qua Rust. 2 ngôn ngữ này được xem là “bậc cao” hơn so với Rust.
Trong khi ở “vũ trụ khác”, bạn đang viết code C++, nhưng bạn chưa xem thử các case nhảy từ C++ qua Rust? Ở đó người ta bình luận gì khi chuyển từ C++ qua Rust?
Theo các so sánh đánh giá (mà mình đọc đuọc) thì giữa Rust và C++ khá là ngang nhau, cái này có thể hơn cái kia điểm này, thua điểm kia, và hơn thua ở đây phụ thuộc vào kỹ năng của người viết code hơn là bản thân ngôn ngữ. Có vài benchmarking, rất ít có khác biệt về “hiệu suất” để tin rằng người ta cần phải nhảy qua Rust ngay và luôn để tránh… lỡ chuyển máy bay Concorde.
C++ được xem là sự mở rộng của C, thêm nữa điểm thú vị là hầu hết compiler cho nó cũng có thể compile C, nếu cần hiệu suất cao thì viết code trong C++ giống như C. Điều đó có phải là dễ dàng hơn bỏ C++ để nhảy qua Rust?
Cả C và C++ chưa có dấu hiệu nào cho thấy người ta đang từ bỏ để nhảy qua Rust hoặc cái gì khác được đánh giá low-level tương đương, mà còn bắt đầu áp dụng làm những chuyện quái lạ hơn như tạo ra vài framework mạnh dùng cho lập trình web.
TIOBE Index for July 2024: C++ phổ biến thứ 2, thì Rust đang ở 13. Có gì gây lo ngại?
Stack Overflow 2023 thì C++ đứng thứ 9 tổng bảng, nhưng mức low-level thì nó đang đứng 1, trên cả C, còn Rust đứng 14 trên bảng, tức vẫn cách C++ đến 5 “bước chân”.
Theo triple E năm 2023 thì C++ xếp thứ 3, Rust xếp thứ 18.
Theo những số liệu trên, những cụ già sẽ cười nói với chủ topic rằng “lo bò trắng răng”
Vậy, nếu thích nhảy loi choi thì bắt đầu học Rust khi có thời gian rảnh, còn không thích nhảy, thời gian rảnh tập trung vào C++ best practices.
Túm lại: bớt lên mạng xem bậy rồi FOMO hoặc FUD đi, cái này chỉ có lợi cho bọn lừa đảo.
multithread thì đi đâu cũng khó vậy thôi đâu liên quan gì tới ngôn ngữ
Rust chỉ có thêm chức năng chống truy cập a[i] out of bounds bằng trình biên dịch là C++ ko làm được thôi còn lại Rust như 1 là coding style của C++
Về mặt thiết kế ngôn ngữ thì Rust đã làm rất tốt khi khắc phục các nhược điểm lớn của C++ / Java / Javascript là đưa các monads vào để trừu tượng hóa một cách tự nhiên các vấn đề như là các biến chứa giá trị null
, bắt buộc lập trình viên phải xử lý 2 trường hợp không thể hoặc có thể null
ở cấp độ biên dịch. Tính năng này thấy ở hầu hết các ngôn ngữ hiện đại như Swift, Kotlin, …
Cùng với đó thì memory management trong Rust cũng cố gắng kiểm tra ngay ở cấp độ biên dịch, giúp nó trở thành ngôn ngữ an toàn, chặt chẽ và tránh lỗi tốt hơn.
Sự đa năng của Rust thì không kém C++, thậm chí đang được đưa vào code của Linux Kernel và làm back-end cho nhiều dự án lớn như DenoJs (đảo ngữ của NodeJs) .
Rust từng được bình chọn là ngôn ngữ yêu thích nhất trên StackOverflow và có ông lớn là Mozilla hậu thuẫn nên có thể tin rằng hệ sinh thái của nó đủ vững để phát triển không ngừng.
Bên cạnh đó, một điều tuyệt vời của Rust là trình build và quản lý gói chính thức và tập trung tên là “Cargo”. Chắc hẳn ai đã vật lộn với việc build dự án C++, bơi trong đống build system thì mới thấy giá trị của một trình quản lý gói và build system chính thức và thống nhất. Nhờ thế mà khi code Rust, chúng ta không bị phụ thuộc vào IDE với nhiều kiểu project structure mà có thể tự do thoải mái sử dụng Editor mà mình yêu thích. Điều này cũng giúp thúc đẩy cộng đồng và các thư viện của Rust tăng trưởng nhanh hơn rất nhiều.
Tuy nhiên, C/C++ là một cây đại thụ và gốc rễ rất sâu cùng với cộng đồng khổng lồ, nên không thể trông chờ nó bị bật gốc được.
Google từng muốn dùng Dart để thay thế cho JS ở phía web front end và đã thất bại. Rõ ràng, vì dù Dart có thiết kế tốt hơn JS thật nhưng anh hùng không tạo lên được thời thế.
Microsoft với chiến thuật thông minh hơn, với triết lý Javascript là Typescript, thì chúng ta có thể thấy độ phủ của Typescript hiện nay không hề nhỏ và đang ngày càng tăng cho cả front end cũng như NodeJS.
Thế là một kết hoạch nữa lại sinh ra, không thay thế được C++, cũng như không thay thế được JS, thì Google chúng tôi sẽ cố gắng tổng quát nó.
Tada … Successor của C++ aka Carbon đã được sinh ra và đang trong quá trình thử nghiệm:
carbon-language/carbon-lang: Carbon Language’s main repository: documents, design, implementation, and related tools. (NOTE: Carbon Language is experimental; see README) (github.com)
Rust tương lai thì nhìn sáng, nhưng không được sáng cho lắm.
Đơn giản rust có 1 vấn đề cực kỳ khó chịu của Rust cũng là điểm mạnh của nó là contract programming. Contract của Rust quá là chặt chẽ, dẫn đến việc chỉ cần 1 thay đổi nhỏ, bạn phải thay đổi cả nguyên 1 app.
Mình đã code rust và nhiều khi chỉ muốn thêm 1 lifetime vô cho 1 field của 1 struct A, kết quả phải gắn lifetime vô toàn bộ các hàm liên quan tới struct A này.
Điều này tốt không? Rất tốt, nhưng với app quá to, việc thay đổi này cực kỳ tốn thời gian, chưa kể là việc có những code không phải của bạn, và phải update logic của những code đó.
Còn Webapp thì Rust như dao bổ trâu để giết gà, Node.js, Golang, Java, C# thậm chí cả Python vẫn dư sức đáp ứng được các nhu cầu hiện nay. Đó là chưa nói tới việc các chuẩn HTTP2, HTTP3 giúp cho các HTTP request nhanh hơn nữa.
Còn về library, Rust hiện tại không có ABI được chuẩn hoá nên việc build shared library là gần như không thể. Muốn sử dụng shared library của rust yêu cầu bạn phải sử dụng đúng rust compiler version mới sử dụng được các shared library này.
Và nếu bạn để ý, hầu hết các app được rewrite bởi rust thường là app nhỏ, cli. Không phải không có các big app nhưng nó ít. Và các app này thường … thiếu tính năng so với các app gốc. Khi đủ tính năng thì cái chữ “blazing fast” của rust như trò đùa vậy.
Blockchain app được ưu chuộng Rust vì nó sinh ra năng lượng để xử lý. Nhưng câu hỏi là liệu blockchain có trở lại thời hoàng kim?
Nên với cá nhân mình, tương lai của Rust là các app system nhỏ, ít tính năng vì nó dễ maintain hơn. Và khi Rust ABI được chuẩn hoá, thì nó sẽ thiên về system library như glibc viết bằng rust chẳng hạn :>
Bên mình đã dùng Rust để viết một phần platform IoT nông nghiệp. Gọi là “một phần” vì trước đó nó được viết bằng Python, sau đó mình lấy phần chạy nặng nhất ra viết lại bằng Rust.
Đã chia sẻ kinh nghiệm ở đây.