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
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
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
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 {
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 {
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
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
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
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
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/
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
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
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
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
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”.
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
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/
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”
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