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 .