Apakah Erlang benar-benar bahasa model aktor?

18

Saya sedang membaca artikel ini:

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

Dan disebutkan bahwa:

... dalam model aktor bahkan integer direpresentasikan sebagai aktor ...

Wikipedia menegaskan:

Model Aktor mengadopsi filosofi bahwa semuanya adalah aktor.

Erlang memiliki banyak tipe data dan tipe-tipe itu bukanlah aktor sejauh yang saya tahu.

Bukankah itu berarti bahwa Erlang bukan bahasa model aktor dengan cara beberapa orang mengatakan bahwa misalnya Java bukan bahasa fungsional hanya karena tidak memiliki fitur pemrograman fungsional tertentu?

PS: dengan ekstensi itu berarti bahwa Akka jelas bukan model aktor karena selain tipe data non-aktor yang berasal dari bahasa host itu bahkan memungkinkan aktor yang mewarisi untuk memperluas perilaku mereka melalui fasilitas bahasa host.

Sarang
sumber

Jawaban:

39

Meskipun Model Aktor lebih tua dari Erlang, para desainer Erlang hanya belajar tentang Model Aktor setelah merancang Erlang, sehingga beberapa perbedaan harus diharapkan.

Mereka mengikuti jalur paralel evolusi, meskipun: Model Aktor diciptakan oleh Carl Hewitt berdasarkan pesan yang melewati semantik Smalltalk. Alan Kay, pada gilirannya mendasarkan pesan lewat semantik Smalltalk pada evaluasi goal-driven PLANNER, yang dirancang oleh ... Carl Hewitt.

PLANNER adalah pendahulu untuk Prolog. Erlang awalnya tidak dimaksudkan untuk menjadi bahasa, melainkan dimulai sebagai perpustakaan untuk pemrograman terdistribusi toleransi kesalahan dalam Prolog, dan kemudian berkembang menjadi dialek Prolog, sebelum menjadi bahasa sendiri, masih sampai hari ini sangat dipengaruhi oleh Prolog (ditambah, juru bahasa Erlang asli ditulis dalam Prolog).

Jadi, kesamaan antara Proses di Erlang, Objek di OO, dan Aktor dalam Model Aktor jauh dari kebetulan.

Erlang adalah bahasa dengan beberapa lapisan, yang masing-masing adalah superset dari lapisan bawah. Lapisan terkecil adalah Fungsional Erlang . Ini adalah bahasa fungsional standar dengan beberapa tambahan yang diwarisi dari Prolog, seperti penyatuan alih-alih mengikat / kesetaraan. Jika kita menambahkan Proses dan Pesan untuk itu, kita mendapatkan Concurrent Erlang . Lemparkan dalam proses jarak jauh, dan Anda mendapatkan Distributed Erlang . Sekarang tambahkan beberapa perpustakaan dan pola desain dari OTP, dan Anda memiliki Erlang toleran-kesalahan.

Proses adalah Aktor. (Mereka juga Obyek.) Bagian dalam Proses adalah Fungsional, bukan berdasarkan Aktor. Struktur sistem Erlang yang toleran terhadap kesalahan besar yang dibangun menggunakan alat dan pola OTP, seringkali sangat Berorientasi Objek.

Jadi, itu tergantung pada skala apa yang Anda lihat.

Dalam sistem Erlang besar yang khas, Anda memiliki arsitektur berorientasi objek dengan aktor yang menyampaikan pesan diimplementasikan menggunakan pemrograman fungsional. Apa yang disebut OTP serverterkait erat dengan objek, serverterdiri dari proses (yang merupakan aktor), proses menggunakan fungsi secara internal.

Secara umum, saya tidak percaya bahwa Bahasa Aktor murni pernah meninggalkan penelitian. Heck, saya bahkan tidak tahu apakah Carl Hewitt's PLASMA, Bahasa Aktor asli bahkan pernah diterapkan.

Jörg W Mittag
sumber
4
Erlang juga dirancang oleh orang-orang dengan masalah untuk dipecahkan, dan ketika Anda berada di posisi itu, kemurnian konseptual sering dikorbankan di altar kepraktisan.
Blrfl
Menariknya, masalah yang mereka coba selesaikan (reliabilitas, replikasi, redundansi, ...) adalah sifat yang sama yang coba dipecahkan ketika berevolusi sel. Alan Kay belajar mikrobiologi, dan secara eksplisit memodelkan OO pada sel biologis. Paralel lain.
Jörg W Mittag
1
PLASMA diimplementasikan di MacLisp. Itu adalah bahasa penelitian yang berkembang pesat.
Jerry101
1
Sangat menikmati jawaban ini. Terima kasih @ JörgWMittag!
Felixyz