If you want your application to benefit from the continued exponential throughput advances in new processors, it will need to be a well-written concurrent (usually multithreaded) application - Herb Sutter “
The vast majority of programmers today don’t grok concurrency, just as the vast majority of programmers 15 years ago didn’t yet grok objects - Herb Sutter “ 2005: 13 anos atrás
Funcional Imutabilidade: quando o estado não muda, pode ser acessado por várias threads sem a necessidade de locks (concorrência) Clojure Haskell Por que chamaram atenção? Abordagem moderna Funcionalidades como polimorfismo e meta- programação Distribuição e tolerância a falha Suporte nativo a software rodando em múltiplas máquinas e com alta disponibilidade
Funcional Imutabilidade: quando o estado não muda, pode ser acessado por várias threads sem a necessidade de locks (concorrência) Clojure Haskell Por que chamaram atenção? Abordagem moderna Funcionalidades como polimorfismo e meta- programação Distribuição e tolerância a falha Suporte nativo a software rodando em múltiplas máquinas e com alta disponibilidade
Funcional Imutabilidade: quando o estado não muda, pode ser acessado por várias threads sem a necessidade de locks (concorrência) Clojure Haskell Por que chamaram atenção? Abordagem moderna Funcionalidades como polimorfismo e meta- programação Distribuição e tolerância a falha Suporte nativo a software rodando em múltiplas máquinas e com alta disponibilidade
Funcional Imutabilidade: quando o estado não muda, pode ser acessado por várias threads sem a necessidade de locks (concorrência) Abordagem moderna Funcionalidades como polimorfismo e meta- programação Distribuição e tolerância a falha Suporte nativo a software rodando em múltiplas falhas e alta disponibilidade {
Funcional Imutabilidade: quando o estado não muda, pode ser acessado por várias threads sem a necessidade de locks (concorrência) Abordagem moderna Funcionalidades como polimorfismo e meta- programação Distribuição e tolerância a falha Suporte nativo a software rodando em múltiplas falhas e alta disponibilidade {
CONCORRÊNCIA DISTRIBUIÇÃO TOLERÂNCIA A FALHA A Erlang VM foi construída pensando em: Concorrência, distribuição e tolerância a falhas são nativas, baseados em primitivas da VM, ao invés de em bibliotecas externas { {
2011 “Elixir” em abril de 2011 Modelo de “objetos” Tinha um modelo de objetos baseado em protypes Lento Muito lento. Eval em todo lugar Quebrando compatibilidade com a VM Quebrou o hot code swapping do Erlang
Jan/12 Feb/12 M ar/12 Apr/12 M ay/12 Jun/12 Jul/12 Aug/12 Sep/12 O ct/12 N ov/12 Dec/12 Jan/13 Feb/13 M ar/13 Apr/13 M ay/13 Jun/13 Jul/13 Aug/13 Pageviews do elixir-lang.org (efeito Dave Thomas)
It didn’t take long, but pretty soon my gut feeling kicked in. This is good shit. - Joe Armstrong, creator of Erlang A week with Elixir “ ” https://joearms.github.io/published/2013-05-31-a-week-with-elixir.html
2013 Dave Thomas anuncia seu livro sobre Elixir Junho 2013 O’Reilly anuncia criação de livro sobre Elixir Criador do Erlang publica que ficou animado com Elixir 2013
GenStage e Flow 2016 Elixir sai na Gartner Nosso primeiro cliente de Elixir! 2016 Elixir sai no mapa de linguagens da Gartner 2016 IT Market Clock for Programming Languages, 2016
Por que o Elixir tem crescido? O que tem feito os desenvolvedores e empresas adotarem Elixir O futuro é concorrente Te permite pensar diferente Ferramental para diferentes domínios
Concurrency is the next major revolution in how we write software - Herb Sutter The Free lunch is over, 2005 “ ” O “futuro de 2005” é hoje A VM do Erlang foi projetada para concorrência O Elixir roda na VM do Erlang
Doing concurrency in Erlang or Elixir versus other languages is a bit like doing branches in Git vs Subversion. In subversion it was very complicated to do - and I never did it. In Git it is a lot easier and I do it all the time. - Elixir, The next big language for the web “ http://www.creativedeletion.com/2015/04/19/elixir_next_language.html
RESPONSIVO DISTRIBUÍDO RESILIENTE Usada de modo correto, concorrência te ajuda a fazer software: Concorrência vai além de paralelismo com multicore { {
Responsive Elastic Message Driven Resilient Elastic The system stays responsive under varying workload Message Driven Reactive Systems rely on asynchronous message-passing to establish a boundary between components that ensures loose coupling, isolation and location transparency Responsive The system responds in a timely manner if at all possible Resilient The system stays responsive in the face of failure Reactive manifesto https://www.reactivemanifesto.org/
Elastic Message Driven Resilient Responsive Responsive systems focus on providing rapid and consistent response times “ This is microseconds, a fraction of a milisecond, which is crazy fast.” http://www.akitaonrails.com/2015/10/27/how-fast-is-elixir-phoenix
Elastic Message Driven Resilient Responsive Responsive systems focus on providing rapid and consistent response times O preemptive multitasking e o garbage collection por processo do Elixir/OTP permitem a entrega de um response time previsível
Elastic Message Driven Resilient Responsive The system stays responsive in the face of failure. (…). Failures are contained within each component, (…) Recovery of each component is delegated to another (external) component (…) Web Stats Supervisor • Em Elixir, todo código roda dentro de processos • Processos são isolados um dos outros • Processos rodam de modo concorrente • Supervisor é um processo que supervisiona outros processos
Elastic Message Driven Resilient Responsive The system stays responsive under varying workload. • Phoenix out of the box • 2 milhões de conexões websocket simultâneas • 0 timeouts • 1 segundo para fazer brodcast http://phoenixframework.org/blog/the-road-to-2-million-websocket-connections
Elastic Message Driven Resilient Responsive Reactive Systems rely on asynchronous message- passing to establish a boundary between components that ensures loose coupling, isolation and location transparency No Elixir, message-passing é o modelo padrão de comunicação entre processos. É o “actor model”.
Elastic Message Driven Resilient Responsive Reactive Systems rely on asynchronous message- passing to establish a boundary between components that ensures loose coupling, isolation and location transparency “When sending a message, it doesn’t matter if the recipient process is on the same node or on another node, the VM will be able to deliver the message in both cases” https://elixir-lang.org/getting-started/mix-otp/distributed-tasks-and-configuration.html
Tudo que você faz na sua máquina deveria usar todos os cores. Bootar sua aplicação, compilar código, resolver dependências, rodar os testes etc. Até o seu relógio tem 2 cores. Concorrência não é mais a exceção. “ http://blog.plataformatec.com.br/2017/07/the-fallacies-of-web-application-performance/
Por que o Elixir tem crescido? O que tem feito os desenvolvedores e empresas adotarem Elixir O futuro é concorrente Te permite pensar diferente Ferramental para diferentes domínios
Por que o Elixir tem crescido? O que tem feito os desenvolvedores e empresas adotarem Elixir O futuro é concorrente Te permite pensar diferente Ferramental para diferentes domínios
O Elixir tem ferramental para diferentes domínios técnicos Web apps/Services, backend for mobile and IoT devices Embedded software Data ingestion and data processing (“medium data”) GenStage Flow
The free lunch is over O futuro é concorrente Quero estar pronto para construir o software do futuro Eu não sei, mas sei que: { { Quais serão os requisitos do software de amanhã?
Pontos-chave Como uma empresa decide criar uma nova linguagem? Como sair do nada para uma comunidade mundial? Você não precisa ser grande para causar um grande impacto
O FUTURO É CONCORRENTE “The free lunch is over”. Para se beneficiar da evolução das CPUs, você precisa escrever software concorrente. CONCORRÊNCIA DEVERIA SER USUAL Criar uma ferramenta que permita que fazer concorrência seja simples. Que nem o Git fez para branches comparado com SVN. Como uma empresa decide criar uma nova linguagem ALAVANCAR UMA VM FEITA PARA CONCORRÊNCIA A VM do Erlang foi projetada para concorrência e é uma tecnologia madura. Mais pessoas deveriam usá- la. “Connecting the dots”
VISÃO Construir uma ferramenta que esteja alinhada com uma tendência mundial: “the free lunch is over” EXECUÇÃO E PERSISTÊNCIA Demorou 5 anos até termos algum retorno financeiro Como sair do nada para uma comunidade mundial? COMUNIDADE OPEN SOURCE Não seria possível para Plataformatec sozinha desenvolver o ecossistema inteiro