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

Elixir: Uma introdução para alquimistas de soft...

Elixir: Uma introdução para alquimistas de software

Avatar for João Lanjoni

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