elixir como porta de entrada para o mundo da orientação à concorrência

22
Desenvolvemos produtos digitais

Upload: concrete-solutions

Post on 22-Apr-2015

100 views

Category:

Technology


6 download

DESCRIPTION

Palestra de Victor Oliveira no Beers&Bytes, evento do VilaReal que aconteceu no dia 27 de agosto de 2014.

TRANSCRIPT

Page 1: Elixir como porta de entrada para o mundo da orientação à concorrência

Desenvolvemos produtos digitais

Page 2: Elixir como porta de entrada para o mundo da orientação à concorrência

Victor Oliveira Nascimento - 27 de Agosto

da Programação Funcional

Page 3: Elixir como porta de entrada para o mundo da orientação à concorrência
Page 4: Elixir como porta de entrada para o mundo da orientação à concorrência

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.

Page 5: Elixir como porta de entrada para o mundo da orientação à concorrência

Porém… Turing não estava sozinho...

Page 6: Elixir como porta de entrada para o mundo da orientação à concorrência
Page 7: Elixir como porta de entrada para o mundo da orientação à concorrência

Turing Church

Page 8: Elixir como porta de entrada para o mundo da orientação à concorrência

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?)

Page 9: Elixir como porta de entrada para o mundo da orientação à 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

Page 10: Elixir como porta de entrada para o mundo da orientação à concorrência

E como fica a concorrência? - Imperativo

Thread based

Page 11: Elixir como porta de entrada para o mundo da orientação à concorrência

E como fica a concorrência? - Funcional

Page 12: Elixir como porta de entrada para o mundo da orientação à concorrência

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

Page 13: Elixir como porta de entrada para o mundo da orientação à 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

Page 14: Elixir como porta de entrada para o mundo da orientação à concorrência

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

Page 15: Elixir como porta de entrada para o mundo da orientação à concorrência

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...

Page 16: Elixir como porta de entrada para o mundo da orientação à concorrência

Recapitulando

★ Imperativo

★ Difícil

concorrência

★ Mindset atual

★ Funcional

★ Fácil concorrência

★ Mindset do futuro

Page 17: Elixir como porta de entrada para o mundo da orientação à concorrência
Page 18: Elixir como porta de entrada para o mundo da orientação à concorrência

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

Page 19: Elixir como porta de entrada para o mundo da orientação à concorrência

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!

Page 20: Elixir como porta de entrada para o mundo da orientação à concorrência

Tome-lhe Elixir - parte 3

Live coding anyone?

Page 21: Elixir como porta de entrada para o mundo da orientação à concorrência

Tome-lhe Elixir - parte 4

Q & A

Page 22: Elixir como porta de entrada para o mundo da orientação à concorrência

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