Erlang e Elixir
Por uma web mais feliz
Bruno Henrique - Garu
https://www.facebook.com/groups/natalonrails
https://www.facebook.com/wdevtips
Motivação
Necessidade de aprender
coisas novas
Estudar o paradigma
funcional
Criar um sistema
Realtime para atender
milhares de usuários
Mas, entre todas as
linguagens funcionais,
porque Erlang?
Um pouco de história...
Por que uma nova
linguagem?
Contexto no qual Erlang
foi criada
Switch
Nenhuma linguagem
atendia a todos os
requisitos ...
... alta concorrência
... tolerância a falhas
... alta disponibilidade
Isso nos anos 80 ...
... então por que usar
agora?
Nosso contexto
Server
Fazendo a coisa certa em
um contexto diferente.
Entendendo suas
features na prática
Como atender uma
grande quantidade
usuários ?
Podemos escalar na
horizontal ?
Podemos ...
... mas existe um limite
tanto físico quanto
financeiro
Fazer isso nem sempre é
uma coisa simples
Load balance
etc.
cache
Slave
Master
Proxy
E dependendo da
tecnologia escolhida
pode haver desperdício.
Exemplo
https://speakerdeck.com/plataformatec/elixir
Erlang - Distributed
https://speakerdeck.com/plataformatec/elixir
Como manter um número
elevado de usuários
simultâneos?
Agora começa a
concorrência.
Mas o que é
concorrência?
Two queues and one coffee machine.
Joe Armstrong
http://joearms.github.io/2013/04/05/concurrent-and-parallel-programming.html
Ruby, Python, Java, PHP,
C# - O que elas possuem
em comum?
Orientação a Objeto
E um forte conceito de
estado mutável.
Estado e concorrência
não funcionam muito bem
juntos.
Como lidamos com
concorrência?
Podemos usar threads
O que é uma thread?
Temos algum problema
com thread?
Sim, estado
compartilhado é um
grande problema.
Soluções?
locks
transactional memory
message-passing
E é assim que Erlang
funciona.
Quando não temos estado
compartilhado fica mais
fácil
Exemplo
https://gist.github.com/brunohenrique/5428281#file-no_side_effects-rb
Elixir
O poder da Erlang VM
com uma bela sintaxe.
Sintaxe
Erlang
https://speakerdeck.com/plataformatec/elixir
Elixir
https://speakerdeck.com/plataformatec/elixir
Protocol
http://elixir-lang.org/getting_started/4.html
Macros
http://elixir-lang.org/getting_started/5.html
Referências
Asynchronous to Real-time Web Programming - http://www.infoq.com/presentations/Asynchronous-Web-
Programming
Erlang - software for a concurrent world - http://www.infoq.com/presentations/erlang-software-for-a-
concurrent-world
A True Conversational Web - http://www.infoq.com/presentations/A-True-Conversational-Web
1000 Year-old Design Patterns - http://www.infoq.com/presentations/1000-Year-old-Design-Patterns
Erlang, the Language from the Future? - http://www.infoq.com/presentations/Erlang-Pros-Cons
Elixir: Modern Programming for the Erlang VM - http://www.infoq.com/presentations/Elixir-Erlang-VM
Let It Crash ... Except When You Shouldn't - http://www.infoq.com/presentations/Let-It-Crash
Message Passing Concurrency in Erlang - http://www.infoq.com/presentations/Message-Passing-
Concurrency
Referências
Death by Accidental Complexity - http://www.infoq.com/presentations/Death-by-Accidental-Complexity
Systems that Never Stop (and Erlang) - http://www.infoq.com/presentations/Systems-that-Never-Stop-Joe-
Armstrong
Multicore Programming in Erlang - http://www.infoq.com/presentations/wiger-multicore-erlang
Concurrency: Past and Present - http://www.infoq.com/presentations/goetz-concurrency-past-present
Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages - http:
//pragprog.com/book/btlang/seven-languages-in-seven-weeks
Programming Erlang: Software for a Concurrent World - http://pragprog.com/book/jaerlang/programming-
erlang
Elixir language - http://elixir-lang.org/getting_started/1.html
squall.bruno@gmail.com
github.com/brunohenrique
@GaruHenr
Obrigado!

Erlang e Elixir por uma web mais feliz