Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Un traguito de Elixir
Search
Fernando Perales
January 10, 2018
Programming
0
230
Un traguito de Elixir
Introduction to Elixir
Talk given at Unotalks meetup on January10th 2018
Fernando Perales
January 10, 2018
Tweet
Share
More Decks by Fernando Perales
See All by Fernando Perales
Anonimización de bases de datos con PostgreSQL - nerdearla
ferperales
0
49
Let's give REST a rest: exploring the state of gRPC in Ruby
ferperales
0
130
Guía Práctica para Convertirse en Contribuidor de Open Source en 10 Años (o más)
ferperales
0
60
¿Es convertirte en manager tan malo como todo mundo dice?
ferperales
0
60
Guía práctica para convertirse en contribuidor de open source en 10 años o más
ferperales
0
46
Anonimización de bases de datos con PostgreSQL
ferperales
0
58
Guía Práctica para Convertirse en Contribuidor de Open Source en 10 Años (o más)
ferperales
0
58
Guía práctica para convertirse en Senior Engineer en 10 años
ferperales
0
130
Consultoría y Open Source: buscando el balance entre beneficio y la diversión
ferperales
0
71
Other Decks in Programming
See All in Programming
Gleamという選択肢
comamoca
6
670
Devinで実践する!AIエージェントと協働する開発組織の作り方
masahiro_nishimi
6
2.9k
社内での開発コミュニティ活動とモジュラーモノリス標準化事例のご紹介/xPalette and Introduction of Modular monolith standardization
m4maruyama
0
110
UPDATEがシステムを複雑にする? イミュータブルデータモデルのすすめ
shimomura
1
520
CSC307 Lecture 17
javiergs
PRO
0
110
事業戦略を理解してソフトウェアを設計する
masuda220
PRO
21
5.8k
型安全RESTで爆速プロトタイピング – Hono RPC実践
tacke_jp
0
110
Spring gRPC で始める gRPC 入門 / Introduction to gRPC with Spring gRPC
mackey0225
2
470
単体テストの始め方/作り方
toms74209200
0
410
Using AI Tools Around Software Development
inouehi
0
1.1k
Julia という言語について (FP in Julia « SIDE: F ») for 関数型まつり2025
antimon2
3
900
「兵法」から見る質とスピード
ickx
0
260
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.2k
Become a Pro
speakerdeck
PRO
28
5.4k
Code Review Best Practice
trishagee
68
18k
Optimising Largest Contentful Paint
csswizardry
37
3.3k
Six Lessons from altMBA
skipperchong
28
3.8k
The World Runs on Bad Software
bkeepers
PRO
68
11k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.8k
Producing Creativity
orderedlist
PRO
346
40k
Fireside Chat
paigeccino
37
3.5k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
4
120
Agile that works and the tools we love
rasmusluckow
329
21k
Transcript
Un traguito de Elixir Fernando Perales @FerPeralesM
<me>
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
</me>
¿Qué es Erlang? Lenguaje de programación funcional, concurrente, de propósito
general
¿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
Erlang en números La máquina virtual de Erlang (BEAM) es
desarrollada por Joe Armstrong, Robert Virding y Mike Williams en 1985
Erlang en números El primer sistema en producción fue el
Switch AXD301 con 1 MLOC y disponibilidad de 9 nueves
Erlang en números
Erlang en números
Erlang en números Se libera como Open Source en 1998
Erlang en números Más del 50% del tráfico de Internet
pasa por sistemas construídos con Erlang
Erlang en números WhatsApp usa Erlang para manejar 2 millones
de conexiones por servidos
Erlang en números WhatsApp maneja 30 billones de mensajes diariamente
(347,222 msg/seg)
Erlang <> Elixir ¿Por qué mencionar Erlang cuando hablamos de
Elixir?
¿Qué es Elixir? Lenguaje de programación funcional, concurrente, de propósito
general que se ejecuta sobre la máquina virtual de Erlang (BEAM)
¿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
¿Qué es Elixir? Al investigar cómo otras tecnologías manejaban concurrencia,
encontró a Erlang
¿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
¿Qué es Elixir? Los programas creados en Elixir compilan a
bytecode de BEAM
¿Qué es Elixir? https://www.codeschool.com/blog/2017/02/22/why-elixir/
Ventajas heredadas de Erlang Usa una tecnología ampliamente probada por
más de 30 años
Ventajas heredadas de Erlang Facilidad de distribución de datos entre
procesos mediante GenServer
Ventajas heredadas de Erlang Auto-curación mediante Supervisors
Ventajas heredadas de Erlang Fácilmente escalable para cubrir las demandas
del futuro
Ventajas heredadas de Erlang Pattern-matching
Ventajas que Elixir aporta Sintaxis limpia y familiar
Ventajas que Elixir aporta Herramientas maduras
Ventajas que Elixir aporta Framework de pruebas unitarias integrado
Ventajas que Elixir aporta Meta-programación
Ventajas que Elixir aporta Documentación integrada
Ventajas que Elixir aporta Pipes
Ventajas que Elixir aporta Phoenix
Ventajas que Elixir aporta No hay costo de conversión al
usar código de Erlang en Elixir y viceversa
Lo que Elixir busca Distributed fault-tolerant applications with hot-code swapping
Ejemplos
Hello world iex> IO.puts "hello world" hello world :ok jeregrine.github.io/elixir-by-example
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
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
Tipos básicos: booleanos iex> true true iex> true == true
true iex> true == false false jeregrine.github.io/elixir-by-example
Tipos básicos: átomos iex> :stuff :stuff iex> :stuff == :stuff
true iex> :+ :+ jeregrine.github.io/elixir-by-example
Tipos básicos: átomos iex> :"Hello World!" :"Hello World!" jeregrine.github.io/elixir-by-example
Tipos básicos: binarios iex> <<1, 2, 3>> <<1, 2, 3>>
iex> size <<1, 2, 3>> 3 jeregrine.github.io/elixir-by-example
Cadenas y listas de caracteres iex> is_binary "hello" true jeregrine.github.io/elixir-by-example
Cadenas y listas de caracteres iex> name = "Paul" "Paul"
iex> "Hello #{name}!" "Hello Paul!" jeregrine.github.io/elixir-by-example
Cadenas y listas de caracteres iex> 'hello' 'hello' iex> is_binary
'hello' false iex> is_list 'hello' true jeregrine.github.io/elixir-by-example
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
Tuplas iex> {:stuff, 1, "things"} {:stuff, 1, "things"} jeregrine.github.io/elixir-by-example
Tuplas iex> {stuff, num, _} = {:stuff, 1, "things"} {:stuff,
1, "things"} iex> stuff :stuff iex> num 1 jeregrine.github.io/elixir-by-example
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
Tuplas iex> {:ok, handle} = File.open("doesntexist.txt") ** (MatchError) no match
of right hand side value: {:error, :enoent} jeregrine.github.io/elixir-by-example
Listas iex> [1, 2, 3] [1, 2, 3] iex> [:stuff,
1, "things"] [:stuff, 2, "things"] jeregrine.github.io/elixir-by-example
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
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
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
Demo
FerPerales/exercises_for_programmers_elixir
Exercises for Programmers 57 Challenges to Develop Your Coding Skills
Brian P. Hogan
¿Preguntas?
¡Gracias! @FerPeralesM
[email protected]