Qual é a diferença entre processos / mensagens em Erlang e objetos / mensagens em Smalltalk?

12

Estou tentando entender a diferença entre objetos / mensagens no Smalltalk e processos / mensagens no Erlang . Eu li o seguinte post sobre o tema .

Pelo que entendi, no Smalltalk, tudo é um objeto e tudo tem a mesma abstração "objeto / mensagem" - até o número 1é um objeto que só pode ser alcançado com a passagem de mensagens. Existe 1um processo no Erlang / Elixir? Tudo em Erlang é uma resposta ao paradigma da mensagem / programa? Você pode enviar uma mensagem para um número em Erlang?

Muito obrigado.

Totalmente funcional
fonte
Um número inteiro 1 não é um processo - portanto, você não pode enviar uma mensagem. Você pode agrupar o estado de um número inteiro dentro de um processo recorrente e enviar mensagens a esse processo - por exemplo, uma instrução para aumentar ou diminuir seu valor. Mas, novamente, não teria mais valor 1. Role para baixo até o exemplo do Elixir aqui dantswain.herokuapp.com/blog/2015/01/06/…
GavinBrelstaff
obrigado por uma resposta!
FullyFunctional

Respostas:

18

Processos em Erlang e Objetos em Smalltalk são realmente a mesma coisa.

À primeira vista, isso não é muito surpreendente: Erlang é uma linguagem de modelo de ator . O Modelo do Ator foi inventado por Carl Hewitt, que baseou o modelo de avaliação orientada a mensagens no modelo de avaliação orientado a mensagens do Smalltalk. (Realmente, Atores e Objetos são a mesma coisa; eles diferem apenas em alguns detalhes.) Alan Kay, por sua vez, foi influenciado pelo PLANNER de Carl Hewitt, quando ele projetou Smalltalk.

Portanto, existe uma estreita relação entre Atores e Objetos e, portanto, não deve surpreender que os Processos de Erlang e os Objetos de Smalltalk sejam tão semelhantes.

Exceto por uma coisa: os designers de Erlang não sabiam sobre o modelo de ator !!! Eles aprenderam sobre isso mais tarde, principalmente quando Joe Armstrong escreveu sua tese de doutorado sob Seif Haridi (co-autor do livro definitivo sobre Paradigmas de Programação) no final dos anos 90.

Joe Armstrong escreveu um artigo no qual defendia fortemente o OO ( Why OO Sucks ), mas depois mudou de idéia quando percebeu que Erlang é realmente muito orientado a objetos. De fato, ele chegou a afirmar que Erlang é a única linguagem orientada a objetos nesta entrevista com Joe Armstrong e Ralph Johnson .

Este é um caso interessante do que os biólogos evolucionistas chamariam de evolução convergente , ou seja, duas espécies não relacionadas que evoluem para serem semelhantes em resposta a pressões externas semelhantes.

Ainda existem muitas relações entre Erlang e Smalltalk, no entanto:

Erlang começou como uma extensão simultânea para o Prolog (e mesmo quando o Erlang se tornou sua própria linguagem separada, as primeiras implementações foram escritas no Prolog) e ainda hoje está fortemente enraizado no Prolog. O prólogo é fortemente influenciado pelo PLANNER de Carl Hewitt.

O Smalltalk também foi fortemente influenciado pelo que mais tarde se tornaria o ARPANet (e ainda mais tarde a Internet); Erlang foi projetado para sistemas em rede.

No entanto, uma das diferenças importantes entre Erlang e Smalltalk é que nem tudo é um processo. 1é um número, não um processo. Você não pode enviar uma mensagem para um número.

Existem várias "camadas" de Erlang:

  • Erlang funcional : uma linguagem funcional tipicamente dinâmica e tipicamente dinâmica, com algumas "esquisitices" herdadas do Prolog, por exemplo, unificação.
  • Erlang simultâneo : Erlang funcional + processos e mensagens.
  • Erlang distribuído : processos simultâneos Erlang + Remote.
  • Erlang tolerante a falhas : Erlang distribuído + determinados padrões de projeto codificados nas bibliotecas OTP, por exemplo, árvores de supervisor e gen_server.

Um sistema tolerante a falhas, escrito em Erlang / OTP, normalmente se parece com algo que podemos reconhecer como "Orientado a Objetos". Mas o interior desses objetos geralmente será implementado em um estilo mais funcional do que orientado a objetos.

Curiosamente, a "pressão evolutiva" sob a qual Erlang estava, em outras palavras, o problema que os projetistas de Erlang estavam tentando resolver (confiabilidade, replicação, redundância ...) é a mesma pressão que levou à evolução das células. Alan Kay estudou microbiologia e modelou explicitamente OO em células biológicas. Este é outro paralelo entre Erlang e Smalltalk.

Eu escrevi um pouco sobre isso em outra resposta minha .

Jörg W Mittag
fonte
Obrigado, isso é útil!
FullyFuncional