thảo luận OOP hay FP

Các Voz Dev thuộc trường phái nào ?


  • Total voters
    596
Các bác có cảm thấy OOP giống với các phương pháp quản lý chất lượng 5s, 6Sigma, Lean ... ko? Em thấy giống vậy, lý thuyết thì nhiều học thuộc nói lại thì dễ nhưng thực hành dc thì phải qua tập luyện + 1 tí tư duy logic về việc sắp xếp gọn gàng các thứ. Cả hai cũng là những phương pháp để quản lý chất lượng và dễ dàng kiểm soát đối tượng có số lượng lớn
 
Các bác có cảm thấy OOP giống với các phương pháp quản lý chất lượng 5s, 6Sigma, Lean ... ko? Em thấy giống vậy, lý thuyết thì nhiều học thuộc nói lại thì dễ nhưng thực hành dc thì phải qua tập luyện + 1 tí tư duy logic về việc sắp xếp gọn gàng các thứ. Cả hai cũng là những phương pháp để quản lý chất lượng và dễ dàng kiểm soát đối tượng có số lượng lớn
Tôi thấy hầu hết những cái người ta hay quy là thuộc tính của OOP hay ưu điểm của OOP lại không liên quan gì đến OOP nguyên thuỷ như Smalltalk hết.
 
Cãi nhau tận 28 pages :boss:
Cty đang nhận dự án 5G, sử dụng Erlang hoàn toàn. Viết 70% là FP còn đâu là PP. . Năm ngoái thì viết module cho một bank system viết hoàn toàn JAVA thì OOP là chân ái :p Suy cho cùng thì FP hay PP hay OOP là do production nó quyết định.
Vậy tức là FP hay OOP thì đều không quan trọng. Quan trọng là trình độ phải không ạ.
 
Vậy tức là FP hay OOP thì đều không quan trọng. Quan trọng là trình độ phải không ạ.
Quan trọng là ở mục đích sử dụng xoay quanh mấy vấn đề như tiện lợi, hiệu năng, chi phí nên OOP hay FP là do bên production nó quyết. Ví dụ như 5G, xử lý hàng triệu connect/s thì tận dụng BEAM (Erlang virtual machine) cho rẻ mà lại đáp ứng được khả năng chịu tải. Mà đã đụng đến Erlang thì đương nhiên viết project phải bằng FP rồi vì nó là ngôn ngữ FP. WhatsApp mỗi ngày chắc nó phải cả tỷ kết nối cũng đang dùng Erlang.
Còn nói về trình độ thì nó lại k quyết định FP hay OOP vì mỗi cái sinh ra là để giải quyết vấn đề chuyên biệt của nó chứ không phải là sinh ra để giải quyết tất cả các vấn đề. Giống như JS sinh ra để viết phía client.
 
Last edited:
Thím nào hiểu FP là muốn sửa đổi data thì phải clone lại thì chưa hiểu hết về FP nhá. Vì trong FP sẽ chia sẻ data giữa data structure với nhau trong các tiến trình thực thi, trong tiến trình nếu muốn sửa đổi data thì dùng "trie" , nó có thể được sử dụng lại data mà không cần sao chép.
 
Thím nào hiểu FP là muốn sửa đổi data thì phải clone lại thì chưa hiểu hết về FP nhá. Vì trong FP sẽ chia sẻ data giữa data structure với nhau trong các tiến trình thực thi, trong tiến trình nếu muốn sửa đổi data thì dùng "trie" , nó có thể được sử dụng lại data mà không cần sao chép.
Vấn đề là làm sao chia sẻ giữa các tiến trình chạy đồng thời cho an toàn chứ không phải là phải clone hay không thím ạ. Clone là để đảm bảo mỗi tiến trình thay đổi dữ liệu không ảnh hưởng đến tiến trình khác cũng đang làm việc với cục dữ liệu đó.
 
Vấn đề là làm sao chia sẻ giữa các tiến trình chạy đồng thời cho an toàn chứ không phải là phải clone hay không thím ạ. Clone là để đảm bảo mỗi tiến trình thay đổi dữ liệu không ảnh hưởng đến tiến trình khác cũng đang làm việc với cục dữ liệu đó.
Việc này là do engine mỗi FP lang nó quản lý. Như BEAM của Erlang thì không lo khoản này. Miễn là cấu Ctdl giữa 2 tiến trình phải đảm bảo k xảy ra đột biến.
 
Việc này là do engine mỗi FP lang nó quản lý. Như BEAM của Erlang thì không lo khoản này. Miễn là cấu Ctdl giữa 2 tiến trình phải đảm bảo k xảy ra đột biến.
Tôi không rõ Erlang nên cái này nhờ thím giải thích rõ hơn cái engine của Erlang nó xử như thế nào.
Giả sử tôi có 1 cái struct Data, với 1 field là counter int kiểu này
Code:
struct Data  {
int counter
}
Giờ có 1 tiến trình A phải tăng cái counter này, trong khi tiến trình B khác phải đọc từ cái struct này để xử lý.
Vậy cơ chế của Erlang là gì để đảm bảo không có xung đột kiểu dirty read?
 
Tôi không rõ Erlang nên cái này nhờ thím giải thích rõ hơn cái engine của Erlang nó xử như thế nào.
Giả sử tôi có 1 cái struct Data, với 1 field là counter int kiểu này
Code:
struct Data  {
int counter
}
Giờ có 1 tiến trình A phải tăng cái counter này, trong khi tiến trình B khác phải đọc từ cái struct này để xử lý.
Vậy cơ chế của Erlang là gì để đảm bảo không có xung đột kiểu dirty read?
Cơ chế Process Communication Message Passing / linking processes nha fen, tùy vào case.
1637049970180.png


1637049446510.png


Link để thím hiểu rõ:
https://www.poeticoding.com/hey-process-there-is-a-message-for-you/
https://erlangbyexample.org/send-receive

Bởi vì cơ chế Shared memory khó bảo đảm sự toàn vẹn dữ liệu (coherence) nên Erlang nó không chơi cơ chế này mà chơi kiểu Message Passing, đảm bảo chặt chẽ. Chủ động quản lý được. Còn nếu vẫn chưa yên tâm có thể wrapper thêm linking processes chủ động bẫy lỗi.
tôi đảm bảo sau khi tìm hiểu core Erlang thím sẽ say mê nó. :big_smile:
 
Last edited:
Cơ chế Process Communication Message Passing / linking processes nha fen, tùy vào case.
View attachment 870962

View attachment 870944

Link để thím hiểu rõ:
https://www.poeticoding.com/hey-process-there-is-a-message-for-you/
https://erlangbyexample.org/send-receive

Bởi vì cơ chế Shared memory khó bảo đảm sự toàn vẹn dữ liệu (coherence) nên Erlang nó không chơi cơ chế này mà chơi kiểu Message Passing, đảm bảo chặt chẽ. Chủ động quản lý được. Còn nếu vẫn chưa yên tâm có thể wrapper thêm linking processes chủ động bẫy lỗi.
tôi đảm bảo sau khi tìm hiểu core Erlang thím sẽ say mê nó. :big_smile:
Tôi đọc không thấy 2 bài này nói chi tiết, nhưng message passing thì kiểu gì mà không phải clone cái message ra hở thím :amazed:
 
Tôi đọc không thấy 2 bài này nói chi tiết, nhưng message passing thì kiểu gì mà không phải clone cái message ra hở thím :amazed:
Fen cứ tìm hiểu và làm với Erlang một thời gian là hiểu tầng core nó làm việc thế nào. K clone như fen nghĩ đâu. cơ chế Process Pattern Matching của BEAM nó khác với các VM của các ngôn ngữ PP hoặc OOP.
 
Fen cứ tìm hiểu và làm với Erlang một thời gian là hiểu tầng core nó làm việc thế nào. K clone như fen nghĩ đâu. cơ chế Process Pattern Matching của BEAM nó khác với các VM của các ngôn ngữ PP hoặc OOP.
Giải thích đi thím. Ngôn ngữ nào chả phải access xuống mem. Muốn trao đổi dữ liệu thì 1 là share memory, 2 là clone ra 1 cái mới rồi pass value
 
Giải thích đi thím. Ngôn ngữ nào chả phải access xuống mem. Muốn trao đổi dữ liệu thì 1 là share memory, 2 là clone ra 1 cái mới rồi pass value
Giải thích thì hơi dài nhưng thím có thể tìm hiểu "Erlang Term Storage (ETS)". Còn tóm tắt thì đại lý là ETS nó như một cái túi dữ liệu riêng cho mỗi process. Đây là túi dữ liệu phụ. Process bị chết, data cũng bị xóa.
  • 3 kiểu truy cập data của ETS​

    • :public - read/write functions are available to all other processes,
    • :protected - default one, read is available to all other processes, write - only to owner process
    • :private - read/write available to the owner processes only.
--> Lúc này process nào cần dùng dữ liệu của process khác thì có thể thông qua Message Passing để giữ cho process ấy sống đến khi không còn task nào cần truy cập data nữa là giải phóng memory.
P/s: "..;p" toàn ra :p
 
Last edited:
Giải thích thì hơi dài nhưng thím có thể tìm hiểu "Erlang Term Storage (ETS)". Còn tóm tắt thì đại lý là ETS nó như một cái túi dữ liệu riêng cho mỗi process. Đây là túi dữ liệu phụ. Process bị chết, data cũng bị xóa.
  • 3 kiểu truy cập data của ETS​

    • :public - read/write functions are available to all other processes,
    • :protected - default one, read is available to all other processes, write - only to owner process
    • :private - read/write available to the owner processes only.
P/s: "..;p" toàn ra :p

Với kiểu private thì không nói nhiều vì ông process nào dùng của ông đó.

Giờ nói tới kiểu protect và public.

Ta có dữ liệu là A trong mem lưu tại địa chỉ *a bây giờ muốn cho 2 process đều xử lý thằng này.
Process1 nếu không share địa chỉ *a cho thằng process2 thì nó đọc ở đâu ra dữ liệu là A.
Nếu nó không đưa địa chỉ thì bắt buộc nó phải đưa giá trị A cho thằng 2 vậy giá trị này lấy ở đâu ra phải copy ra 1 địa chỉ *b nào đó thôi.
 
Cãi nhau tận 28 pages :boss:
Cty đang nhận dự án 5G, sử dụng Erlang hoàn toàn. Viết 70% là FP còn đâu là PP. . Năm ngoái thì viết module cho một bank system viết hoàn toàn JAVA thì OOP là chân ái :p Suy cho cùng thì FP hay PP hay OOP là do production nó quyết định.
Cho tôi hỏi tôi có đọc 1 số page nước ngoài làm về 5G thì ko hiểu sao tụi nó dùng Erlang và C,C++ nhỉ ? 5G ko phải là hạ tầng hay sao, mà thêm vào đó sao ko dùng Elixir cho nó surgar daddy hơn
 
Back
Top