Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Elixir: Uma introdução para alquimistas de software

Elixir: Uma introdução para alquimistas de software

João Lanjoni

November 08, 2023
Tweet

More Decks by João Lanjoni

Other Decks in Programming

Transcript

  1. Prazer, Guto Técnico em Informática e Futuro Bacharel em Sistemas

    de Informação pelo IFSP, Engenheiro de Software na Nimble, Entusiasta de Open-Source, Amante de UNIX, Membro da He4rt Developers, Embaixador brasileiro da linguagem de programação Crystal e Entusiasta de Elixir e Erlang @lanjoni @gutolanjoni @gutolanjoni Para mais infos acesse: https://lanjoni.dev vulgo João Augusto Lissoni Lanjoni /lanjoni
  2. O que é Elixir? Elixir é uma linguagem dinâmica e

    funcional para construir aplicativos escaláveis e de fácil manutenção.
  3. O que é Elixir? Ok, mas, o que tudo isso

    significa e como isso tudo é possível? Como uma linguagem de programação consegue fazer tudo isso? É verdade mesmo?
  4. O que é Elixir? Ok, mas, o que tudo isso

    significa e como isso tudo é possível? Como uma linguagem de programação consegue fazer tudo isso? É verdade mesmo?
  5. O que é BEAM? Bogdan’s Erlang Abstract Machine É a

    máquina virtual responsável por executar o código no Erlang Runtime System.
  6. O que é BEAM? Certo, mas, o que ela tem

    de tão especial assim? Simples: o gerenciamento de processos
  7. O que é BEAM? “A BEAM inicia com um único

    processo. Para cada CPU disponível, ele cria uma thread. Isso torna os sistemas Erlang escaláveis porque podem aproveitar todos os núcleos disponíveis.” - Kamil Lelonek
  8. O que é BEAM? Tratar concorrência é mais fácil Isso

    mesmo. A criação de aplicações concorrentes é mais prática. Você não precisa manipular threads. Crie processos e deixe que o sistema operacional hospedeiro possa gerenciar.
  9. O que é BEAM? Tratar concorrência é mais fácil Isso

    mesmo. A criação de aplicações concorrentes é mais prática. Você não precisa manipular threads. Crie processos e deixe que o sistema operacional hospedeiro possa gerenciar.
  10. Tolerância a falhas! Joe Armstrong escreveu em sua tese “Making

    reliable distributed systems in the presence of software errors”:
  11. Tolerância a falhas! 1. Organizamos as tarefas As tarefas são

    organizadas em uma hierarquia de prioridade e complexidade, na qual organizamos da mais complexa para a mais simples, montando uma pilha de ordenação de processos. Tarefas mais acima são mais complexas.
  12. Tolerância a falhas! 2. Tentamos executar Executamos as tarefas em

    ordem de prioridade (começando pelo topo).
  13. Tolerância a falhas! 3. Em casos de erro Tentamos corrigir

    erros caso ocorram na execução de uma tarefa. Se não for possível corrigir, essa tarefa vai para o final da pilha e continuamos com os demais processos.
  14. Tolerância a falhas! Isso impede que nossa aplicação pare em

    casos de erros específicos, deixando-a mais segura para alta disponibilidade.
  15. Tolerância a falhas! Joe Armstrong é considerado pai do Erlang

    e trabalhou na Ericsson, uma empresa de telefonia, líder mundial no setor de telecomunicação. De lá surgiu o projeto que anos depois se tornou open-source.
  16. Tolerância a falhas! Quer ler a tese do Joe Armstrong?

    https://erlang.org/download/armstrong_thesis_2003.pdf
  17. Ok, mas e Elixir? Elixir foi criado com intuito de

    utilizar a BEAM, mas, promover algumas funcionalidades... Além de tratar melhor da sintaxe!
  18. Ok, mas e Elixir? Surgiu em 2012 e foi criada

    pelo brasileiro José Valim!
  19. Ok, mas e Elixir? Surgiu em 2012 e foi criada

    pelo brasileiro José Valim! Tá vivo glória 🙏
  20. Ok, mas e Elixir? Valim trabalhava no core de desenvolvimento

    (um mantenedor) do framework Rails (isso mesmo, para Ruby)
  21. Ok, mas e Elixir? Elixir surgiu com intuito de trazer:

    - Concorrência - Baixa latência - Sintaxe elegante - Interoperabilidade nativa com a BEAM (bytecodes gerados são executados, assim como Clojure na JVM por exemplo) E o mais legal… - Sistemas distribuídos
  22. Elixir é Funcional? Sim, podemos dizer que ela muitas das

    vezes é uma “porta de entrada” para o mundo de linguagens de programação funcional!
  23. Elixir é Funcional? Elixir traz conceitos funcionais de forma elegante.

    Com a programação fica mais fácil trabalhar com concorrência por um motivo simples: imutabilidade.
  24. Elixir é Funcional? Os dados em Elixir são imutáveis. Isso

    mesmo, eles nunca mudam. Pra entender, vamos para um exemplo simples...
  25. Elixir é Funcional? Se temos uma lista simples e queremos

    adicionar um valor... Imagine que temos uma lista com 3 elementos e queremos adicionar mais um. Olha só o que acontece...
  26. Elixir é Funcional? A concatenação de itens em uma lista

    com Elixir funciona de uma forma bem simples: É gerado uma lista nova com a modificação sem manipular a original, impedindo falhas e possíveis problemas!
  27. O pipe de Elixir! Sim, temos pipe em Elixir e

    só digo que: eh |> muito |> massa
  28. O pipe de Elixir! Para quem não conhece, o pipe

    (“|”) é muito utilizado em terminais Unix no geral, no qual podemos executar um comando e enviar o resultado dele para outro comando! Um exemplo de utilização simples é com o comando “grep” por exemplo!
  29. O pipe de Elixir! Em Elixir não é diferente! O

    pipe (dessa vez com “|>”) envia o resultado de uma função como primeiro argumento para a próxima função! Veja só alguns exemplos...
  30. Qual foi o intuito disso tudo? Bem, quais eram as

    expectativas dessa apresentação?
  31. Qual foi o intuito disso tudo? - Apresentar o Elixir

    - Apresentar o Erlang - Apresentar a BEAM - Demonstrar casos de uso - Demonstrar a utilidade deles - Despertar a curiosidade de vocês - Tirar pelo menos uma risada
  32. Você trabalha com Elixir? Sim! Atualmente o maior projeto com

    Elixir já finalizado que trabalhei foi para o controle de APIs em sensores!
  33. Onde posso encontrar mais conteúdo? Links: - https://elixirschool.com/en - https://elixir-lang.org/

    - https://elixirforum.com/ - http://elixiremfoco.com/ - https://hexdocs.pm/ - https://github.com/he4rt/4noobs