Erlang é realmente uma linguagem modelo de ator?


18

Eu estava lendo este artigo:

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

E menciona que:

... no modelo de ator, mesmo um número inteiro é representado como ator ...

A Wikipedia confirma:

O modelo de ator adota a filosofia de que tudo é um ator.

Erlang tem muitos tipos de dados e esses tipos não são atores, tanto quanto eu posso dizer.

Isso não significa que Erlang não é uma linguagem de modelo de ator de uma maneira que algumas pessoas dizem que, por exemplo, Java não é uma linguagem funcional apenas porque carece de certos recursos de programação funcional?

PS: por extensão, significa que Akka definitivamente não é um modelo de ator porque, além dos tipos de dados que não são de atores provenientes do idioma do host, ele também permite que os atores herdados estendam seu comportamento por meio dos recursos do idioma do host.

Respostas:


39

Embora o modelo de ator seja mais antigo que Erlang, os projetistas de Erlang só aprenderam sobre o modelo de ator depois de projetá-lo, portanto, algumas diferenças são esperadas.

Eles seguiram caminhos paralelos de evolução: o Modelo do Ator foi criado por Carl Hewitt com base na semântica de transmissão de mensagens do Smalltalk. Alan Kay, por sua vez, baseara a semântica de transmissão de mensagens do Smalltalk na avaliação orientada a objetivos do PLANNER, projetada por ... Carl Hewitt.

PLANNER foi o precursor do Prolog. Originalmente, Erlang não pretendia ser uma linguagem, mas começou como uma biblioteca para programação distribuída tolerante a falhas no Prolog, e depois evoluiu para um dialeto do Prolog, antes de se tornar sua própria linguagem, até hoje fortemente influenciada pelo Prolog. (além disso, o intérprete original de Erlang foi escrito em Prolog).

Portanto, as semelhanças entre Processos em Erlang, Objetos no OO e Atores no Modelo do Ator estão longe de ser coincidentes.

Erlang é uma linguagem com várias camadas, cada uma das quais são superconjuntos das camadas inferiores. A menor camada é o Erlang Funcional . Essa é uma linguagem funcional padrão com algumas adições herdadas do Prolog, como unificação em vez de ligação / igualdade. Se adicionarmos Processos e Mensagens a isso, obteremos Erlang Simultâneo . Jogue em processos remotos e você receberá o Distributed Erlang . Agora adicione algumas bibliotecas e padrões de design do OTP e você terá Erlang tolerante a falhas.

Processos são atores. (Eles também são objetos.) O interior dos processos é funcional, não baseado em ator. A estrutura de um grande sistema Erlang tolerante a falhas, construído usando as ferramentas e os padrões do OTP, geralmente é muito orientado a objetos.

Portanto, depende de qual escala você está olhando.

Em um sistema Erlang grande e típico, você tem uma arquitetura orientada a objetos com atores de passagem de mensagens implementados usando programação funcional. O que o OTP chama de serverestá intimamente relacionado a um objeto, servers são compostos de processos (que são atores), os processos usam funções internamente.

Em geral, não acredito que nenhuma linguagem pura de ator tenha saído de pesquisa. Caramba, eu nem sei se o PLASMA de Carl Hewitt, a linguagem do ator original, já foi implementada.


4
Erlang também foi projetado por pessoas com um problema a resolver e, quando você está nessa posição, a pureza conceitual é muitas vezes sacrificada no altar da praticidade.
Blrfl 26/03

Curiosamente, o problema que eles estavam tentando resolver (confiabilidade, replicação, redundância ...) é a mesma natureza que tentavam resolver quando evoluíram as células. Alan Kay estudou microbiologia e modelou explicitamente OO em células biológicas. Outro paralelo.
Jörg W Mittag 26/03

1
O PLASMA foi implementado no MacLisp. Era uma linguagem de pesquisa em rápida evolução.
Jerry101

1
Gostei muito desta resposta. Obrigado @ JörgWMittag!
Felixyz #
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.