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ó"

Mình cũng đang tự mò học Rust mà mỗi ngày chỉ cố gắng học được 1 tí buổi tối. Đi làm về rồi ăn uống, dọn dẹp nhà cửa, tắm rửa, chăm con xong cũng 10h cmnr, cố ngồi vào học được 30ph-1h là bắt đầu mỏi mắt :(
 
Mình cũng đang tự mò học Rust mà mỗi ngày chỉ cố gắng học được 1 tí buổi tối. Đi làm về rồi ăn uống, dọn dẹp nhà cửa, tắm rửa, chăm con xong cũng 10h cmnr, cố ngồi vào học được 30ph-1h là bắt đầu mỏi mắt :(
Đây là cách tôi dùng để đi ngủ đúng h mỗi tối :byebye:
 
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 :))
Giờ mình bê tha lắm bạn, khác hẳn so với hồi đó. Đm, có những sự cố trong cuộc đời mà sau đó không tài nào về được như cũ nữa, tưởng chỉ có trong phim mà đéo hiểu tại sao nó lại rơi trúng mình =((.

Chỉ vài năm trước đây thôi còn thức cả đêm để đọc paper, ngồi implement C compiler với cái ngôn ngữ chết tiệt Koka (mục đích chính là để tìm hiểu effect systems), bugs của nó thì nhiều vãi đái luôn. Lấy source cũ rích của Cyclone về build lại để hiểu tại sao lại có cái nọ mà không có cái kia (cái source này tai quái ở chỗ là nó chỉ build được với một bản gcc rất cũ). Rồi tạo PRs, fix bugs, chửi nhau say mê với bọn open source devs.
 
Last edited:
Giờ mình bê tha lắm bạn, khác hẳn so với hồi đó. Đm, có những sự cố trong cuộc đời mà sau đó không tài nào về được như cũ nữa, tưởng chỉ có trong phim mà đéo hiểu tại sao nó lại rơi trúng mình =((.

Chỉ vài năm trước đây thôi còn thức cả đêm để đọc paper, ngồi implement C compiler với cái ngôn ngữ chết tiệt Koka (mục đích chính là để tìm hiểu effect systems), bugs của nó thì nhiều vãi đái luôn. Lấy source cũ rích của Cyclone về build lại để hiểu tại sao lại có cái nọ mà không có cái kia (cái source này tai quái ở chỗ là nó chỉ build được với một bản gcc rất cũ). Rồi tạo PRs, fix bugs, chửi nhau say mê với bọn open source devs.
Cố lên bác ... Mình thấy bác là nhân tài của đất nước ấy, vượt qua được nghịch cảnh là bác phát triển vô tiền khoán hậu luôn :D
 
Giờ mình bê tha lắm bạn, khác hẳn so với hồi đó. Đm, có những sự cố trong cuộc đời mà sau đó không tài nào về được như cũ nữa, tưởng chỉ có trong phim mà đéo hiểu tại sao nó lại rơi trúng mình =((.

Chỉ vài năm trước đây thôi còn thức cả đêm để đọc paper, ngồi implement C compiler với cái ngôn ngữ chết tiệt Koka (mục đích chính là để tìm hiểu effect systems), bugs của nó thì nhiều vãi đái luôn. Lấy source cũ rích của Cyclone về build lại để hiểu tại sao lại có cái nọ mà không có cái kia (cái source này tai quái ở chỗ là nó chỉ build được với một bản gcc rất cũ). Rồi tạo PRs, fix bugs, chửi nhau say mê với bọn open source devs.

Rảnh thì kể thêm nghe chơi đi bạn. Nghe câu chuyện của bạn thú vị. :D
 
Giờ mình bê tha lắm bạn, khác hẳn so với hồi đó. Đm, có những sự cố trong cuộc đời mà sau đó không tài nào về được như cũ nữa, tưởng chỉ có trong phim mà đéo hiểu tại sao nó lại rơi trúng mình =((.

Chỉ vài năm trước đây thôi còn thức cả đêm để đọc paper, ngồi implement C compiler với cái ngôn ngữ chết tiệt Koka (mục đích chính là để tìm hiểu effect systems), bugs của nó thì nhiều vãi đái luôn. Lấy source cũ rích của Cyclone về build lại để hiểu tại sao lại có cái nọ mà không có cái kia (cái source này tai quái ở chỗ là nó chỉ build được với một bản gcc rất cũ). Rồi tạo PRs, fix bugs, chửi nhau say mê với bọn open source devs.
Thím bị sự cố gì vậy?

Em cũng muốn mày mò, đóng góp, chửi lộn với thiên hạ nhưng cơm áo gạo tiền chưa cho phép
 
Hôm nay tình cờ đọc được tin Python Type Hints are Turing Complete trên lobste mà phì cười (kiểm tra lại thì phát hiện ra là tin này đã được đăng trên Reddit và HN từ tuần trước). Điều này về lý thuyết được phát hiện và công bố năm 2007 với variance của type parameters (bài báo của Kennedy và Pierce).

Đến 2017 thì phát hiện ra Java generics gặp sự cố này (nói chung "thông cảm được" do generics được thiết kế và đưa vào Java từ khoảng trước 2004). Còn đối với Guido thì có khi ông không ý thức được vấn đề đó khi giới thiệu type hint vào năm 2014 (thậm chí ông còn không phải là người thiết kế ra type checking algorithm).

Trên C++ cũng có trò lố tương tự khi Stroustrup không hề biết rằng C++ template là turing complete (ví dụ chỉ ra điều này còn tầm thường hơn nhiều so với Java). Còn cách đây vài năm thì cũng đã có vài người phát hiên ra điều tương tự với trait system của Rust.
 
Last edited:
Hôm nay tình cờ đọc được tin Python Type Hints are Turing Complete trên lobste mà phì cười (kiểm tra lại thì phát hiện ra là tin này đã được đăng trên Reddit và HN từ tuần trước). Điều này về lý thuyết được phát hiện và công bố năm 2007 với variance của type parameters (bài báo của Kennedy và Pierce).

Đến 2017 thì phát hiện ra Java generics gặp sự cố này (nói chung "thông cảm được" do generics được thiết kế và đưa vào Java từ khoảng trước 2004). Còn đối với Guido thì có khi ông không ý thức được vấn đề đó khi giới thiệu type hint vào năm 2014 (thậm chí ông còn không phải là người thiết kế ra type checking algorithm).

Trên C++ cũng có trò lố tương tự khi Stroustrup không hề biết rằng C++ template là turing complete (ví dụ chỉ ra điều này còn tầm thường hơn nhiều so với Java). Còn cách đây vài năm thì cũng đã có vài người phát hiên ra điều tương tự với trait system của Rust.

Với C++ thì từ đó trở đi nó đã trở thành một tính năng cực kỳ quan trọng của ngôn ngữ. Mở đường cho nhiều thư viện hay ho và các phương pháp tối ưu mới.
 
Với C++ thì từ đó trở đi nó đã trở thành một tính năng cực kỳ quan trọng của ngôn ngữ. Mở đường cho nhiều thư viện hay ho và các phương pháp tối ưu mới.
Theo mình điều này vừa đúng vừa sai. Đúng là vì template mở đường cho các phương pháp tối ưu (còn có mới và hay ho hay không thì còn là vấn đề để bàn cãi), template cũng là cách (mặc dù rất tệ hại) để thực hiện tính năng (rất quan trọng) parametric polymorphism.

Còn sai thì vì vài lý do mà mình có thể nghĩ ra sau đây:

C++ template được Stroupstrup đưa ra rất sớm với ý định mô tả parametric polymorphism, nhưng gần như ngay sau đó người ta phát hiện ra rằng C++ template là turing complete, điều này (hài hước thay) nằm ngoài dự kiến của tác giả.

Template là một cách thực hiện metaprogramming (trong vô vàn những cách khác nhau, nhưng đối với C++ thì đó là cách duy nhất), và đã là metaprogramming thì luôn có thể sử dụng trong optimization: vì metaprogramming là program transformation. Bước đột phá đáng kể là bởi Veldhuizen khi ông kết hợp yếu tố Turing complete của C++ template và partial evaluation để hệ thống hóa các ý tưởng tối ưu chương trình dùng template.

Điều này giải thích tại sao không phải "từ đó trở đi" mà thực ra là "mãi về sau" C++ template mới được sử dụng dưới dạng như bây giờ. Nhưng cũng vì đây là một đặc điểm nằm ngoài thiết kế, nên C++ template trở nên cực kỳ vụn vặt và phức tạp (như nhiều chi tiết khác của ngôn ngữ), với đủ thứ ngoại lệ (ví dụ SFINAE).
 
Last edited:
Theo mình điều này vừa đúng vừa sai. Đúng là vì template mở đường cho các phương pháp tối ưu (còn có mới và hay ho hay không thì còn là vấn đề để bàn cãi), template cũng là cách (mặc dù rất tệ hại) để thực hiện tính năng (rất quan trọng) parametric polymorphism.

Còn sai thì vì vài lý do mà mình có thể nghĩ ra sau đây:

C++ template được Stroupstrup đưa ra rất sớm với ý định mô tả parametric polymorphism, nhưng gần như ngay sau đó người ta phát hiện ra rằng C++ template là turing complete, điều này (hài hước thay) nằm ngoài dự kiến của tác giả.

Template là một cách thực hiện metaprogramming (trong vô vàn những cách khác nhau, nhưng đối với C++ thì đó là cách duy nhất), và đã là metaprogramming thì luôn có thể sử dụng trong optimization: vì metaprogramming là program transformation. Bước đột phá đáng kể là bởi Veldhuizen khi ông kết hợp yếu tố Turing complete của C++ template và partial evaluation để hệ thống hóa các ý tưởng tối ưu chương trình dùng template.

Điều này giải thích tại sao không phải "từ đó trở đi" mà thực ra là "mãi về sau" C++ template mới được sử dụng dưới dạng như bây giờ. Nhưng cũng vì đây là một đặc điểm nằm ngoài thiết kế, nên C++ template trở nên cực kỳ vụn vặt và phức tạp (như nhiều chi tiết khác của ngôn ngữ), với đủ thứ ngoại lệ (ví dụ SFINAE).
Thím cho hỏi "Turing complete" có ưu khuyết ntn nhỉ? Mình nghe nhiều mà chưa thực sự tìm hiểu về nó.

Meta prgramming cũng nghe nhiều mà chưa tìm hiểu ứng dụng lắm. :pudency:
 
Thím cho hỏi "Turing complete" có ưu khuyết ntn nhỉ? Mình nghe nhiều mà chưa thực sự tìm hiểu về nó.

Meta prgramming cũng nghe nhiều mà chưa tìm hiểu ứng dụng lắm. :pudency:
Meta prog code dùng để sinh code. Trong rust có macro, khá hại não và khó debug, ko thân thiện với editor cho lắm, thật ra ko thân thiện cả với người -))
 
Thím cho hỏi "Turing complete" có ưu khuyết ntn nhỉ? Mình nghe nhiều mà chưa thực sự tìm hiểu về nó.

Meta prgramming cũng nghe nhiều mà chưa tìm hiểu ứng dụng lắm. :pudency:

Turing complete = có thể mô phỏng một máy Turing. Theo mệnh đề Church-Turing thì điều đó có nghĩa là có thể cài đặt mọi thuật toán lên trên đó. Thực tế thì còn có giới hạn về bộ nhớ vì máy Turing là unlimited memory, nhưng người ta thường tạm cho qua điều kiện này.

Về ưu thì như định nghĩa là có thể tính toán mọi thứ mình muốn. Về khuyết thì có thể là vấn đề bảo mật: một số hệ thống nếu là Turing complete thì có thể bị lợi dụng để khai thác làm những chuyện ngoài mong muốn.

---

Meta-X = X about X. VD: metadata = data about data: dữ liệu mô tả dữ liệu khác.
Meta-Programming là chương trình lập trình ra chương trình khác. Ví dụ thường gặp nhất là một script python để generate một đoạn mã C mà mình không thể tự viết do quá dài. Một số ngôn ngữ cho phép tự metaprogramming lên chính chương trình đang viết chứ không cần phải thông qua chương trình khác.
 
Trước t có đọc 1 bài viết nói về việc metaprogramming được phát hiện trong C++ ntn :D.
https://www.modernescpp.com/index.php/c-core-guidelines-rules-for-template-metaprogramming
Thấy khá là bựa, và từ đó mới hiểu ra là metaprogramming không nằm trong design ban đầu, nó giống như 1 tai nạn thôi, thảo nào nó khá là rắm rối và vụn vặt. Tất nhiên nó cũng được khắc phục dần dần qua các các bản C++ mới hơn. Sorry ae nếu comment lạc quẻ, klq đến rust, :D
 
Back
Top