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

Un traguito de Elixir

Un traguito de Elixir

Introduction to Elixir

Talk given at Unotalks meetup on January10th 2018

Fernando Perales

January 10, 2018
Tweet

More Decks by Fernando Perales

Other Decks in Programming

Transcript

  1. Un traguito de Elixir
    Fernando Perales
    @FerPeralesM

    View Slide


  2. View Slide

  3. Fernando Perales
    Senior Software Engineer @ michelada.io
    Ing. En Computación @ UdeG (CUCEI)
    Anfitrión @ RubyGDL
    Co-fundador @ RailsBridge México
    Instructor de Ruby on Rails @ Platzi
    Estudiante de Alemán y Bajo Eléctrico
    Fan de Gregory Sallust

    View Slide


  4. View Slide

  5. ¿Qué es Erlang?
    Lenguaje de programación funcional,
    concurrente, de propósito general

    View Slide

  6. ¿Qué es Erlang?
    Creado en 1986 por la compañía Ericsson
    Para realizar aplicaciones distribuidas,
    tolerantes a fallos, soft-real-time y de
    funcionamiento ininterrumpido

    View Slide

  7. Erlang en números
    La máquina virtual de Erlang (BEAM) es
    desarrollada por Joe Armstrong, Robert
    Virding y Mike Williams en 1985

    View Slide

  8. Erlang en números
    El primer sistema en producción fue el
    Switch AXD301 con 1 MLOC y
    disponibilidad de 9 nueves

    View Slide

  9. Erlang en números

    View Slide

  10. Erlang en números

    View Slide

  11. Erlang en números
    Se libera como Open Source en 1998

    View Slide

  12. Erlang en números
    Más del 50% del tráfico de Internet pasa
    por sistemas construídos con Erlang

    View Slide

  13. Erlang en números
    WhatsApp usa Erlang para manejar 2
    millones de conexiones por servidos

    View Slide

  14. Erlang en números
    WhatsApp maneja 30 billones de mensajes
    diariamente (347,222 msg/seg)

    View Slide

  15. Erlang <> Elixir
    ¿Por qué mencionar Erlang cuando
    hablamos de Elixir?

    View Slide

  16. ¿Qué es Elixir?
    Lenguaje de programación funcional,
    concurrente, de propósito general que
    se ejecuta sobre la máquina virtual de
    Erlang (BEAM)

    View Slide

  17. ¿Qué es Elixir?
    Elixir fue creado en el 2011 por José Valim.
    Un contribuidor de Ruby por bastantes años
    que buscaba cómo mejorar el desempeño
    del lenguaje para aprovechar múltiples CPUs

    View Slide

  18. ¿Qué es Elixir?
    Al investigar cómo otras tecnologías
    manejaban concurrencia, encontró a
    Erlang

    View Slide

  19. ¿Qué es Elixir?
    Mientras la BEAM resolvía era perfecta para
    el tipo de problemas que buscaba resolver,
    sentía que al lenguaje le faltaban
    características que otros lenguajes sí tenian

    View Slide

  20. ¿Qué es Elixir?
    Los programas creados en Elixir compilan
    a bytecode de BEAM

    View Slide

  21. ¿Qué es Elixir?
    https://www.codeschool.com/blog/2017/02/22/why-elixir/

    View Slide

  22. Ventajas heredadas de Erlang
    Usa una tecnología ampliamente probada
    por más de 30 años

    View Slide

  23. Ventajas heredadas de Erlang
    Facilidad de distribución de datos entre
    procesos mediante GenServer

    View Slide

  24. Ventajas heredadas de Erlang
    Auto-curación mediante Supervisors

    View Slide

  25. Ventajas heredadas de Erlang
    Fácilmente escalable para cubrir las
    demandas del futuro

    View Slide

  26. Ventajas heredadas de Erlang
    Pattern-matching

    View Slide

  27. Ventajas que Elixir aporta
    Sintaxis limpia y familiar

    View Slide

  28. Ventajas que Elixir aporta
    Herramientas maduras

    View Slide

  29. Ventajas que Elixir aporta
    Framework de pruebas unitarias integrado

    View Slide

  30. Ventajas que Elixir aporta
    Meta-programación

    View Slide

  31. Ventajas que Elixir aporta
    Documentación integrada

    View Slide

  32. Ventajas que Elixir aporta
    Pipes

    View Slide

  33. Ventajas que Elixir aporta
    Phoenix

    View Slide

  34. Ventajas que Elixir aporta
    No hay costo de conversión al usar código
    de Erlang en Elixir y viceversa

    View Slide

  35. Lo que Elixir busca
    Distributed fault-tolerant applications with
    hot-code swapping

    View Slide

  36. Ejemplos

    View Slide

  37. Hello world
    iex> IO.puts "hello world"
    hello world
    :ok
    jeregrine.github.io/elixir-by-example

    View Slide

  38. Tipos básicos: enteros
    iex> decimal = 1000
    1000
    iex> -5
    -5
    iex> hex = 0xabcd
    43981
    iex> bin = 0b1100
    12
    jeregrine.github.io/elixir-by-example

    View Slide

  39. Tipos básicos: flotantes
    iex> 4.0
    4.0
    iex> 0.567
    0.567
    iex> 0.567e2
    56.7
    iex> 0.567e-2
    0.00567
    jeregrine.github.io/elixir-by-example

    View Slide

  40. Tipos básicos: booleanos
    iex> true
    true
    iex> true == true
    true
    iex> true == false
    false
    jeregrine.github.io/elixir-by-example

    View Slide

  41. Tipos básicos: átomos
    iex> :stuff
    :stuff
    iex> :stuff == :stuff
    true
    iex> :+
    :+
    jeregrine.github.io/elixir-by-example

    View Slide

  42. Tipos básicos: átomos
    iex> :"Hello World!"
    :"Hello World!"
    jeregrine.github.io/elixir-by-example

    View Slide

  43. Tipos básicos: binarios
    iex> <<1, 2, 3>>
    <<1, 2, 3>>
    iex> size <<1, 2, 3>>
    3
    jeregrine.github.io/elixir-by-example

    View Slide

  44. Cadenas y listas de caracteres
    iex> is_binary "hello"
    true
    jeregrine.github.io/elixir-by-example

    View Slide

  45. Cadenas y listas de caracteres
    iex> name = "Paul"
    "Paul"
    iex> "Hello #{name}!"
    "Hello Paul!"
    jeregrine.github.io/elixir-by-example

    View Slide

  46. Cadenas y listas de caracteres
    iex> 'hello'
    'hello'
    iex> is_binary 'hello'
    false
    iex> is_list 'hello'
    true
    jeregrine.github.io/elixir-by-example

    View Slide

  47. Rangos
    iex> 1..3
    1..3
    iex> Enum.map 1..3, fn num -> num * 2 end
    [2, 4, 6]
    jeregrine.github.io/elixir-by-example

    View Slide

  48. Tuplas
    iex> {:stuff, 1, "things"}
    {:stuff, 1, "things"}
    jeregrine.github.io/elixir-by-example

    View Slide

  49. Tuplas
    iex> {stuff, num, _} = {:stuff, 1, "things"}
    {:stuff, 1, "things"}
    iex> stuff
    :stuff
    iex> num
    1
    jeregrine.github.io/elixir-by-example

    View Slide

  50. Tuplas
    i e x > { s t a t u s , h a n d l e } =
    File.open("example.txt")
    {:ok, #PID<0.43.0>}
    jeregrine.github.io/elixir-by-example

    View Slide

  51. Tuplas
    iex> {:ok, handle} = File.open("doesntexist.txt")
    ** (MatchError) no match of right hand side
    value: {:error, :enoent}
    jeregrine.github.io/elixir-by-example

    View Slide

  52. Listas
    iex> [1, 2, 3]
    [1, 2, 3]
    iex> [:stuff, 1, "things"]
    [:stuff, 2, "things"]
    jeregrine.github.io/elixir-by-example

    View Slide

  53. Listas
    iex> [_, two, _] = [1, 2, 3]
    [1, 2, 3]
    iex> two
    2
    iex> [head | tail] = [1, 2, 3, 4]
    [1, 2, 3, 4]
    iex> head
    1
    iex> tail
    [2, 3, 4]
    jeregrine.github.io/elixir-by-example

    View Slide

  54. Listas
    iex> List.flatten [1, [2, 3], 4]
    [1, 2, 3, 4]
    iex> List.zip [[1, 2, 3], [4, 5, 6]]
    [{1, 4}, {2, 5}, {3, 6}]
    iex> List.foldl [1, 2, 3], 0, fn num, acc ->
    num + acc end
    6
    jeregrine.github.io/elixir-by-example

    View Slide

  55. Keyword list
    iex> [head | tail] = [a: 1, b: 2]
    [a: 1, b: 2]
    iex> head
    {:a, 1}
    iex> Keywords.get [a: 1, b: 2], :a
    1
    iex> Keywords.get_values [a: 1, b: 2]
    [1, 2]
    jeregrine.github.io/elixir-by-example

    View Slide

  56. Demo

    View Slide

  57. FerPerales/exercises_for_programmers_elixir

    View Slide

  58. Exercises for Programmers
    57 Challenges to Develop Your Coding
    Skills
    Brian P. Hogan

    View Slide

  59. ¿Preguntas?

    View Slide

  60. ¡Gracias!
    @FerPeralesM
    [email protected]

    View Slide