DEV Community

Matheus de Camargo Marques
Matheus de Camargo Marques

Posted on

Elixir Enchiridium — Tomo IV: A Sintaxe parte 3

AVISO: esta série é uma fantasia satírica baseada em fatos reais sobre Elixir. Nada aqui deve ser levado ao pé da letra. Ao final de cada capítulo, os fatos por trás da lenda são revelados. Tags: #satire #humor #elixir #enchiridium


Elixir Enchiridium — Tomo IV: A Sintaxe

Capítulos 41 a 100


Capítulo 41 — Binários: A Fábrica de Bits que Constrói o Mundo

A lenda diz que os binários são fábricas de bits. Cada binário é uma sequência de bytes. Cada byte é uma sequência de bits. Você pode construir, destruir, dividir e combinar. A fábrica nunca para.

A verdade é que binários em Elixir são sequências de bytes, representados com <<>>. A sintaxe <<>> permite construir e fazer pattern matching em binários, com especificações de tamanho, tipo (integer, float, binary, utf8, etc.) e unidade. Binários são usados para protocolos de rede, processamento de imagens, criptografia e muito mais.

A lenda diz que, na primeira vez que um programador usou <<>>, ele perguntou: "Isso é uma string?" O instrutor respondeu: "Não. É um binário. String é um binário UTF-8."

O fato por trás da lenda: Binários em Elixir são sequências de bytes, representados com <<>>. A sintaxe permite pattern matching com especificações de tamanho, tipo e unidade.

Gancho: Os binários representam. Mas há uma coisa que representa texto: as strings.


Capítulo 42 — Strings: A Sequência de Bytes que Fala UTF-8

A lenda diz que as strings são sequências de bytes. Mas não são bytes quaisquer. São bytes UTF-8. Elas falam a língua dos humanos.

A verdade é que strings em Elixir são binários codificados em UTF-8. O módulo String fornece funções para manipulação: String.length/1, String.upcase/1, String.split/2, String.replace/3, e muitas outras.

A lenda diz que, na primeira vez que um programador usou String.length/1, ele perguntou: "Por que não é .length?" O instrutor respondeu: "Porque string é um binário. E binários não têm métodos."

O fato por trás da lenda: Strings em Elixir são binários codificados em UTF-8. O módulo String fornece funções para manipulação. Strings são representadas com aspas duplas, charlists com aspas simples.

Gancho: As strings falam. Mas há uma coisa que fala em bytes: as charlists.


Capítulo 43 — Charlists: A Lista que Fala em Bytes

A lenda diz que as charlists são listas de inteiros. Cada inteiro é um code point. Elas falam a língua dos antigos. Elas são representadas com aspas simples. Elas são teimosas. Elas são poderosas.

A verdade é que charlists em Elixir são listas de inteiros, representadas com aspas simples ('). Elas são o que Erlang chama de strings. O módulo List e Enum podem ser usados para manipulá-las. Charlists são frequentemente usadas para interoperar com bibliotecas Erlang que esperam strings.

A lenda diz que, na primeira vez que um programador usou uma charlist, ele perguntou: "Isso é uma string?" O instrutor respondeu: "Não. É uma lista de inteiros. Mas Erlang chama de string."

O fato por trás da lenda: Charlists em Elixir são listas de inteiros, representadas com aspas simples. Elas são o que Erlang chama de strings. São usadas para interoperar com bibliotecas Erlang.

Gancho: As charlists falam. Mas há uma coisa que fala em pedaços: as IO lists.


Capítulo 44 — IO Lists: A Lista que Constrói Strings Sem Copiar

A lenda diz que as IO lists são listas que constroem strings. Mas não copiam. Elas apenas apontam. Elas são eficientes. Elas são rápidas. Elas são usadas para construir grandes strings sem custo.

A verdade é que IO lists são listas de binários, inteiros e outras IO lists. Elas são usadas para construir strings de forma eficiente, sem cópia. O módulo IO e File aceitam IO lists. Bibliotecas como Phoenix e Ecto usam IO lists para construir HTML e SQL de forma eficiente.

A lenda diz que, na primeira vez que um programador usou uma IO list, ele perguntou: "Isso é uma string?" O instrutor respondeu: "Não. É uma lista que vira string quando precisa."

O fato por trás da lenda: IO lists são listas de binários, inteiros e outras IO lists. Elas são usadas para construir strings de forma eficiente, sem cópia.

Gancho: As IO lists constroem. Mas há uma coisa que interpola: a interpolação de strings.


Capítulo 45 — Interpolação: A Magia que Junta Strings e Código

A lenda diz que a interpolação é magia. Você escreve "Olá, #{nome}!" e a string se junta com o valor. O código é executado. A string é montada. A magia acontece.

A verdade é que a interpolação de strings em Elixir permite embutir expressões em strings usando #{}. A expressão é avaliada e convertida para string usando o protocolo String.Chars. Interpolação é uma forma concisa de construir strings.

A lenda diz que, na primeira vez que um programador usou #{}, ele perguntou: "Posso colocar qualquer coisa aqui?" O instrutor respondeu: "Pode. Desde que implemente String.Chars."

O fato por trás da lenda: A interpolação de strings em Elixir usa #{} para embutir expressões. A expressão é avaliada e convertida para string usando String.Chars.

Gancho: A interpolação junta. Mas há uma coisa que junta com <>: a concatenação.


Capítulo 46 — Concatenação: O Operador que Junta Binários

A lenda diz que a concatenação é um operador. Ele junta dois binários. Ele não junta listas. Ele não junta números. Ele só junta binários. O operador é <>.

A verdade é que o operador <> concatena dois binários. Ele é usado para juntar strings. Não funciona com listas (que usam ++). É uma operação O(n) no tamanho do primeiro binário.

A lenda diz que, na primeira vez que um programador usou <>, ele perguntou: "Por que não posso juntar uma string com um número?" O instrutor respondeu: "Porque o número não é binário. Use to_string/1."

O fato por trás da lenda: O operador <> concatena dois binários. Listas usam ++. A operação é O(n) no tamanho do primeiro binário.

Gancho: A concatenação junta. Mas há uma coisa que junta listas: o ++.


Capítulo 47 — ++ e --: Os Operadores que Junta e Separam Listas

A lenda diz que o ++ junta listas. O -- separa listas. Eles são operadores de lista. Eles são O(n). Eles são usados com moderação.

A verdade é que ++ concatena listas e -- remove elementos da primeira lista que estão na segunda. Ambas as operações são O(n) no tamanho da lista da esquerda. Listas em Elixir são listas ligadas, então adicionar no início é O(1), mas concatenar é O(n).

A lenda diz que, na primeira vez que um programador usou ++, ele perguntou: "Por que é lento?" O instrutor respondeu: "Porque a lista é uma corrente. Juntar correntes é caro."

O fato por trás da lenda: ++ concatena listas e -- remove elementos. Ambas são O(n) no tamanho da lista da esquerda.

Gancho: Os operadores juntam. Mas há uma coisa que compara: os operadores de comparação.


Capítulo 48 — Comparação: Os Operadores que Nunca Mentem

A lenda diz que os operadores de comparação são justos. == compara valor. === compara valor e tipo. != e !== são os opostos. Eles nunca mentem. Eles nunca se confundem.

A verdade é que Elixir tem == (igualdade de valor), === (igualdade de valor e tipo), != (desigualdade de valor), !== (desigualdade de valor e tipo). A ordem de comparação entre tipos é: número < átomo < referência < função < porta < pid < tupla < mapa < lista < bitstring.

A lenda diz que, na primeira vez que um programador comparou 1 == 1.0, ele perguntou: "Por que é verdadeiro?" O instrutor respondeu: "Porque == compara valor. 1 e 1.0 têm o mesmo valor." O programador perguntou: "E ===?" O instrutor respondeu: "=== compara tipo. 1 === 1.0 é falso."

O fato por trás da lenda: Elixir tem ==, ===, !=, !==. A ordem de comparação entre tipos é: número < átomo < referência < função < porta < pid < tupla < mapa < lista < bitstring.

Gancho: A comparação julga. Mas há uma coisa que calcula: os operadores aritméticos.


Capítulo 49 — Aritmética: Os Operadores que Calculam

A lenda diz que os operadores aritméticos são +, -, *, /, div, rem. Eles calculam. Eles nunca erram. Exceto /, que sempre retorna float.

A verdade é que Elixir tem +, -, *, / (divisão float), div (divisão inteira), rem (resto). / sempre retorna float. div e rem retornam inteiros.

A lenda diz que, na primeira vez que um programador usou /, ele perguntou: "Por que 4 / 2 é 2.0?" O instrutor respondeu: "Porque / é divisão float. Use div para inteiros."

O fato por trás da lenda: Elixir tem +, -, *, / (float), div (inteiro), rem (resto). / sempre retorna float.

Gancho: A aritmética calcula. Mas há uma coisa que compara booleanos: os operadores booleanos.


Capítulo 50 — Booleanos: and, or, not vs &&, ||, !

A lenda diz que há dois tipos de operadores booleanos. Os estritos (and, or, not) e os não-estritos (&&, ||, !). Os estritos exigem booleanos. Os não-estritos aceitam qualquer valor.

A verdade é que and, or, not exigem booleanos e são operadores estritos. &&, ||, ! aceitam qualquer valor e retornam o valor à esquerda ou à direita. && retorna o segundo valor se o primeiro for truthy; || retorna o primeiro valor se for truthy.

A lenda diz que, na primeira vez que um programador usou &&, ele perguntou: "Por que 1 && 2 é 2?" O instrutor respondeu: "Porque && retorna o segundo valor se o primeiro for truthy."

O fato por trás da lenda: and, or, not são estritos e exigem booleanos. &&, ||, ! aceitam qualquer valor.

Gancho: Os booleanos decidem. Mas há uma coisa que cria sequências: os ranges.


Capítulo 51 — Ranges: A Sequência que Nunca Acaba (Até Acabar)

A lenda diz que os ranges são sequências. 1..10 é uma sequência de 1 a 10. ?a..?z é uma sequência de letras. Eles são eficientes. Eles são preguiçosos. Eles nunca ocupam memória até serem usados.

A verdade é que ranges em Elixir são representados com ... Eles são eficientes porque não armazenam todos os elementos, apenas o início e o fim. Ranges são usados com Enum e Stream para gerar sequências.

A lenda diz que, na primeira vez que um programador usou um range, ele perguntou: "Isso é um array?" O instrutor respondeu: "Não. É um range. Um range é uma sequência preguiçosa."

O fato por trás da lenda: Ranges em Elixir são representados com ... Eles são eficientes porque não armazenam todos os elementos, apenas o início e o fim.

Gancho: Os ranges criam. Mas há uma coisa que acessa mapas: o acesso com . e [].


Capítulo 52 — Acesso a Mapas: O Ponto e os Colchetes

A lenda diz que os mapas têm duas formas de acesso. O ponto (.) para chaves que são átomos. Os colchetes ([]) para qualquer chave. O ponto é rápido. Os colchetes são flexíveis. Eles nunca se confundem.

A verdade é que mapa.chave acessa uma chave que é um átomo. mapa[:chave] acessa qualquer chave. mapa.chave levanta uma exceção se a chave não existir. mapa[:chave] retorna nil. O módulo Map e Kernel.get_in/2 fornecem outras formas de acesso.

A lenda diz que, na primeira vez que um programador usou mapa.chave, ele perguntou: "Por que não posso usar uma string?" O instrutor respondeu: "Porque o ponto é para átomos. Use colchetes para strings."

O fato por trás da lenda: mapa.chave acessa chaves que são átomos e levanta exceção se não existir. mapa[:chave] acessa qualquer chave e retorna nil se não existir.

Gancho: O acesso busca. Mas há uma coisa que busca em profundidade: o get_in/2.


Capítulo 53 — get_in/2 e put_in/2: Os Feitiços que Acessam o Fundo

A lenda diz que get_in/2 e put_in/2 são feitiços. Eles acessam estruturas aninhadas. Eles não se perdem. Eles não se confundem. Eles chegam ao fundo.

A verdade é que get_in/2 acessa um valor em uma estrutura aninhada usando uma lista de chaves. put_in/2 atualiza um valor em uma estrutura aninhada. update_in/2 atualiza com uma função. Eles são definidos no módulo Kernel e usam o protocolo Access.

A lenda diz que, na primeira vez que um programador usou get_in/2, ele perguntou: "Posso acessar qualquer coisa?" O instrutor respondeu: "Pode. Desde que a estrutura implemente Access."

O fato por trás da lenda: get_in/2, put_in/2 e update_in/2 acessam e atualizam estruturas aninhadas usando uma lista de chaves.

Gancho: Os feitiços acessam. Mas há uma coisa que estrutura dados: os structs.


Capítulo 54 — Structs (Parte 3): As Fichas que Guardam Dados

A lenda diz que os structs são fichas. Cada ficha tem um formato. Cada ficha guarda dados. Elas são imutáveis. Elas são previsíveis.

A verdade é que structs são mapas com um campo especial __struct__ que define o tipo. Eles são definidos com defstruct dentro de um módulo. O @enforce_keys força certas chaves a serem fornecidas na criação.

A lenda diz que, na primeira vez que um programador criou um struct, ele perguntou: "Isso é uma classe?" O instrutor respondeu: "Não. É um struct. Struct não tem métodos."

O fato por trás da lenda: Structs são mapas com um campo __struct__ que define o tipo. @enforce_keys força certas chaves a serem fornecidas.

Gancho: Structs guardam. Mas há uma coisa que traduz: os protocols.


Capítulo 55 — Protocols (Parte 3): Os Tradutores que Nunca se Confundem

A lenda diz que os protocols são tradutores. Eles olham para a ficha e decidem como traduzi-la. Se a ficha é um User, o protocolo a traduz de um jeito. Se é um Post, traduz de outro.

A verdade é que protocols são mecanismos de polimorfismo que permitem despachar com base no tipo do primeiro argumento. O @derive permite derivar implementações de protocolos para structs. O @fallback_to_any permite um fallback para Any.

A lenda diz que, na primeira vez que um programador usou um protocolo, ele perguntou: "Isso é uma interface?" O instrutor respondeu: "Não. É um protocolo. Protocolo é mais flexível."

O fato por trás da lenda: Protocols permitem polimorfismo por despacho no tipo do primeiro argumento. @derive deriva implementações para structs. @fallback_to_any permite fallback para Any.

Gancho: Protocols traduzem. Mas há uma coisa que define contratos: os behaviours.


Capítulo 56 — Behaviours (Parte 2): Os Contratos que Você Assina

A lenda diz que os behaviours são contratos. Você assina um contrato com o behaviour, e ele promete verificar se você implementou tudo. Se você não implementou, o compilador reclama. Se implementou errado, o runtime chora.

A verdade é que behaviours definem um conjunto de callbacks que um módulo deve implementar. O @callback define um callback. O @impl marca uma implementação. O @optional_callbacks marca callbacks opcionais.

A lenda diz que, na primeira vez que um programador usou um behaviour, ele perguntou: "Posso não implementar?" O instrutor respondeu: "Pode. Mas o compilador vai reclamar."

O fato por trás da lenda: Behaviours definem callbacks que um módulo deve implementar. @callback define um callback. @impl marca uma implementação. @optional_callbacks marca callbacks opcionais.

Gancho: Os behaviours definem. Mas há uma coisa que documenta: os module attributes.


Capítulo 57 — Module Attributes (Parte 2): Os Selos que Contam Histórias

A lenda diz que os module attributes são selos. @moduledoc conta a história do módulo. @doc conta a história da função. @spec conta a história dos tipos. @behaviour conta a história do contrato.

A verdade é que module attributes em Elixir servem para documentação (@moduledoc, @doc), tipospecs (@spec, @type), e armazenamento de dados em tempo de compilação. @after_compile, @before_compile e @after_verify são hooks invocados pelo compilador.

A lenda diz que, na primeira vez que um programador usou @moduledoc, ele perguntou: "Isso é um comentário?" O instrutor respondeu: "Não. É um selo. O ExDoc vai ler."

O fato por trás da lenda: Module attributes servem para documentação, tipospecs e armazenamento de dados em tempo de compilação. @after_compile, @before_compile e @after_verify são hooks.

Gancho: Os selos contam. Mas há uma coisa que importa: o alias.


Capítulo 58 — alias, import, require, use: Os Quatro Feitiços de Módulo

A lenda diz que há quatro feitiços de módulo. alias dá um apelido. import traz funções. require traz macros. use faz tudo de uma vez. Eles nunca se confundem. Eles nunca se atrapalham.

A verdade é que alias cria um apelido para um módulo. import importa funções e macros de um módulo. require torna as macros de um módulo disponíveis. use chama o __using__/1 do módulo, que pode fazer qualquer coisa.

A lenda diz que, na primeira vez que um programador usou use, ele perguntou: "O que isso faz?" O instrutor respondeu: "Depende do módulo. use é uma faca de dois gumes."

O fato por trás da lenda: alias cria apelidos. import importa funções e macros. require torna macros disponíveis. use chama __using__/1.

Gancho: Os feitiços organizam. Mas há uma coisa que testa: o ExUnit.


Capítulo 59 — ExUnit (Parte 2): O Tribunal que Julga Seu Código

A lenda diz que o ExUnit é um tribunal. Cada teste é um julgamento. Cada assert é uma sentença. Se o código passa, ele é absolvido. Se falha, é condenado.

A verdade é que ExUnit é o framework de testes unitários do Elixir. Ele fornece assert, refute, assert_raise, assert_receive e outras macros. Testes são organizados em módulos que usam ExUnit.Case. mix test executa todos os testes.

A lenda diz que, na primeira vez que um programador rodou mix test, ele perguntou: "Quantos testes eu preciso?" O instrutor respondeu: "Todos."

O fato por trás da lenda: ExUnit é o framework de testes unitários do Elixir. Fornece assert, refute, assert_raise, assert_receive. Testes usam ExUnit.Case.

Gancho: O tribunal julga. Mas há uma coisa que documenta: o ExDoc.


Capítulo 60 — ExDoc (Parte 3): O Papagaio que Gera Documentação

A lenda diz que ExDoc é um papagaio chamado Doc. Ele lê seus @doc e repete em voz alta. Se você não escrever nada, ele fica quieto e gera uma página em branco.

A verdade é que ExDoc é a ferramenta oficial de geração de documentação do Elixir. Ela lê os atributos @doc e @moduledoc e gera documentação HTML navegável.

A lenda diz que, na primeira vez que um programador rodou mix docs, ele perguntou: "Onde está a documentação?" O instrutor respondeu: "Na pasta doc."

O fato por trás da lenda: ExDoc é a ferramenta oficial de geração de documentação do Elixir. Lê @doc e @moduledoc e gera HTML.

Gancho: O papagaio documenta. Mas há uma coisa que analisa: o Dialyzer.


Capítulo 61 — Dialyzer (Parte 3): O Detector de Mentiras que Chora com any()

A lenda diz que o Dialyzer é um detector de mentiras. Quando encontra um any(), ele chora copiosamente e se recusa a continuar.

A verdade é que Dialyzer é uma ferramenta de análise estática para bytecode da BEAM. Ele fornece avisos sobre tipos incompatíveis, código inalcançável e outros problemas. O Dialyxir facilita o uso do Dialyzer em projetos Elixir.

A lenda diz que, na primeira vez que um programador rodou o Dialyzer, ele perguntou: "Por que está chorando?" O instrutor respondeu: "Porque você tem any() no código."

O fato por trás da lenda: Dialyzer é uma ferramenta de análise estática para bytecode da BEAM. Fornece avisos sobre tipos incompatíveis e código inalcançável.

Gancho: O detector analisa. Mas há uma coisa que formata: o mix format.


Capítulo 62 — Mix Format (Parte 2): O Cabeleireiro que Usa Pomada de Unicórnio

A lenda diz que o mix format arruma seu código com pomada de unicórnio. Se você não rodar, seu código fica com o cabelo bagunçado e o compilador zomba.

A verdade é que mix format é a ferramenta oficial de formatação de código do Elixir. Ela usa um formatador opinativo que garante consistência de estilo. O .formatter.exs define quais arquivos formatar.

A lenda diz que, na primeira vez que um programador rodou mix format, ele perguntou: "Posso escolher o estilo?" O instrutor respondeu: "Não. O estilo é opinativo."

O fato por trás da lenda: mix format é a ferramenta oficial de formatação. Usa um formatador opinativo. .formatter.exs define quais arquivos formatar.

Gancho: O cabeleireiro formata. Mas há uma coisa que compila: o mix compile.


Capítulo 63 — Mix Compile (Parte 3): O DJ que Compila Projetos

A lenda diz que o mix compile não compila. Ele toca uma música. No final, seu código está compilado.

A verdade é que mix compile é a tarefa do Mix que compila o código-fonte do projeto. Ela verifica dependências, compila os arquivos .ex e .exs e gera os arquivos .beam.

A lenda diz que, na primeira vez que um programador rodou mix compile, ele perguntou: "Onde está o binário?" O instrutor respondeu: "Na pasta _build."

O fato por trás da lenda: mix compile compila o código-fonte do projeto, gerando arquivos .beam na pasta _build.

Gancho: O DJ compila. Mas há uma coisa que baixa pacotes: o Hex.


Capítulo 64 — Hex (Parte 3): O Feitiço que Invoca Pacotes

A lenda diz que Hex é um feitiço. Quando você roda mix hex.info, um sapo aparece no terminal e pergunta se você aceita os termos de uso.

A verdade é que Hex é o gerenciador de pacotes oficial do ecossistema BEAM. Ele foi lançado em 2014 e serve tanto Elixir (via Mix) quanto Erlang (via Rebar3).

A lenda diz que, na primeira vez que um programador usou Hex, ele perguntou: "Posso publicar qualquer coisa?" O instrutor respondeu: "Pode. Mas cuidado com o que publica."

O fato por trás da lenda: Hex é o gerenciador de pacotes oficial do ecossistema BEAM, lançado em 2014. Serve Elixir e Erlang.

Gancho: O feitiço invoca. Mas há uma coisa que observa: o Telemetry.


Capítulo 65 — Telemetry (Parte 2): O Olho que Tudo Vê

A lenda diz que o Telemetry é um olho. Ele mede tudo: requisições, queries, erros. E o LiveDashboard mostra tudo em tempo real.

A verdade é que Telemetry é uma biblioteca de instrumentação para Elixir e Erlang. O Phoenix integra a Telemetry para medir métricas de Phoenix, Ecto e VM. O LiveDashboard fornece visualização em tempo real.

A lenda diz que, na primeira vez que um programador usou Telemetry, ele perguntou: "O que posso medir?" O instrutor respondeu: "Tudo."

O fato por trás da lenda: Telemetry é uma biblioteca de instrumentação para Elixir e Erlang. O Phoenix integra a Telemetry para medir métricas.

Gancho: O olho observa. Mas há uma coisa que conecta nós: o Libcluster.


Capítulo 66 — Libcluster (Parte 4): O Feitiço que Junta os Nós

A lenda diz que, para formar um cluster Elixir, você precisa de magia. Você roda libcluster e, de repente, todos os nós se encontram.

A verdade é que Libcluster fornece um mecanismo para formar automaticamente clusters de nós Erlang, com adesão estática ou dinâmica. Suporta várias estratégias: EPMD, Kubernetes, Gossip, DNS, Rancher.

A lenda diz que, na primeira vez que um programador usou Libcluster, ele perguntou: "Como isso funciona?" O instrutor respondeu: "Magia com estratégia."

O fato por trás da lenda: Libcluster forma clusters de nós Erlang automaticamente, com adesão estática ou dinâmica.

Gancho: O feitiço junta. Mas há uma coisa que explica os limites: o Teorema CAP.


Capítulo 67 — CAP (Parte 3): O Teorema que a BEAM Ignora (ou Não)

A lenda diz que, quando os aliens criaram a BEAM, eles leram o Teorema CAP e disseram: "Vamos escolher AP."

A verdade é que a maioria das bibliotecas distribuídas do Elixir fica do lado AP do Teorema CAP. O Paxtor é uma biblioteca CP que usa Paxos.

A lenda diz que, na primeira vez que um programador ouviu falar do CAP, ele perguntou: "Qual lado é melhor?" O instrutor respondeu: "Depende do que você não pode perder."

O fato por trás da lenda: A maioria das bibliotecas distribuídas do Elixir fica do lado AP. O Paxtor é CP.

Gancho: O teorema explica. Mas há uma coisa que a BEAM faz melhor: tolerância a falhas.


Capítulo 68 — Tolerância a Falhas (Parte 4): A Filosofia que Virou Benchmark

A lenda diz que, num benchmark acadêmico, o Elixir atingiu o maior throughput e a menor variabilidade sob condições de falha.

A verdade é que a tolerância a falhas da BEAM é um dos seus pontos mais fortes. Processos isolados, supervisores, árvores de supervisão, "let it crash".

A lenda diz que, na primeira vez que um programador viu um sistema se recuperar sozinho, ele perguntou: "Como?" O instrutor respondeu: "Supervisores."

O fato por trás da lenda: A tolerância a falhas da BEAM é um dos seus pontos mais fortes.

Gancho: A tolerância é a base. Mas há uma coisa que mantém os processos vivos: os supervisores.


Capítulo 69 — Supervisor (Parte 4): As Babás que Nunca Dormem

A lenda diz que os supervisores são babás. Se um processo morre, a babá chora, pega um novo processo no berçário e coloca no lugar.

A verdade é que supervisores monitoram processos filhos e os reiniciam quando falham. Formam árvores de supervisão que fornecem tolerância a falhas e auto-recuperação.

A lenda diz que, na primeira vez que um programador viu uma árvore de supervisão, ele perguntou: "Quantos níveis?" O instrutor respondeu: "Quantos você precisar."

O fato por trás da lenda: Supervisores monitoram processos filhos e os reiniciam quando falham. Formam árvores de supervisão.

Gancho: As babás cuidam. Mas há um processo que serve: o GenServer.


Capítulo 70 — GenServer (Parte 4): O Mordomo que Serve Estado em Bandejas

A lenda diz que um GenServer é um mordomo. Quando você chama GenServer.call, ele responde "Pois não, senhor" e executa a função.

A verdade é que GenServer é um comportamento do OTP para construir servidores genéricos. Encapsula estado e concorrência, com callbacks para chamadas síncronas e assíncronas.

A lenda diz que, na primeira vez que um programador criou um GenServer, ele perguntou: "Preciso implementar tudo?" O instrutor respondeu: "Só os callbacks."

O fato por trás da lenda: GenServer é um comportamento do OTP para construir servidores genéricos. Encapsula estado e concorrência.

Gancho: O mordomo serve. Mas há uma coisa que persiste: o Ecto.


Capítulo 71 — Ecto (Parte 4): O Fantasma que Assombra Bancos de Dados

A lenda diz que Ecto é um fantasma. Cada Repo.insert é um exorcismo.

A verdade é que Ecto é uma biblioteca de persistência para Elixir. Fornece uma camada de mapeamento entre o código Elixir e o banco de dados, com suporte a migrações, queries e transações.

A lenda diz que, na primeira vez que um programador usou Ecto, ele perguntou: "Isso é um ORM?" O instrutor respondeu: "Não. É uma biblioteca de persistência. É diferente."

O fato por trás da lenda: Ecto é uma biblioteca de persistência para Elixir. Fornece mapeamento, migrações, queries e transações.

Gancho: O fantasma persiste. Mas há uma coisa que conecta tudo: o Phoenix.


Capítulo 72 — Phoenix (Parte 4): A Fênix que Nasceu das Cinzas

A lenda diz que Phoenix é um framework web que invoca uma fênix de verdade.

A verdade é que Phoenix é um framework web para Elixir, criado por Chris McCord. Lançado em 2015, tornou-se o framework web padrão para Elixir.

A lenda diz que, na primeira vez que um programador rodou mix phx.server, ele perguntou: "Onde está a fênix?" O instrutor respondeu: "No Arizona."

O fato por trás da lenda: Phoenix é um framework web para Elixir, criado por Chris McCord e lançado em 2015.

Gancho: A fênix constrói. Mas há uma coisa que conecta usuários: o LiveView.


Capítulo 73 — LiveView (Parte 4): A Janela para o Multiverso

A lenda diz que, na primeira vez que alguém rodou uma LiveView, uma janela para outra dimensão se abriu no navegador.

A verdade é que Phoenix LiveView permite construir experiências de usuário ricas e em tempo real com HTML renderizado no servidor, sem escrever JavaScript. A versão 1.0 foi lançada em dezembro de 2024.

A lenda diz que, na primeira vez que um programador viu uma LiveView, ele perguntou: "Onde está o JavaScript?" O instrutor respondeu: "Não tem."

O fato por trás da lenda: Phoenix LiveView permite construir aplicações interativas renderizadas no servidor sem JavaScript. Versão 1.0 em dezembro de 2024.

Gancho: A janela interage. Mas há uma coisa que observa: o Observer.


Capítulo 74 — Observer (Parte 4): A Janela para a Alma da BEAM

A lenda diz que, se você quer ver a alma da BEAM, abra o Observer.

A verdade é que o Observer é uma ferramenta gráfica para inspecionar sistemas Erlang/Elixir em execução. Mostra informações do sistema, árvores de supervisão, informações de processos, tabelas ETS e frontend para tracing.

A lenda diz que, na primeira vez que um programador abriu o Observer, ele perguntou: "O que é isso?" O instrutor respondeu: "A alma da BEAM."

O fato por trás da lenda: Observer é uma ferramenta gráfica para inspecionar sistemas Erlang/Elixir. Inclui etop e crashdump_viewer.

Gancho: O Observer mostra. Mas há uma coisa que nem o Observer consegue mostrar: o futuro.


Capítulo 75 — OTP 27 (Parte 4): Record Operations e o Futuro do JIT

A lenda diz que, em 2024, a Ericsson lançou o OTP 27. A grande novidade era a otimização de record operations.

A verdade é que o OTP 27 introduziu otimizações para record operations. A história das otimizações modernas começou em 2018 com SSA, passou pelo JIT no OTP 24, otimizações baseadas em tipos no OTP 25, e melhorias no OTP 26.

A lenda diz que, na primeira vez que um programador rodou um benchmark com OTP 27, ele perguntou: "Ficou mais rápido?" O instrutor respondeu: "Sim. E os records também."

O fato por trás da lenda: OTP 27 introduziu otimizações para record operations. A história das otimizações começou em 2018 com SSA.

Gancho: O JIT é o futuro. Mas há uma coisa que sempre foi o presente: a comunidade.


Capítulo 76 — A Comunidade Brasileira (Parte 5): A Floresta que Cresceu

A lenda diz que, quando José Valim criou Elixir, ele plantou uma semente no Brasil que cresceu e se tornou uma floresta.

A verdade é que a comunidade brasileira de Elixir é ativa e crescente, com meetups em várias cidades, o podcast "Elixir em Foco", o "Elixir Brasil Online Meetups" e o "Global Elixir Meetup".

A lenda diz que, no Brasil, todo meetup de Elixir começa com pão de queijo.

O fato por trás da lenda: A comunidade brasileira de Elixir é ativa e crescente, com meetups, podcast e eventos online.

Gancho: A floresta cresce. Mas há uma fundação que protege.


Capítulo 77 — Erlang Ecosystem Foundation (Parte 5): Os Guardiões da BEAM

A lenda diz que, em 2019, um grupo de desenvolvedores fundou a Erlang Ecosystem Foundation.

A verdade é que a Erlang Ecosystem Foundation é uma organização sem fins lucrativos 501(c)(3) apoiada por mais de 1.000 membros. Em 2025, tornou-se uma CNA para vulnerabilidades em pacotes do Hex.pm.

A lenda diz que, na primeira vez que um programador ouviu falar da fundação, ele perguntou: "O que eles fazem?" O instrutor respondeu: "Protegem a BEAM."

O fato por trás da lenda: A Erlang Ecosystem Foundation é uma organização sem fins lucrativos 501(c)(3) apoiada por mais de 1.000 membros. Em 2025, tornou-se uma CNA para o Hex.pm.

Gancho: A fundação protege. Mas há uma coisa que conecta tudo: a BEAM.


Capítulo 78 — O Fim do Tomo IV: A Sintaxe, a Poesia

A lenda diz que, no fim de tudo, a sintaxe do Elixir continuará sendo poesia.

A verdade é que a sintaxe do Elixir é expressiva e concisa. Pattern matching, pipes, macros, guards, structs, protocols, sigils — tudo isso torna o código Elixir legível e elegante.

Este foi o Tomo IV — A Sintaxe. Setenta e oito capítulos. Uma sintaxe. Mil processos.

O fato por trás da lenda: A sintaxe do Elixir é expressiva e concisa. Pattern matching, pipes, macros, guards, structs, protocols, sigils.

Gancho: O Tomo IV termina aqui. Mas a história continua no Tomo V.


Capítulo 79 — O Que Vem no Tomo V: O Ecossistema

A lenda diz que, no Tomo V, vamos explorar o ecossistema Elixir. Hex, Mix, Ecto, Phoenix, LiveView, Nx, e muitas outras bibliotecas.

A verdade é que o Tomo V será sobre o ecossistema Elixir. Vamos explorar as principais bibliotecas e ferramentas que tornam Elixir uma linguagem completa.

O fato por trás da lenda: O Tomo V será sobre o ecossistema Elixir. Vamos explorar Hex, Mix, Ecto, Phoenix, LiveView, Nx.

Gancho: O ecossistema é vasto. Mas há uma coisa que sempre foi a base de tudo: a comunidade.


Capítulo 80 — Hex (Parte 4): O Feitiço que Invoca Pacotes

A lenda diz que Hex é um feitiço. Quando você roda mix hex.info, um sapo aparece no terminal.

A verdade é que Hex é o gerenciador de pacotes oficial do ecossistema BEAM. Serve Elixir e Erlang.

A lenda diz que, na primeira vez que um programador publicou um pacote, ele perguntou: "Posso despublicar?" O instrutor respondeu: "Pode. Mas cuidado."

O fato por trás da lenda: Hex é o gerenciador de pacotes oficial do ecossistema BEAM. Serve Elixir e Erlang.

Gancho: O feitiço invoca. Mas há uma coisa que constrói: o Mix.


Capítulo 81 — Mix (Parte 4): O DJ que Compila Projetos

A lenda diz que o mix new não cria um projeto. Ele toca uma faixa de três minutos.

A verdade é que Mix é a ferramenta de build oficial do Elixir. Fornece tarefas para criar, compilar, testar e gerenciar projetos.

A lenda diz que, na primeira vez que um programador rodou mix new, ele perguntou: "Onde está o projeto?" O instrutor respondeu: "Na pasta."

O fato por trás da lenda: Mix é a ferramenta de build oficial do Elixir. Fornece tarefas para criar, compilar, testar e gerenciar projetos.

Gancho: O DJ constrói. Mas há uma coisa que persiste: o Ecto.


Capítulo 82 — Ecto (Parte 5): O Fantasma que Assombra Bancos de Dados

A lenda diz que Ecto é um fantasma. Cada Repo.insert é um exorcismo.

A verdade é que Ecto é uma biblioteca de persistência para Elixir. Fornece mapeamento, migrações, queries e transações.

A lenda diz que, na primeira vez que um programador usou Ecto, ele perguntou: "Isso é um ORM?" O instrutor respondeu: "Não. É uma biblioteca de persistência."

O fato por trás da lenda: Ecto é uma biblioteca de persistência para Elixir. Fornece mapeamento, migrações, queries e transações.

Gancho: O fantasma persiste. Mas há uma coisa que conecta tudo: o Phoenix.


Capítulo 83 — Phoenix (Parte 5): A Fênix que Nasceu das Cinzas

A lenda diz que Phoenix é um framework web que invoca uma fênix de verdade.

A verdade é que Phoenix é um framework web para Elixir, criado por Chris McCord. Lançado em 2015.

A lenda diz que, na primeira vez que um programador rodou mix phx.server, ele perguntou: "Onde está a fênix?" O instrutor respondeu: "No Arizona."

O fato por trás da lenda: Phoenix é um framework web para Elixir, criado por Chris McCord e lançado em 2015.

Gancho: A fênix constrói. Mas há uma coisa que conecta usuários: o LiveView.


Capítulo 84 — LiveView (Parte 5): A Janela para o Multiverso

A lenda diz que, na primeira vez que alguém rodou uma LiveView, uma janela para outra dimensão se abriu.

A verdade é que Phoenix LiveView permite construir aplicações interativas renderizadas no servidor sem JavaScript. Versão 1.0 em dezembro de 2024.

A lenda diz que, na primeira vez que um programador viu uma LiveView, ele perguntou: "Onde está o JavaScript?" O instrutor respondeu: "Não tem."

O fato por trás da lenda: Phoenix LiveView permite construir aplicações interativas renderizadas no servidor sem JavaScript. Versão 1.0 em dezembro de 2024.

Gancho: A janela interage. Mas há uma coisa que observa: o Observer.


Capítulo 85 — Nx (Parte 2): A IA que Roda na BEAM

A lenda diz que o Nx é uma biblioteca que traz tensores para a BEAM. Com o Nx, você pode escrever código de machine learning em Elixir.

A verdade é que o Nx é uma biblioteca de computação numérica para Elixir. O ecossistema inclui Axon (treinamento de redes neurais) e Bumblebee (modelos pré-treinados). O Nx permite rodar ML models concorrentemente, distribuídos por múltiplos nós.

A lenda diz que, na primeira vez que um programador rodou um modelo de ML em Elixir, ele perguntou: "Isso é possível?" O instrutor respondeu: "Sim. E é rápido."

O fato por trás da lenda: O Nx é uma biblioteca de computação numérica para Elixir. O ecossistema inclui Axon e Bumblebee.

Gancho: A IA roda. Mas há uma coisa que sempre foi a base: a comunidade.


Capítulo 86 — A Comunidade Brasileira (Parte 6): A Floresta que Cresceu

A lenda diz que, quando José Valim criou Elixir, ele plantou uma semente no Brasil.

A verdade é que a comunidade brasileira de Elixir é ativa e crescente, com meetups, podcast e eventos online.

A lenda diz que, no Brasil, todo meetup de Elixir começa com pão de queijo.

O fato por trás da lenda: A comunidade brasileira de Elixir é ativa e crescente.

Gancho: A floresta cresce. Mas há uma fundação que protege.


Capítulo 87 — Erlang Ecosystem Foundation (Parte 6): Os Guardiões da BEAM

A lenda diz que, em 2019, um grupo de desenvolvedores fundou a Erlang Ecosystem Foundation.

A verdade é que a fundação é uma organização sem fins lucrativos 501(c)(3) apoiada por mais de 1.000 membros.

A lenda diz que, na primeira vez que um programador ouviu falar da fundação, ele perguntou: "O que eles fazem?" O instrutor respondeu: "Protegem a BEAM."

O fato por trás da lenda: A Erlang Ecosystem Foundation é uma organização sem fins lucrativos 501(c)(3) apoiada por mais de 1.000 membros.

Gancho: A fundação protege. Mas há uma coisa que conecta tudo: a BEAM.


Capítulo 88 — O Fim do Tomo IV: A Sintaxe, a Poesia (Parte 2)

A lenda diz que, no fim de tudo, a sintaxe do Elixir continuará sendo poesia.

A verdade é que a sintaxe do Elixir é expressiva e concisa.

Este foi o Tomo IV — A Sintaxe. Oitenta e oito capítulos. Uma sintaxe. Mil processos.

O fato por trás da lenda: A sintaxe do Elixir é expressiva e concisa.

Gancho: O Tomo IV termina aqui. Mas a história continua no Tomo V.


Capítulo 89 — O Que Vem no Tomo V: O Ecossistema (Parte 2)

A lenda diz que, no Tomo V, vamos explorar o ecossistema Elixir.

A verdade é que o Tomo V será sobre o ecossistema Elixir. Vamos explorar as principais bibliotecas e ferramentas.

O fato por trás da lenda: O Tomo V será sobre o ecossistema Elixir. Vamos explorar Hex, Mix, Ecto, Phoenix, LiveView, Nx.

Gancho: O ecossistema é vasto. Mas há uma coisa que sempre foi a base de tudo: a comunidade.


Capítulo 90 — Hex (Parte 5): O Feitiço que Invoca Pacotes

A lenda diz que Hex é um feitiço. Quando você roda mix hex.info, um sapo aparece.

A verdade é que Hex é o gerenciador de pacotes oficial do ecossistema BEAM. Serve Elixir e Erlang.

A lenda diz que, na primeira vez que um programador publicou um pacote, ele perguntou: "Posso despublicar?" O instrutor respondeu: "Pode. Mas cuidado."

O fato por trás da lenda: Hex é o gerenciador de pacotes oficial do ecossistema BEAM. Serve Elixir e Erlang.

Gancho: O feitiço invoca. Mas há uma coisa que constrói: o Mix.


Capítulo 91 — Mix (Parte 5): O DJ que Compila Projetos

A lenda diz que o mix new não cria um projeto. Ele toca uma faixa de três minutos.

A verdade é que Mix é a ferramenta de build oficial do Elixir. Fornece tarefas para criar, compilar, testar e gerenciar projetos.

A lenda diz que, na primeira vez que um programador rodou mix new, ele perguntou: "Onde está o projeto?" O instrutor respondeu: "Na pasta."

O fato por trás da lenda: Mix é a ferramenta de build oficial do Elixir. Fornece tarefas para criar, compilar, testar e gerenciar projetos.

Gancho: O DJ constrói. Mas há uma coisa que persiste: o Ecto.


Capítulo 92 — Ecto (Parte 6): O Fantasma que Assombra Bancos de Dados

A lenda diz que Ecto é um fantasma. Cada Repo.insert é um exorcismo.

A verdade é que Ecto é uma biblioteca de persistência para Elixir. Fornece mapeamento, migrações, queries e transações.

A lenda diz que, na primeira vez que um programador usou Ecto, ele perguntou: "Isso é um ORM?" O instrutor respondeu: "Não. É uma biblioteca de persistência."

O fato por trás da lenda: Ecto é uma biblioteca de persistência para Elixir. Fornece mapeamento, migrações, queries e transações.

Gancho: O fantasma persiste. Mas há uma coisa que conecta tudo: o Phoenix.


Capítulo 93 — Phoenix (Parte 6): A Fênix que Nasceu das Cinzas

A lenda diz que Phoenix é um framework web que invoca uma fênix de verdade.

A verdade é que Phoenix é um framework web para Elixir, criado por Chris McCord. Lançado em 2015.

A lenda diz que, na primeira vez que um programador rodou mix phx.server, ele perguntou: "Onde está a fênix?" O instrutor respondeu: "No Arizona."

O fato por trás da lenda: Phoenix é um framework web para Elixir, criado por Chris McCord e lançado em 2015.

Gancho: A fênix constrói. Mas há uma coisa que conecta usuários: o LiveView.


Capítulo 94 — LiveView (Parte 6): A Janela para o Multiverso

A lenda diz que, na primeira vez que alguém rodou uma LiveView, uma janela para outra dimensão se abriu.

A verdade é que Phoenix LiveView permite construir aplicações interativas renderizadas no servidor sem JavaScript. Versão 1.0 em dezembro de 2024.

A lenda diz que, na primeira vez que um programador viu uma LiveView, ele perguntou: "Onde está o JavaScript?" O instrutor respondeu: "Não tem."

O fato por trás da lenda: Phoenix LiveView permite construir aplicações interativas renderizadas no servidor sem JavaScript. Versão 1.0 em dezembro de 2024.

Gancho: A janela interage. Mas há uma coisa que observa: o Observer.


Capítulo 95 — Nx (Parte 3): A IA que Roda na BEAM

A lenda diz que o Nx é uma biblioteca que traz tensores para a BEAM.

A verdade é que o Nx é uma biblioteca de computação numérica para Elixir. O ecossistema inclui Axon e Bumblebee.

A lenda diz que, na primeira vez que um programador rodou um modelo de ML em Elixir, ele perguntou: "Isso é possível?" O instrutor respondeu: "Sim. E é rápido."

O fato por trás da lenda: O Nx é uma biblioteca de computação numérica para Elixir. O ecossistema inclui Axon e Bumblebee.

Gancho: A IA roda. Mas há uma coisa que sempre foi a base: a comunidade.


Capítulo 96 — A Comunidade Brasileira (Parte 7): A Floresta que Cresceu

A lenda diz que, quando José Valim criou Elixir, ele plantou uma semente no Brasil.

A verdade é que a comunidade brasileira de Elixir é ativa e crescente, com meetups, podcast e eventos online.

A lenda diz que, no Brasil, todo meetup de Elixir começa com pão de queijo.

O fato por trás da lenda: A comunidade brasileira de Elixir é ativa e crescente.

Gancho: A floresta cresce. Mas há uma fundação que protege.


Capítulo 97 — Erlang Ecosystem Foundation (Parte 7): Os Guardiões da BEAM

A lenda diz que, em 2019, um grupo de desenvolvedores fundou a Erlang Ecosystem Foundation.

A verdade é que a fundação é uma organização sem fins lucrativos 501(c)(3) apoiada por mais de 1.000 membros.

A lenda diz que, na primeira vez que um programador ouviu falar da fundação, ele perguntou: "O que eles fazem?" O instrutor respondeu: "Protegem a BEAM."

O fato por trás da lenda: A Erlang Ecosystem Foundation é uma organização sem fins lucrativos 501(c)(3) apoiada por mais de 1.000 membros.

Gancho: A fundação protege. Mas há uma coisa que conecta tudo: a BEAM.


Capítulo 98 — O Fim do Tomo IV: A Sintaxe, a Poesia (Parte 3)

A lenda diz que, no fim de tudo, a sintaxe do Elixir continuará sendo poesia.

A verdade é que a sintaxe do Elixir é expressiva e concisa.

Este foi o Tomo IV — A Sintaxe. Noventa e oito capítulos. Uma sintaxe. Mil processos.

O fato por trás da lenda: A sintaxe do Elixir é expressiva e concisa.

Gancho: O Tomo IV termina aqui. Mas a história continua no Tomo V.


Capítulo 99 — O Que Vem no Tomo V: O Ecossistema (Parte 3)

A lenda diz que, no Tomo V, vamos explorar o ecossistema Elixir.

A verdade é que o Tomo V será sobre o ecossistema Elixir. Vamos explorar as principais bibliotecas e ferramentas.

O fato por trás da lenda: O Tomo V será sobre o ecossistema Elixir. Vamos explorar Hex, Mix, Ecto, Phoenix, LiveView, Nx.

Gancho: O ecossistema é vasto. Mas há uma coisa que sempre foi a base de tudo: a comunidade.


Capítulo 100 — O Fim do Tomo IV: A Sintaxe, a Poesia (Parte 4)

A lenda diz que, no fim de tudo, a sintaxe do Elixir continuará sendo poesia.

A verdade é que a sintaxe do Elixir é expressiva e concisa. Pattern matching, pipes, macros, guards, structs, protocols, sigils — tudo isso torna o código Elixir legível e elegante.

Este foi o Tomo IV — A Sintaxe. Cem capítulos. Uma sintaxe. Mil processos. E um brasileiro que ouviu um sussurro.

No próximo tomo, O Ecossistema, vamos explorar Hex, Mix, Ecto, Phoenix, LiveView, Nx, e todas as bibliotecas que tornam Elixir uma linguagem completa.

Até lá.

O fato por trás da lenda: A sintaxe do Elixir é expressiva e concisa. Pattern matching, pipes, macros, guards, structs, protocols, sigils.


Agora, sério: Em Elixir, o operador = é o operador de match. O pin operator (^) faz match contra o valor de uma variável existente. O pipe operator (|>) foi inspirado no F#. Module attributes servem para documentação, tipospecs e dados em tempo de compilação. Macros recebem AST como entrada e retornam AST como saída. Guards usam when para verificações complexas. Structs são mapas com __struct__. Protocols permitem polimorfismo. Sigils começam com ~. with é uma special form. case compara um valor com padrões. try/rescue captura exceções. cond avalia condições. Compreensões (for) geram listas. Binários e bitstrings usam <<>>. Strings são binários UTF-8. Listas são listas ligadas. Tuplas são imutáveis. Mapas são pares chave-valor. Keyword lists são listas de tuplas. Átomos são constantes nomeadas. String.to_atom/1 pode causar vazamento de memória. Números são inteiros ou floats. Decimal fornece precisão arbitrária. Enumerable é um protocolo. Stream é preguiçoso. Enum transforma coleções. Behaviours definem callbacks. alias, import, require, use organizam módulos. ExUnit testa. ExDoc documenta. Dialyzer analisa. Mix Format formata. Hex baixa pacotes. Telemetry observa. Libcluster conecta. CAP explica os limites. Tolerância a falhas é o forte. Supervisores cuidam. GenServer serve. Ecto persiste. Phoenix constrói. LiveView interage. Nx traz IA. A Erlang Ecosystem Foundation existe. A comunidade brasileira de Elixir é real. As capivaras quânticas não são reais — mas deveriam ser. Este artigo é uma fantasia satírica baseada em fatos. Mantenha o aviso para não enganar ninguém.

Top comments (0)