elixir como porta de entrada para o mundo da orientação à concorrência
DESCRIPTION
Palestra de Victor Oliveira no Beers&Bytes, evento do VilaReal que aconteceu no dia 27 de agosto de 2014.TRANSCRIPT
Desenvolvemos produtos digitais
Victor Oliveira Nascimento - 27 de Agosto
da Programação Funcional
Computação imperativa
● Assignment: a relação entre nome (variável) e seu valor pode ser alterada - famoso estado mutável
● Side effects: a ordem da execução pode alterar (dramaticamente) o resultado.
Porém… Turing não estava sozinho...
Turing Church
Cálculo Lambda
○ Tese de Church sobre a computabilidade○ Uma aplicação de uma função sempre
deverá reproduzir o mesmo efeito○ O programa é uma série de aplicações de
funções independente de ordem (alguém leu concorrência?)
Recapitulando: Imperativo x Funcional
★ Estado mutável
★ Ordem é importante
★ NÃO é side effect free
★ Estado imutável
★ Ordem NÃO é importante
★ É side effect free
E como fica a concorrência? - Imperativo
Thread based
E como fica a concorrência? - Funcional
Tome-lhe Erlang
Erlang VM (EVM) em modo
symmetric multiprocessing:
★ Um scheduler por thread
★ Uma run queue interna
★ Depende do O.S. apenas
para criar os schedulers
★ Utiliza processos leves
para concorrência
Tudo resolvido então?
Erlang é:
★ É funcional (está do lado do Church!)
★ Orientado à concorrência no modelo Ator e Mensagem
★ Possui primitivos de concorrência na VM (process ID,
references e etc)
★ Possui distribuição nativa (nodes de Erlang)
★ Está em produção em Telecom há mais de 20 anos
Porém...
★ É funcional (lembrem que estamos amaldiçoados pelo
Turing!)
★ Possui uma terminologia própria que confunde
(application, release, OTP)
★ Imutabilidade não é tão familiar:
1> A = 1.
1
2> A = 2.
** exception error: no match of
right hand side value 2
Porém… - parte 2
★ Nem todo mundo está acostumado com VI ou Emacs
★ Sem ferramental padrão para gerenciar dependências
★ Não há um repositório central de dependências
★ Estrutura dos projetos não muito clara
★ Sintaxe não é C-based nem Ruby|Python|Etc based
★ Frameworks de teste são bem completos mas, de novo, não
seguem RSpec e cia
★ Resumindo… tem que QUERER muito para aprender Erlang...
Recapitulando
★ Imperativo
★ Difícil
concorrência
★ Mindset atual
★ Funcional
★ Fácil concorrência
★ Mindset do futuro
Tome-lhe Elixir
Linguagem que roda na EVM, portanto é:
★ Funcional
★ Distribuída nativamente
★ Concorrente ao nível da VM
★ Sintaxe familiar para os Rubistas
★ Tooling incluso
★ Bônus: meta-programming aware!
★ Testes fazem parte da definição da estrutura do projeto
Tome-lhe Elixir - parte 2
★ Build system padrão: Mix
○ Suporta dependências, projetos umbrella (com vários
módulos), definição de ambientes (dev, prod, qa), vem
incluso na distribuição do Elixir
★ Package Manager: Hex.pm
○ Integrado nativamente com Mix.
○ Suporta dependências em Erlang também!
Tome-lhe Elixir - parte 3
Live coding anyone?
Tome-lhe Elixir - parte 4
Q & A
Tome-lhe Elixir - parte 5
★ http://elixir-lang.org/
★ https://hex.pm/
★ https://www.erlang-solutions.com/downloads/download-erla
ng-otp
★ http://pragprog.com/book/elixir/programming-elixir