Erlang có thực sự là một ngôn ngữ người mẫu?


18

Tôi đã đọc bài viết này:

http://www.doc.ic.ac.uk/~nd/surprise_97/journal/vol2/pjm2/

Và nó đề cập rằng:

... trong mô hình diễn viên, ngay cả một số nguyên cũng được biểu diễn như một diễn viên ...

Wikipedia xác nhận:

Mô hình diễn viên chấp nhận triết lý rằng mọi thứ đều là diễn viên.

Erlang có nhiều loại dữ liệu và những loại đó không phải là tác nhân như tôi có thể nói.

Điều đó không có nghĩa là Erlang không phải là ngôn ngữ mô hình diễn viên theo cách mà một số người nói rằng, ví dụ Java không phải là ngôn ngữ chức năng chỉ vì nó thiếu một số tính năng lập trình chức năng?

PS: bằng cách mở rộng, điều đó có nghĩa là Akka chắc chắn không phải là một mô hình diễn viên bởi vì ngoài các kiểu dữ liệu không phải là diễn viên đến từ ngôn ngữ máy chủ, nó thậm chí còn cho phép các diễn viên kế thừa hành vi của họ thông qua các cơ sở ngôn ngữ máy chủ.

Câu trả lời:


39

Mặc dù Mô hình diễn viên cũ hơn Erlang, các nhà thiết kế của Erlang chỉ tìm hiểu về Mô hình diễn viên sau khi đã thiết kế Erlang, do đó, một số khác biệt sẽ được mong đợi.

Tuy nhiên, họ đã đi theo những con đường tiến hóa song song: Mô hình diễn viên được Carl Hewitt tạo ra dựa trên thông điệp truyền tải ngữ nghĩa của Smalltalk. Alan Kay, lần lượt đã dựa trên thông điệp ngữ nghĩa của Smalltalk dựa trên đánh giá theo mục tiêu của PLANNER, được thiết kế bởi Morris Carl Hewitt.

PLANNER là tiền thân của Prolog. Erlang ban đầu không có ý định trở thành một ngôn ngữ, mà nó bắt đầu như một thư viện để lập trình phân tán chịu lỗi trong Prolog, và sau đó phát triển thành một phương ngữ của Prolog, trước khi nó trở thành ngôn ngữ của riêng nó, cho đến ngày nay vẫn bị ảnh hưởng bởi Prolog (cộng với, trình thông dịch Erlang ban đầu được viết bằng Prolog).

Vì vậy, sự tương đồng giữa các Quá trình trong Erlang, Đối tượng trong OO và Diễn viên trong Mô hình diễn viên khác xa với sự trùng hợp.

Erlang là một ngôn ngữ có nhiều lớp, mỗi lớp là các siêu lớp của các lớp thấp hơn. Lớp nhỏ nhất là Erlang chức năng . Đây là ngôn ngữ chức năng tiêu chuẩn với một số bổ sung được kế thừa từ Prolog, chẳng hạn như thống nhất thay vì ràng buộc / bình đẳng. Nếu chúng ta thêm Quy trìnhThông báo vào đó, chúng ta sẽ nhận được Erlang đồng thời . Ném vào các quy trình từ xa và bạn nhận được Erlang phân tán . Bây giờ thêm một số thư viện và mẫu thiết kế từ OTP và bạn có Erlang chịu lỗi.

Quá trình là diễn viên. (Chúng cũng là Đối tượng.) Bên trong các Quy trình là Chức năng, không dựa trên Diễn viên. Cấu trúc của một hệ thống Erlang chịu lỗi lớn được xây dựng bằng các công cụ và mẫu của OTP, thường rất hướng đối tượng.

Vì vậy, nó phụ thuộc vào quy mô bạn đang xem xét.

Trong một hệ thống Erlang lớn điển hình, bạn có một kiến ​​trúc hướng đối tượng với các tác nhân truyền thông điệp được triển khai bằng lập trình chức năng. Những gì OTP gọi là a servercó liên quan chặt chẽ đến một đối tượng, serverđược tạo thành từ các quy trình (là các tác nhân), các quy trình sử dụng các hàm bên trong.

Nói chung, tôi không tin rằng bất kỳ Ngôn ngữ diễn viên thuần túy nào đã rời khỏi nghiên cứu. Heck, tôi thậm chí không biết nếu PLASMA của Carl Hewitt, Ngôn ngữ diễn viên gốc thậm chí còn được thực hiện.


4
Erlang cũng được thiết kế bởi những người có vấn đề cần giải quyết và khi bạn ở vị trí đó, sự thuần khiết về mặt khái niệm thường được hy sinh tại bàn thờ của thực tiễn.
Blrfl

Thật thú vị, vấn đề họ đang cố gắng giải quyết (độ tin cậy, nhân rộng, dự phòng, Nhận) là cùng một bản chất đang cố gắng giải quyết khi nó phát triển 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. Song song khác.
Jörg W Mittag

1
PLASMA đã được triển khai trong MacLisp. Đó là một ngôn ngữ nghiên cứu phát triển nhanh chóng.
Jerry101

1
Thực sự rất thích câu trả lời này. Cảm ơn bạn @ JörgWMittag!
Felixyz
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.