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

Elixir @ iMasters Intercon 2016

Elixir @ iMasters Intercon 2016

Elixir: a linguagem, sua concepção e a volta da computação funcional

-- George Guimarães

Plataformatec

October 22, 2016
Tweet

More Decks by Plataformatec

Other Decks in Technology

Transcript

  1. @georgeguimaraes / @plataformatec
    ELIXIR.
    PROGRAMAÇÃO
    FUNCIONAL E
    PRAGMÁTICA

    View full-size slide

  2. GEORGE
    GUIMARÃES

    View full-size slide

  3. consulting and software engineering

    View full-size slide

  4. NOSSA GERAÇÃO TEM
    UM PROBLEMA.
    Desenvolvedores web tem que lidar com
    concorrência. Não há escapatória.

    View full-size slide

  5. CONCORRÊNCIA.
    Capacidade de lidar com várias coisas (ao
    mesmo tempo, ou serialmente).

    View full-size slide

  6. PARALELISMO.
    Capacidade de fazer várias coisas ao mesmo
    tempo.

    View full-size slide

  7. CONCORRÊNCIA.
    Websockets, HTTP2, Alta quantidade de
    requests, demanda instável.

    View full-size slide

  8. THREADS E EVENT
    LOOP.
    Modelos primitivos para lidar com
    concorrência.

    View full-size slide

  9. “what makes multithreaded
    programming difficult is not
    that writing it is hard, but
    that testing it is hard. It’s not
    the pitfalls that you can fall
    into; it’s the fact that you
    don’t necessarily know
    whether you’ve fallen into
    one of them. ”

    View full-size slide

  10. — ROBERT VIRDING
    “Any sufficiently complicated concurrent
    program in another language contains an
    ad hoc informally-specified bug-ridden
    slow implementation of half of Erlang.”

    View full-size slide

  11. PLATAFORMA
    ELIXIR.
    Erlang and OTP, now with modern tooling.

    View full-size slide

  12. Switch
    Switch

    View full-size slide

  13. Switch
    Browser
    Endpoint
    Server

    View full-size slide

  14. — ELIXIR DEVELOPER
    “We stand in the shoulders of giants”

    View full-size slide

  15. DOCUMENTAÇÃO DE
    ALTO NÍVEL.
    Documentação ruim é bug.

    View full-size slide

  16. FERRAMENTAL
    EMBUTIDO.
    Hex, Mix, ExUnit.

    View full-size slide

  17. LINGUAGEM
    FUNCIONAL.
    Não temos classes nem objetos.

    View full-size slide

  18. IMUTABILIDADE.
    “Isso muda tudo”

    View full-size slide

  19. NÃO TENHO LOOPS!

    View full-size slide

  20. defmodule Fibonacci do
    def calc(0), do: 0
    def calc(1), do: 1
    def calc(n), do: calc(n-1) + calc(n-2)
    end
    Fibonacci.calc(10)
    # => 55

    View full-size slide

  21. MAS, E COMO FAZER
    UM CONTADOR?
    Não é possível mudar o conteúdo de uma
    variável????

    View full-size slide

  22. defmodule Counter do
    def start(value) do
    receive do
    :increment -> start(value + 1)
    {:get, pid} -> send(pid, value)
    end
    end
    end

    View full-size slide

  23. defmodule Counter do
    def start(value) do
    receive do
    :increment -> start(value + 1)
    {:get, caller} -> send(caller, value)
    end
    end
    end
    pid = spawn(fn -> Counter.start(10) end)
    send(pid, :increment)
    send(pid, :increment)
    send(pid, :increment)
    send(pid, {:get, self})
    flush
    # => 13

    View full-size slide

  24. shell Counter.start(10)
    spawn

    View full-size slide

  25. shell 11
    increment

    View full-size slide

  26. shell 12
    increment

    View full-size slide

  27. shell 13
    increment

    View full-size slide

  28. shell 13
    :get, self
    13

    View full-size slide

  29. defmodule Counter do
    def start(value) do
    receive do
    :increment -> start(value + 1)
    {:get, caller} -> send(caller, value)
    end
    end
    end
    pid = spawn(fn -> Counter.start(10) end)
    send(pid, :increment)
    send(pid, :increment)
    send(pid, :increment)
    send(pid, {:get, self})
    flush
    # => 13

    View full-size slide

  30. ACTOR MODEL.
    1. Enviar mensagens para outros atores;
    2. Criar novos atores;
    3. Especificar o comportamento para as
    próximas mensagens.

    View full-size slide

  31. Sequential
    code

    View full-size slide

  32. Sequential
    code
    elixir

    View full-size slide

  33. FAULT-TOLERANT.
    DISTRIBUTED.
    O objetivo não era concorrência.

    View full-size slide

  34. Switch
    Switch

    View full-size slide

  35. CONCORRÊNCIA É UM
    CASO DE DISTRIBUIÇÃO.
    Tá distribuído, mas apenas em uma máquina.

    View full-size slide

  36. defmodule MyApp do
    use Application
    def start(_type, _args) do
    import Supervisor.Spec, warn: false
    children = [
    supervisor(Playfair.Repo, []),
    worker(Playfair.Mailer, []),
    worker(Playfair.FileWriter, []),
    ]
    opts = [strategy: :one_for_one, name: Playfair.Supervisor]
    Supervisor.start_link(children, opts)
    end
    end

    View full-size slide

  37. ERROS ACONTECEM.
    Let it crash.

    View full-size slide

  38. MAS SERÁ QUE
    FUNCIONA MESMO?

    View full-size slide

  39. http://blog.whatsapp.com/index.php/
    2012/01/1-million-is-so-2011/
    2 million connections
    on a single node

    View full-size slide

  40. Intel Xeon CPU X5675 @ 3.07GHz
    24 CPU - 96GB
    Using 40% of CPU and Memory

    View full-size slide

  41. USO EFICIENTE!.
    Usa todos os cores da máquina, não só pra
    processar requests web, mas até pra rodar
    testes

    View full-size slide

  42. MICROSERVIÇOS EM
    UM MUNDO ELIXIR.
    Precisamos sempre de APIs HTTP?

    View full-size slide

  43. node@srv2
    node@srv1
    elixir

    View full-size slide

  44. OUTRAS VANTAGENS.
    • Garbage Collector por processo
    • Latência previsível
    • Separação de dados e comportamento (FP)

    View full-size slide

  45. ONDE APRENDER?.

    View full-size slide

  46. http://plataformatec.com.br/elixir-radar

    View full-size slide

  47. https://elixirforum.com

    View full-size slide

  48. OBRIGADO!!

    @plataformatec

    @georgeguimaraes

    View full-size slide

  49. @elixirlang / elixir-lang.org

    View full-size slide