Sự khác biệt giữa các quy trình / tin nhắn trong Erlang và các đối tượng / tin nhắn trong Smalltalk là gì?


12

Tôi đang cố gắng hiểu sự khác biệt giữa các đối tượng / tin nhắn trong Smalltalk và các quy trình / tin nhắn trong Erlang . Tôi đọc bài viết sau đây về chủ đề này .

Theo như tôi hiểu, ở Smalltalk, mọi thứ đều là một đối tượng và mọi thứ đều có sự trừu tượng hóa "đối tượng / thông điệp" - thậm chí cả số1 là một đối tượng chỉ có thể đạt được khi truyền thông điệp. Là 1một quá trình trong Erlang / Elixir? Có phải mọi thứ trong Erlang đều là phản hồi cho mô hình tin nhắn / chương trình? Bạn có thể gửi tin nhắn đến một số trong Erlang không?

Cảm ơn rất nhiều.


Số nguyên 1 không phải là một quá trình - vì vậy bạn không thể gửi tin nhắn. Bạn có thể bọc trạng thái của một số nguyên bên trong một quy trình lặp lại và gửi các thông điệp quy trình đó - ví dụ: một hướng dẫn để tăng hoặc giảm giá trị của nó. Nhưng sau đó một lần nữa, nó sẽ không còn giá trị nữa 1. Cuộn xuống ví dụ Elixir tại đây dantswain.herokuapp.com/blog/2015/01/06/ Kẻ
GavinBrelstaff

cảm ơn bạn đã trả lời
Hoàn thành

Câu trả lời:


18

Các quy trình trong Erlang và các đối tượng trong Smalltalk thực sự giống nhau.

Thoạt nhìn, điều này không có gì đáng ngạc nhiên lắm: Erlang là một ngôn ngữ Người mẫu diễn viên . Mô hình diễn viên được phát minh bởi Carl Hewitt, người dựa trên mô hình đánh giá dựa trên thông điệp trên mô hình đánh giá dựa trên thông điệp của Smalltalk. (Thực sự, diễn viên và đối tượng là như nhau

Vì vậy, có một mối quan hệ chặt chẽ giữa Diễn viên và Đối tượng, và do đó, không có gì đáng ngạc nhiên khi các Quá trình của Erlang và Đối tượng của Smalltalk rất giống nhau.

Ngoại trừ một điều: các nhà thiết kế của Erlang không biết về Mô hình diễn viên !!! Họ chỉ biết về nó sau này, đặc biệt khi Joe Armstrong viết Luận án Tiến sĩ dưới thời Seif Haridi (đồng tác giả của cuốn sách dứt khoát về Nghịch lý lập trình) vào cuối những năm 1990.

Joe Armstrong đã viết một bài báo trong đó anh ta ủng hộ mạnh mẽ chống lại OO ( Why OO Sucks ), nhưng sau đó anh ta đã thay đổi ý định khi nhận ra rằng Erlang thực sự rất hướng đối tượng. Trên thực tế, ông thậm chí còn đi xa hơn khi tuyên bố rằng Erlang là ngôn ngữ hướng đối tượng duy nhất trong cuộc phỏng vấn này với Joe Armstrong và Ralph Johnson .

Đây là một trường hợp thú vị về cái mà các nhà sinh học tiến hóa sẽ gọi là tiến hóa hội tụ , tức là hai loài không liên quan tiến hóa tương tự nhau để đáp ứng với những áp lực bên ngoài tương tự.

Tuy nhiên, vẫn còn rất nhiều mối quan hệ giữa Erlang và Smalltalk:

Erlang khởi đầu như một phần mở rộng đồng thời cho Prolog (và ngay cả khi Erlang trở thành ngôn ngữ riêng của nó, các triển khai đầu tiên được viết bằng Prolog) và cho đến ngày nay vẫn bắt nguồn từ Prolog. Prolog bị ảnh hưởng nặng nề bởi PLANNER của Carl Hewitt.

Smalltalk cũng bị ảnh hưởng nặng nề bởi những gì sau này trở thành ARPANet (và thậm chí sau này là Internet); Erlang được thiết kế cho các hệ thống nối mạng.

Tuy nhiên, một trong những khác biệt quan trọng giữa Erlang và Smalltalk là không phải mọi thứ đều là Quy trình. 1là một con số, không phải là một quá trình. Bạn không thể gửi tin nhắn đến một số.

Có nhiều "lớp" của Erlang:

  • Chức năng Erlang : một ngôn ngữ chức năng chủ yếu, được gõ động với một số "số lẻ" được thừa hưởng từ Prolog, ví dụ: thống nhất.
  • Erlang đồng thời : chức năng + Quy trình và tin nhắn.
  • Erlang phân tán : Erlang đồng thời + quy trình từ xa.
  • Erlang chịu lỗi : Erlang phân tán + các mẫu thiết kế nhất định được mã hóa trong các thư viện OTP, ví dụ: cây giám sát và gen_server.

Một hệ thống chống lỗi được viết bằng Erlang / OTP thường sẽ trông giống như một cái gì đó chúng ta có thể nhận ra là "Hướng đối tượng". Nhưng bên trong của các đối tượng đó thường sẽ được thực hiện theo một chức năng nhiều hơn so với phong cách hướng đối tượng.

Thật thú vị, "áp lực tiến hóa" mà Erlang phải chịu, nói cách khác, vấn đề mà các nhà thiết kế của Erlang đang cố gắng giải quyết (độ tin cậy, sao chép, dự phòng, giật) là áp lực tương tự dẫn đến sự tiến hóa của các tế bào. Alan Kay khai thác về vi sinh học và mô hình hóa rõ ràng OO trên các tế bào sinh học. Đây là một song song khác giữa Erlang và Smalltalk.

Tôi đã viết một chút về điều này trong một câu trả lời khác của tôi .


Cảm ơn bạn, điều đó hữu ích!
Hoàn toàn hoạt động
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.