Elixir como porta de entrada para o mundo da orientação à concorrência
-
Upload
concrete-solutions -
Category
Technology
-
view
100 -
download
6
description
Transcript of Elixir como porta de entrada para o mundo da orientação à concorrência
![Page 1: Elixir como porta de entrada para o mundo da orientação à concorrência](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/5539441d5503464e418b49bc/html5/thumbnails/1.jpg)
Desenvolvemos produtos digitais
![Page 2: Elixir como porta de entrada para o mundo da orientação à concorrência](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/5539441d5503464e418b49bc/html5/thumbnails/2.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/5539441d5503464e418b49bc/html5/thumbnails/3.jpg)
![Page 4: Elixir como porta de entrada para o mundo da orientação à concorrência](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/5539441d5503464e418b49bc/html5/thumbnails/4.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/5539441d5503464e418b49bc/html5/thumbnails/5.jpg)
Porém… Turing não estava sozinho...
![Page 6: Elixir como porta de entrada para o mundo da orientação à concorrência](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/5539441d5503464e418b49bc/html5/thumbnails/6.jpg)
![Page 7: Elixir como porta de entrada para o mundo da orientação à concorrência](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/5539441d5503464e418b49bc/html5/thumbnails/7.jpg)
Turing Church
![Page 8: Elixir como porta de entrada para o mundo da orientação à concorrência](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/5539441d5503464e418b49bc/html5/thumbnails/8.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/5539441d5503464e418b49bc/html5/thumbnails/9.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/5539441d5503464e418b49bc/html5/thumbnails/10.jpg)
E como fica a concorrência? - Imperativo
Thread based
![Page 11: Elixir como porta de entrada para o mundo da orientação à concorrência](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/5539441d5503464e418b49bc/html5/thumbnails/11.jpg)
E como fica a concorrência? - Funcional
![Page 12: Elixir como porta de entrada para o mundo da orientação à concorrência](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/5539441d5503464e418b49bc/html5/thumbnails/12.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/5539441d5503464e418b49bc/html5/thumbnails/13.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/5539441d5503464e418b49bc/html5/thumbnails/14.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/5539441d5503464e418b49bc/html5/thumbnails/15.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/5539441d5503464e418b49bc/html5/thumbnails/16.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/5539441d5503464e418b49bc/html5/thumbnails/17.jpg)
![Page 18: Elixir como porta de entrada para o mundo da orientação à concorrência](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/5539441d5503464e418b49bc/html5/thumbnails/18.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/5539441d5503464e418b49bc/html5/thumbnails/19.jpg)
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](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/5539441d5503464e418b49bc/html5/thumbnails/20.jpg)
Tome-lhe Elixir - parte 3
Live coding anyone?
![Page 21: Elixir como porta de entrada para o mundo da orientação à concorrência](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/5539441d5503464e418b49bc/html5/thumbnails/21.jpg)
Tome-lhe Elixir - parte 4
Q & A
![Page 22: Elixir como porta de entrada para o mundo da orientação à concorrência](https://reader034.fdocumentos.tips/reader034/viewer/2022051820/5539441d5503464e418b49bc/html5/thumbnails/22.jpg)
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