O Erlang é uma linguagem de programação de uso geral e um sistema para execução, o nome Erlang foi atribuído a Bjarne Dacker, sendo compreendido tanto como uma referência ao matemático e engenheiro Agner Krarup Erlang e também como uma abreviação de Ericsson Language. A linguagem foi desenvolvida pela Ericsson para poder suportar aplicações distribuídas e toleradas a falhas a serem executadas em um ambiente de tempo real e ininterrupto. O objetivo do desenvolvimento da linguagem era melhorar o desenvolvimento de aplicações de telefonia. Erlang suporta nativamente hot swapping, de uma forma que o código pode ser modificado sem precisar parar o sistema, a linguagem originalmente era propriedade da Ericsson, mas em 1998 foi lançada em código aberto.
A versão inicial foi implementada em Prolog e influenciada pela linguagem de programação PLEX utilizada em centrais da Ericsson, a linguagem saiu do laboratório para aplicações reais após descontinuarem a central AXE, chamada EXE-N em 1995, isso de acordo com a Armstrong, o resultado do Erlang foi escolhido para o próximo modelo chamado de AXD.
E em 1998 a Ericsson anunciou a central AXD301 contendo mais de um milhão de linhas de códigos de Erlang, e com relatos de atingir confiabilidade superior a nove “9”s. Logo em seguido a linguagem de programação Erlang foi banida na Ericsson Radio System para novos produtos, devido a uma preferência pelo uso de linguagens não proprietárias, mas em 2004 a Ericsson voltou atrás e mais tarde Armstrong foi re-admitido.
No ano de 2006, o suporte a multiprocessamento simétrico foi adicionado na maquina virtual e no runtime.
A implementação da Ericsson era executar um código interpretado em uma maquiná virtual, mas também inclui um compilador para o código nativo, ainda que não suportado para todas as plataformas.
Gerenciar e criar processos é uma tarefa trivial para o Erlang de uma maneira geral, threads são consideradas complicadas e fontes que possui muitos erros de programação em linguagens. A comunicação entre processos acontece por troca de mensagens ao invés de variáveis compartilhadas, o que remove a necessidade de mecanismos explícitos de exclusão mútua.
A linguagem Erlang possui oito tipos de dados primitivos, são eles:
- Inteiros: Inteiros são escritos como sequências de dígitos decimais, por exemplo, 12, 12375 e -23427 são inteiros.
- Átomos: Átomos são usados nos programas para denotar valores distintos. São escritos como sequências de caracteres alfanuméricos, sendo o primeiro uma letra minúscula.
- Ponto flutuante: Números de ponto flutuante na representação IEEE 754 em 64 bits.
- Referências: Referências são símbolos globalmente únicos cuja única propriedade é a comparação para igualdade.
- Binários: Um binário é uma sequência de bytes. Binários proveem um meio que utiliza o espaço de maneira eficaz para armazenar dados binários.
- Pids: Pid é uma abreviatura de Process Identifier (identificador de processo). São criados pela primitiva spawn(…).
- Portas: Portas são utilizadas para se comunicar com o mundo externo. São criadas pela sub-rotina open_port.
- Funs: Funs são fechamento de funções. Funs são criadas por expressões da forma: fun(…) -> … end