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. 1
là 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 .