thảo luận Rust ( Ngôn ngữ lập trình ) Và tương lai của nó ? Sáng hay ko sáng ? Mời các thím vào "chém gió"

đã từng có thời gian học thử Rust do muốn try hard, viết được 1 tool giống grep vào năm 2019
sau đó ko còn hứng thú nữa.. cũng định làm cái webserver để học luôn, mà công việc bận quá nên thôi bỏ ý định thành Rustician

-- đúng như bác thớt nói, 1 khi dính vào Rust thì có gì đó rất mê hoặc về ngôn ngữ này.. dù nó khá là khó, cho những ai ít đụng đến C++, như mình. :D
 
Lão này nói buồn cười vãi, chỉ trích Rust ko portable như C và ko thể thay thế C ở lĩnh vực Embedded, IoT. Ok, tôi có làm embedded đếch đâu, đầy cty cũng đếch làm mấy cái đó.

Giống kiểu bạn đang thiết kế cái xe bọc thép dùng để đem đi càn trong chiến trận, thì một thằng rồ nào đó bảo:
  • Xe nội thất xấu như cứt.
  • Xe này đêk đi đường cát được.
  • Xe này giảm sóc đếu êm.
... bla bla

-))



Uh oh Rust async is a mess.
Standard lib not include async runtime, closure things...

Rust cố giải quyết bài toán safe memory cho pointer nhưng kéo theo nhiều hi sinh và nhiều điều bất tiện khi phải tuân theo rules. Productivity là một trong số đó, 1 thanh niên đang code Rust on production cho hay.
Thím làm product về gì thế, job Rust bây giờ thấy toàn blockchain, coin củng
 
Rust may ra cạnh tranh với c++ làm back end hệ thống được thôi. Mà mảng này c++ cũng chưa bao giờ là thế mạnh (ở đây là nói về ưu tiên chọn lựa so với java). Còn những mảng chính mà c/c++ đang thống trị là nhúng/game/finance/desktop thì rust ko bao giờ mơ tới được.

via theNEXTvoz for iPhone
 
Cái hạn chế nhất của rust là steep learning curve. Nó đánh đổi tính dễ nắm bắt để lấy tất cả những cái khác. Rust tất nhiên có chỗ đứng của nó cho những dự án cực kì nghiêm ngặt về performance, ổn định và giảm tối đa bug. Nhưng sẽ khó để trở lên phổ biến như go hoặc node. Nếu là mình thì mình sẽ chọn go cho cân bằng. Thật vô nghĩa khi chỉ có 1 vài người cảm thấy thỏa mái khi làm việc với Rust, số còn lại thì vật lộn với cái compiler sau đó burn out và quit project.
 
Cái hạn chế nhất của rust là steep learning curve. Nó đánh đổi tính dễ nắm bắt để lấy tất cả những cái khác. Rust tất nhiên có chỗ đứng của nó cho những dự án cực kì nghiêm ngặt về performance, ổn định và giảm tối đa bug. Nhưng sẽ khó để trở lên phổ biến như go hoặc node. Nếu là mình thì mình sẽ chọn go cho cân bằng. Thật vô nghĩa khi chỉ có 1 vài người cảm thấy thỏa mái khi làm việc với Rust, số còn lại thì vật lộn với cái compiler sau đó burn out và quit project.
Nghe giống như những gì mô tả về Ada nhỉ? Một ngôn ngữ chặt chẽ xịn xò :pudency:
 
Mình cũng có một thời gian tầm 2 năm, tự học Rust rồi tham gia vào vài open source project trên mạng (công ty không có dự án dùng Rust, cũng chẳng ai quan tâm đến Rust, mãi về sau thì mình là người viết một tool đầu tiên, nằm trong gói sản phẩm của công ty, bằng Rust). Quả thật là viết Rust, nếu người nào từ C/C++ chuyển sang (đã từng vật lộn với những cái vụn vặt của C++), thì rất sướng.

Nhân đây nói về C++, là một ngôn ngữ quá phổ biến, mạnh mẽ, hiệu năng cao. Nhưng đáng buồn, là một ngôn ngữ được thiết kế cực tồi, bản tiêu chuẩn của C++ thay đổi liên tục, và giờ đến trên 1000 trang (và còn tiếp tục tăng), có câu nói đùa là không ai dám nói là biết C++. Một khai báo khởi tạo biến mà có vài chục cách, và không ai có thể nhớ nổi cách nào là UB, cách nào không. Điều hài hước ở chỗ là thậm chí trong C++ Standard có những chỗ tự mâu thuẫn với nhau.

Mình trước đây chỉ hỏi một câu cực đơn giản trên StackOverflow về tính toán offset của một thành phần trong struct mà mọi người trên đó tranh cãi cả hai ngày (moderator phải chuyển các comments sang chế độ chat), để xem có phải là UB hay không, cuối cùng mới kết luận không thể biết được vì standard có mẫu thuẫn (vài người phát hiện ra và trỏ đến các chi tiết rất nhỏ trong hơn 1000 trang của standard).

Để so sánh thì Scheme (một kế thừa của Lisp) có standard trong sáng, chỉ vài chục trang, hay như ML chỉ hơn 100 trang (người thiết kế Lisp và ML đều có giải Turing, và là những tượng đài thực sự trong computer science).

Lý do thì rất nhiều, nhưng lý do chính, là xuất phát điểm thiết kế. Ngôn ngữ này được thiết kế bởi Bjarne Stroustrup, nhằm đưa OOP vào C; đáng tiếc thay BS lại là người không có chuyên môn về oop và type theory (nhìn vào các công bố academic là rõ). Nhiều cái trong C++, ví dụ template, đúng thực sự là trò cười: cố gắng bắt chước parametric polymorphism nhưng lại không có HM type checking. Người nào đọc những cuốn như là Effective C++ thì thấy ngay sự vụn vặt của ngôn ngữ, đủ các trick vặt vãnh (học đến hết đời cũng không xong).

Bài học tương tự là Python, khi Dropbox đã cố gắng tuyển dụng Guido van Rossum về, với hi vọng có thể đưa gradual typing vào Python 3, nhưng rồi thất bại vì Guido chỉ đưa ra được một thứ giả cầy là type annotation. Lý do chính, vì lịch sự, không được nói thẳng ra, nhưng mọi người đều biết là vì Guido cũng là người không có chuyên môn về type theory. Nói ra điều này để thấy rằng, có những tượng đài, nhưng tượng đài không phải siêu nhân, vẫn có điểm yếu không khắc phục nổi.

Quay lại Rust, xuất phát điểm của Rust là dựa trên Cyclone, một dự án academic nhằm tạo ra một ngôn ngữ dựa trên C, nhưng thêm vào các đặc điểm để đảm bảo memory safety. Rust kế thừa phần lớn các ý tưởng của Cyclone (strong type system, fat pointer, region-based memory management), và phát triển thêm (từ tracked pointer trong Cyclone đến borrow checker trong Rust), kết hơp với RAII của C++, nhưng sử dụng trait thay vì inheritance.

Rust làm cho người lập trình cảm tưởng vừa có sự mạnh mẽ về mặt biểu đạt (expressiveness) của các ngôn ngữ lập trình hàm, vừa có hiệu năng cực tốt như các ngôn ngữ procedural bậc thấp như C/C++. Và hội đồng thiết kế Rust cũng rất "khôn ngoan" khi không cố gắng đưa vào ngôn ngữ những đặc điểm quá trừu tượng của các ngôn ngữ lập trình hàm (trong Rust, function không phải là first-class data type).

Một phần vì không thể, Rust không sử dụng GC, nên closure không thể là function, explicit data type representation nên cấu trúc dữ liệu không thể là cấu trúc đệ qui. Một phần khác là do bài học của các ngôn ngữ như SML/Haskell/OCaml vẫn còn sờ sờ ra đó, rất mạnh về mặt biểu đạt, nhưng trừu tượng nên phần lớn lập trình viên không muốn nắm bắt.

Hơn 2 năm nay mình không còn đụng đến Rust nữa (vì vài lý do cá nhân), thỉnh thoảng có theo dõi tình hình. Có cảm tưởng như Rust lặp lại vấn đề của C++, khi người ta cố gắng đưa mọi thứ vào ngôn ngữ, ví dụ effect system (nhiều người, vì cuồng Rust, cho rằng ngôn ngữ có thể làm được tất cả). Hay do Rust có sử dụng một đặc điểm rất nhỏ của linear logic là destroyed copy (còn gọi là move semantics), nên ảo tưởng cho rằng Rust có thể hỗ trợ hoàn toàn linear type như là Idris. Bản thân mình thì cho rằng đó là một dạng cargo-cult science.

Về chính trị thì gần đây biết Ashley Williams vừa ra khỏi nhóm core, điều này mình đã cảm giác từ rất lâu, khi mới học Rust và theo dõi vài video của bà này (hàm lượng trí tuệ/kỹ thuật cực thấp, được cái có vẻ lạc quan dễ hiểu, một trong những trò cười là video này), và tính cách toxic.
 
Last edited:
Mình cũng có một thời gian tầm 2 năm, tự học Rust rồi tham gia vào vài open source project trên mạng (công ty không có dự án dùng Rust, cũng chẳng ai quan tâm đến Rust, mãi về sau thì mình là người viết một tool đầu tiên, nằm trong gói sản phẩm của công ty, bằng Rust). Quả thật là viết Rust, nếu người nào từ C/C++ chuyển sang (đã từng vật lộn với những cái vụn vặt của C++), thì rất sướng.

Nhân đây nói về C++, là một ngôn ngữ quá phổ biến, mạnh mẽ, hiệu năng cao. Nhưng đáng buồn, là một ngôn ngữ được thiết kế cực tồi, bản tiêu chuẩn của C++ thay đổi liên tục, và giờ đến trên 1000 trang (và còn tiếp tục tăng), có câu nói đùa là không ai dám nói là biết C++. Một khai báo khởi tạo biến mà có vài chục cách, và không ai có thể nhớ nổi cách nào là UB, cách nào không. Điều hài hước ở chỗ là thậm chí trong C++ Standard có những chỗ tự mâu thuẫn với nhau.

Mình trước đây chỉ hỏi một câu cực đơn giản trên StackOverflow về tính toán offset của một thành phần trong struct mà mọi người trên đó tranh cãi cả hai ngày (moderator phải chuyển các comments sang chế độ chat), để xem có phải là UB hay không, cuối cùng mới kết luận không thể biết được vì standard có mẫu thuẫn (vài người phát hiện ra và trỏ đến các chi tiết rất nhỏ trong hơn 1000 trang của standard).

Để so sánh thì Scheme (một kế thừa của Lisp) có standard trong sáng, chỉ vài chục trang, hay như ML chỉ hơn 100 trang (người thiết kế Lisp và ML đều có giải Turing, và là những tượng đài thực sự trong computer science).

Lý do thì rất nhiều, nhưng lý do chính, là xuất phát điểm thiết kế. Ngôn ngữ này được thiết kế bởi Bjarne Stroustrup, nhằm đưa OOP vào C; đáng tiếc thay BS lại là người không có chuyên môn về oop và type theory (nhìn vào các công bố academic là rõ). Nhiều cái trong C++, ví dụ template, đúng thực sự là trò cười: cố gắng bắt chước parametric polymorphism nhưng lại không có HM type checking. Người nào đọc những cuốn như là Effective C++ thì thấy ngay sự vụn vặt của ngôn ngữ, đủ các trick vặt vãnh (học đến hết đời cũng không xong).

Bài học tương tự là Python, khi Dropbox đã cố gắng tuyển dụng Guido van Rossum về, với hi vọng có thể đưa gradual typing vào Python 3, nhưng rồi thất bại vì Guido chỉ đưa ra được một thứ giả cầy là type annotation. Lý do chính, vì lịch sự, không được nói thẳng ra, nhưng mọi người đều biết là vì Guido cũng là người không có chuyên môn về type theory. Nói ra điều này để thấy rằng, có những tượng đài, nhưng tượng đài không phải siêu nhân, vẫn có điểm yếu không khắc phục nổi.

Quay lại Rust, xuất phát điểm của Rust là dựa trên Cyclone, một dự án academic nhằm tạo ra một ngôn ngữ dựa trên C, nhưng thêm vào các đặc điểm để đảm bảo memory safety. Rust kế thừa phần lớn các ý tưởng của Cyclone (strong type system, fat pointer, region-based memory management), và phát triển thêm (từ tracked pointer trong Cyclone đến borrow checker trong Rust), kết hơp với RAII của C++, nhưng sử dụng trait thay vì inheritance.

Rust làm cho người lập trình cảm tưởng vừa có sự mạnh mẽ về mặt biểu đạt (expressiveness) của các ngôn ngữ lập trình hàm, vừa có hiệu năng cực tốt như các ngôn ngữ procedural bậc thấp như C/C++. Và hội đồng thiết kế Rust cũng rất "khôn ngoan" khi không cố gắng đưa vào ngôn ngữ những đặc điểm quá trừu tượng của các ngôn ngữ lập trình hàm (trong Rust, function không phải là first-class data type).

Một phần vì không thể, Rust không sử dụng GC, nên closure không thể là function, explicit data type representation nên cấu trúc dữ liệu không thể là cấu trúc đệ qui. Một phần khác là do bài học của các ngôn ngữ như SML/Haskell/OCaml vẫn còn sờ sờ ra đó, rất mạnh về mặt biểu đạt, nhưng trừu tượng nên phần lớn lập trình viên không muốn nắm bắt.

Hơn 2 năm nay mình không còn đụng đến Rust nữa (vì vài lý do cá nhân), thỉnh thoảng có theo dõi tình hình. Có cảm tưởng như Rust lặp lại vấn đề của C++, khi người ta cố gắng đưa mọi thứ vào ngôn ngữ, ví dụ effect system (nhiều người, vì cuồng Rust, cho rằng ngôn ngữ có thể làm được tất cả). Hay do Rust có sử dụng một đặc điểm rất nhỏ của linear logic là destroyed copy (còn gọi là move semantics), nên ảo tưởng cho rằng Rust có thể hỗ trợ hoàn toàn linear type như là Idris. Bản thân mình thì cho rằng đó là một dạng cargo-cult science.

Về chính trị thì gần đây biết Ashley Williams vừa ra khỏi nhóm core, điều này mình đã cảm giác từ rất lâu, khi mới học Rust và theo dõi vài video của bà này (hàm lượng trí tuệ/kỹ thuật cực thấp, được cái có vẻ lạc quan dễ hiểu, một trong những trò cười là video này), và tính cách toxic.

Cmt chất lượng đấy. Nói rõ ra thì Rust cũng có vay mượn từ Haskell 1 số cái, phần trait, derive, patern match… Nhưng cuối cùng Rust vẫn là imperative. Cho hỏi bạn hiện tại đang làm gì rồi? Sao ko chơi với Rust nữa :))
 
Up lên phát hỏi anh em tí.

Mình đang có một cái desktop software viết bằng FreePascal/Lazarus, mình cần call một số network service bên ngoài nhưng mà bên này lib nó hẻo quá nên mình định workaround bằng cách call network thông qua một thư viện khác viết bằng C hay Rust.

Dự là dùng C hay Rust viết một cái lib sau đó build ra binary gì đó (.o, .so, .lib, .dll...) có thể static hay dynamic linking, rồi từ Pascal binding qua. Tính là dùng Rust không biết có làm dc ko nhỉ các bác? C thì mình thấy có hỗ trợ còn Rust thì không rõ!?
 
Mình đoán là được (mặc dù nên rất thận trọng).

Rust chưa có stable ABI, nhưng theo những quy ước hiện tại thì "gần như C", chẳng hạn có thể export một hàm theo kiểu:

extern "C" fn network_service() { // some code Rust here }

Compile và link thành binary, rồi bên FreePascal/Lazarus gọi nó như gọi một hàm của C.

Vấn đề sẽ phức tạp hơn nếu như cái hàm network_service nó cần truyền tham số, nhất là những tham số là kiểu dữ liệu phức tạp như struct, lúc đó lại càng phải để ý đến ABI: khai báo layout repr(C) cho dữ liệu, lách bằng cách sử dụng pointer, rồi calling mechanism, etc.
 
Last edited:
Mình đoán là được (mặc dù nên rất thận trọng).

Rust chưa có stable ABI, nhưng theo những quy ước hiện tại thì "gần như C", chẳng hạn có thể export một hàm theo kiểu:

extern "C" fn network_service() { // some code Rust here }

Compile và link thành binary, rồi bên FreePascal/Lazarus gọi nó như gọi một hàm của C.

Vấn đề sẽ phức tạp hơn nếu như cái hàm network_service nó cần truyền tham số, nhất là những tham số là kiểu dữ liệu phức tạp như struct, lúc đó lại càng phải để ý đến ABI: khai báo layout repr(C) cho dữ liệu, lách bằng cách sử dụng pointer, rồi calling mechanism, etc.
Cảm ơn bác để mình vọc thử xem ntn. Đọc tài liệu thấy Rust nó có FFI nên hi vọng là làm được không thì chắc chỉ còn giải pháp cuối cùng là dùng C.
Cần cross platform nên ngại dùng C quá :sad:
 
Mình cũng có một thời gian tầm 2 năm, tự học Rust rồi tham gia vào vài open source project trên mạng (công ty không có dự án dùng Rust, cũng chẳng ai quan tâm đến Rust, mãi về sau thì mình là người viết một tool đầu tiên, nằm trong gói sản phẩm của công ty, bằng Rust). Quả thật là viết Rust, nếu người nào từ C/C++ chuyển sang (đã từng vật lộn với những cái vụn vặt của C++), thì rất sướng.

Nhân đây nói về C++, là một ngôn ngữ quá phổ biến, mạnh mẽ, hiệu năng cao. Nhưng đáng buồn, là một ngôn ngữ được thiết kế cực tồi, bản tiêu chuẩn của C++ thay đổi liên tục, và giờ đến trên 1000 trang (và còn tiếp tục tăng), có câu nói đùa là không ai dám nói là biết C++. Một khai báo khởi tạo biến mà có vài chục cách, và không ai có thể nhớ nổi cách nào là UB, cách nào không. Điều hài hước ở chỗ là thậm chí trong C++ Standard có những chỗ tự mâu thuẫn với nhau.

Mình trước đây chỉ hỏi một câu cực đơn giản trên StackOverflow về tính toán offset của một thành phần trong struct mà mọi người trên đó tranh cãi cả hai ngày (moderator phải chuyển các comments sang chế độ chat), để xem có phải là UB hay không, cuối cùng mới kết luận không thể biết được vì standard có mẫu thuẫn (vài người phát hiện ra và trỏ đến các chi tiết rất nhỏ trong hơn 1000 trang của standard).

Để so sánh thì Scheme (một kế thừa của Lisp) có standard trong sáng, chỉ vài chục trang, hay như ML chỉ hơn 100 trang (người thiết kế Lisp và ML đều có giải Turing, và là những tượng đài thực sự trong computer science).

Lý do thì rất nhiều, nhưng lý do chính, là xuất phát điểm thiết kế. Ngôn ngữ này được thiết kế bởi Bjarne Stroustrup, nhằm đưa OOP vào C; đáng tiếc thay BS lại là người không có chuyên môn về oop và type theory (nhìn vào các công bố academic là rõ). Nhiều cái trong C++, ví dụ template, đúng thực sự là trò cười: cố gắng bắt chước parametric polymorphism nhưng lại không có HM type checking. Người nào đọc những cuốn như là Effective C++ thì thấy ngay sự vụn vặt của ngôn ngữ, đủ các trick vặt vãnh (học đến hết đời cũng không xong).

Bài học tương tự là Python, khi Dropbox đã cố gắng tuyển dụng Guido van Rossum về, với hi vọng có thể đưa gradual typing vào Python 3, nhưng rồi thất bại vì Guido chỉ đưa ra được một thứ giả cầy là type annotation. Lý do chính, vì lịch sự, không được nói thẳng ra, nhưng mọi người đều biết là vì Guido cũng là người không có chuyên môn về type theory. Nói ra điều này để thấy rằng, có những tượng đài, nhưng tượng đài không phải siêu nhân, vẫn có điểm yếu không khắc phục nổi.

Quay lại Rust, xuất phát điểm của Rust là dựa trên Cyclone, một dự án academic nhằm tạo ra một ngôn ngữ dựa trên C, nhưng thêm vào các đặc điểm để đảm bảo memory safety. Rust kế thừa phần lớn các ý tưởng của Cyclone (strong type system, fat pointer, region-based memory management), và phát triển thêm (từ tracked pointer trong Cyclone đến borrow checker trong Rust), kết hơp với RAII của C++, nhưng sử dụng trait thay vì inheritance.

Rust làm cho người lập trình cảm tưởng vừa có sự mạnh mẽ về mặt biểu đạt (expressiveness) của các ngôn ngữ lập trình hàm, vừa có hiệu năng cực tốt như các ngôn ngữ procedural bậc thấp như C/C++. Và hội đồng thiết kế Rust cũng rất "khôn ngoan" khi không cố gắng đưa vào ngôn ngữ những đặc điểm quá trừu tượng của các ngôn ngữ lập trình hàm (trong Rust, function không phải là first-class data type).

Một phần vì không thể, Rust không sử dụng GC, nên closure không thể là function, explicit data type representation nên cấu trúc dữ liệu không thể là cấu trúc đệ qui. Một phần khác là do bài học của các ngôn ngữ như SML/Haskell/OCaml vẫn còn sờ sờ ra đó, rất mạnh về mặt biểu đạt, nhưng trừu tượng nên phần lớn lập trình viên không muốn nắm bắt.

Hơn 2 năm nay mình không còn đụng đến Rust nữa (vì vài lý do cá nhân), thỉnh thoảng có theo dõi tình hình. Có cảm tưởng như Rust lặp lại vấn đề của C++, khi người ta cố gắng đưa mọi thứ vào ngôn ngữ, ví dụ effect system (nhiều người, vì cuồng Rust, cho rằng ngôn ngữ có thể làm được tất cả). Hay do Rust có sử dụng một đặc điểm rất nhỏ của linear logic là destroyed copy (còn gọi là move semantics), nên ảo tưởng cho rằng Rust có thể hỗ trợ hoàn toàn linear type như là Idris. Bản thân mình thì cho rằng đó là một dạng cargo-cult science.

Về chính trị thì gần đây biết Ashley Williams vừa ra khỏi nhóm core, điều này mình đã cảm giác từ rất lâu, khi mới học Rust và theo dõi vài video của bà này (hàm lượng trí tuệ/kỹ thuật cực thấp, được cái có vẻ lạc quan dễ hiểu, một trong những trò cười là video này), và tính cách toxic.
Những comment như thế này chất lượng hơn tá bài viết trên medium, thanks vì sự tâm huyết của bác mặc dù em ko code Rust :love:
 
Công nhận, đọc mấy cái comment của mấy thím hay vãi, mấy thím thật sự quá giỏi, kiến thức sâu. Mình làm mãi có cái web bán hàng mà chả đâu ra đâu :D ước gì được trẻ lại, học hành chuyên cần hơn để có cái mà chém gió :D GIờ đang dùng Rust, nhưng chả biết cái gì mà chém :D
 
Công nhận, đọc mấy cái comment của mấy thím hay vãi, mấy thím thật sự quá giỏi, kiến thức sâu. Mình làm mãi có cái web bán hàng mà chả đâu ra đâu :D ước gì được trẻ lại, học hành chuyên cần hơn để có cái mà chém gió :D GIờ đang dùng Rust, nhưng chả biết cái gì mà chém :D
Tại sao lại cần phải trẻ lại fwnce. Cứ dành tgian tìm hiểu nâng cao chuyên môn thôi, chả bao giờ là muộn.
 
Tại sao lại cần phải trẻ lại fwnce. Cứ dành tgian tìm hiểu nâng cao chuyên môn thôi, chả bao giờ là muộn.
Vì người trẻ lúc nào cũng đầy nhiệt huyết đó fence :D hay xông xáo vào những cái mới. Còn qua 30 thì việc học cứ đều đều như 1 thói quen dưỡng sinh thôi :D
 
Vì người trẻ lúc nào cũng đầy nhiệt huyết đó fence :D hay xông xáo vào những cái mới. Còn qua 30 thì việc học cứ đều đều như 1 thói quen dưỡng sinh thôi :D
Mình cũng 3x, vẫn mò mẫm linh tinh hằng ngày nè fence. Fence tập đi rồi sẽ quen thôi.
 
Back
Top