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
180
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
23
Let's give REST a rest: exploring the state of gRPC in Ruby
ferperales
0
84
Guía Práctica para Convertirse en Contribuidor de Open Source en 10 Años (o más)
ferperales
0
39
¿Es convertirte en manager tan malo como todo mundo dice?
ferperales
0
33
Guía práctica para convertirse en contribuidor de open source en 10 años o más
ferperales
0
18
Anonimización de bases de datos con PostgreSQL
ferperales
0
34
Guía Práctica para Convertirse en Contribuidor de Open Source en 10 Años (o más)
ferperales
0
34
Guía práctica para convertirse en Senior Engineer en 10 años
ferperales
0
120
Consultoría y Open Source: buscando el balance entre beneficio y la diversión
ferperales
0
43
Other Decks in Programming
See All in Programming
見えないメモリを観測する: PHP 8.4 `pg_result_memory_size()` とSQL結果のメモリ管理
kentaroutakeda
0
900
責務を分離するための例外設計 - PHPカンファレンス 2024
kajitack
9
2.3k
Package Traits
ikesyo
1
150
「とりあえず動く」コードはよい、「読みやすい」コードはもっとよい / Code that 'just works' is good, but code that is 'readable' is even better.
mkmk884
6
1.3k
Effective Signals in Angular 19+: Rules and Helpers
manfredsteyer
PRO
0
340
Запуск 1С:УХ в крупном энтерпрайзе: мечта и реальность ПМа
lamodatech
0
870
数十万行のプロジェクトを Scala 2から3に完全移行した
xuwei_k
0
810
Go の GC の不得意な部分を克服したい
taiyow
3
990
return文におけるstd::moveについて
onihusube
1
1.4k
短期間での新規プロダクト開発における「コスパの良い」Goのテスト戦略」 / kamakura.go
n3xem
2
210
情報漏洩させないための設計
kubotak
5
1.2k
htmxって知っていますか?次世代のHTML
hiro_ghap1
0
400
Featured
See All Featured
The Language of Interfaces
destraynor
155
24k
Measuring & Analyzing Core Web Vitals
bluesmoon
5
190
Build your cross-platform service in a week with App Engine
jlugia
229
18k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
YesSQL, Process and Tooling at Scale
rocio
170
14k
Mobile First: as difficult as doing things right
swwweet
222
9k
BBQ
matthewcrist
85
9.4k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.3k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Become a Pro
speakerdeck
PRO
26
5.1k
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]