Actor é uma linguagem de programação concorrente, de passagem de mensagens utilizada para programar sistemas com muitos actores, tais como jogos de vídeo ou sistemas distribuídos. O actor é baseado no modelo de actor, um modelo matemático de computação simultânea.
O actor foi criado por Hugh Smith e David Ungar em 1986. Foi inspirado pela linguagem de programação Smalltalk, que Smith e Ungar tinham utilizado no início dos anos 80.
O actor é uma linguagem estaticamente dactilografada e orientada para objectos. Tem um pequeno conjunto de tipos e operadores de dados centrais, e um modelo de objecto simples e poderoso.
Os programas de actores são compostos por actores, que são objectos que comunicam uns com os outros através do envio e recepção de mensagens. Um actor pode enviar uma mensagem a outro actor, utilizando o operador ! (bang). Por exemplo, o seguinte código envia uma mensagem do actor A para o actor B:
A ! B
Quando um actor recebe uma mensagem, pode responder executando um código. O código que um actor executa em resposta a uma mensagem é chamado comportamento.
Os actores também podem criar novos actores. Quando um actor cria um novo actor, ele torna-se o pai do novo actor. A relação pai-filho entre actores é chamada de hierarquia.
Os actores podem ser organizados em hierarquias para criar sistemas complexos. Por exemplo, um jogo de vídeo pode ter uma hierarquia de actores que representam o mundo do jogo, o jogador, as personagens inimigas, e os objectos do jogo.
Uma característica chave do Actor é o seu apoio à programação concomitante. A programação concorrente é um estilo de programação em que múltiplas tarefas são executadas simultaneamente. No Actor, a programação simultânea é conseguida utilizando a passagem de mensagens para comunicar entre actores.
A passagem de mensagens é uma forma de comunicação inter-processo (IPC) em que as mensagens são enviadas entre processos. Em Actor, a passagem de mensagens é utilizada para a comunicação entre actores.
A passagem de mensagens tem várias vantagens sobre outras formas de IPC, tais como memória partilhada ou bloqueios. Primeiro, a passagem de mensagens é assíncrona, o que significa que o remetente e o receptor de uma mensagem não precisam de ser sincronizados. Segundo, a passagem da mensagem é não bloqueada, o que significa que o remetente não precisa de esperar que o receptor processe a mensagem antes de continuar.
Terceiro, a passagem de mensagens é escalável, o que significa que pode ser utilizada para comunicar entre um grande número de processos. Quarto, a passagem de mensagens é tolerante a falhas, o que significa que pode continuar a funcionar mesmo que um ou mais processos falhem.
O actor também tem apoio para a programação distribuída. Na programação distribuída, um programa é dividido em múltiplas partes que funcionam em diferentes computadores. O mecanismo de passagem de mensagens do actor pode ser utilizado para comunicar entre estas partes.
Actor é uma linguagem de programação poderosa que é bem adequada para a programação de sistemas complexos. O seu apoio à programação concorrente e distribuída torna-a uma escolha ideal para o desenvolvimento de aplicações de grande escala.