Un traguito de Elixir

Un traguito de Elixir

Introduction to Elixir

Talk given at Unotalks meetup on January10th 2018

6c137ee3013821b517c4b9beed0145df?s=128

Fernando Perales

January 10, 2018
Tweet

Transcript

  1. Un traguito de Elixir Fernando Perales @FerPeralesM

  2. <me>

  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
  4. </me>

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

    general
  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
  7. Erlang en números La máquina virtual de Erlang (BEAM) es

    desarrollada por Joe Armstrong, Robert Virding y Mike Williams en 1985
  8. Erlang en números El primer sistema en producción fue el

    Switch AXD301 con 1 MLOC y disponibilidad de 9 nueves
  9. Erlang en números

  10. Erlang en números

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

  12. Erlang en números Más del 50% del tráfico de Internet

    pasa por sistemas construídos con Erlang
  13. Erlang en números WhatsApp usa Erlang para manejar 2 millones

    de conexiones por servidos
  14. Erlang en números WhatsApp maneja 30 billones de mensajes diariamente

    (347,222 msg/seg)
  15. Erlang <> Elixir ¿Por qué mencionar Erlang cuando hablamos de

    Elixir?
  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)
  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
  18. ¿Qué es Elixir? Al investigar cómo otras tecnologías manejaban concurrencia,

    encontró a Erlang
  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
  20. ¿Qué es Elixir? Los programas creados en Elixir compilan a

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

  22. Ventajas heredadas de Erlang Usa una tecnología ampliamente probada por

    más de 30 años
  23. Ventajas heredadas de Erlang Facilidad de distribución de datos entre

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

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

    del futuro
  26. Ventajas heredadas de Erlang Pattern-matching

  27. Ventajas que Elixir aporta Sintaxis limpia y familiar

  28. Ventajas que Elixir aporta Herramientas maduras

  29. Ventajas que Elixir aporta Framework de pruebas unitarias integrado

  30. Ventajas que Elixir aporta Meta-programación

  31. Ventajas que Elixir aporta Documentación integrada

  32. Ventajas que Elixir aporta Pipes

  33. Ventajas que Elixir aporta Phoenix

  34. Ventajas que Elixir aporta No hay costo de conversión al

    usar código de Erlang en Elixir y viceversa
  35. Lo que Elixir busca Distributed fault-tolerant applications with hot-code swapping

  36. Ejemplos

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

  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
  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
  40. Tipos básicos: booleanos iex> true true iex> true == true

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

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

  43. Tipos básicos: binarios iex> <<1, 2, 3>> <<1, 2, 3>>

    iex> size <<1, 2, 3>> 3 jeregrine.github.io/elixir-by-example
  44. Cadenas y listas de caracteres iex> is_binary "hello" true jeregrine.github.io/elixir-by-example

  45. Cadenas y listas de caracteres iex> name = "Paul" "Paul"

    iex> "Hello #{name}!" "Hello Paul!" jeregrine.github.io/elixir-by-example
  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
  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
  48. Tuplas iex> {:stuff, 1, "things"} {:stuff, 1, "things"} jeregrine.github.io/elixir-by-example

  49. Tuplas iex> {stuff, num, _} = {:stuff, 1, "things"} {:stuff,

    1, "things"} iex> stuff :stuff iex> num 1 jeregrine.github.io/elixir-by-example
  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
  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
  52. Listas iex> [1, 2, 3] [1, 2, 3] iex> [:stuff,

    1, "things"] [:stuff, 2, "things"] jeregrine.github.io/elixir-by-example
  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
  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
  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
  56. Demo

  57. FerPerales/exercises_for_programmers_elixir

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

    Brian P. Hogan
  59. ¿Preguntas?

  60. ¡Gracias! @FerPeralesM hola@ferperales.net