SlideShare una empresa de Scribd logo
1 de 67
Descargar para leer sin conexión
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!

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Senid2016 - Oficina de LibreLogo - Prof. Gilvan Vilarm
Senid2016 - Oficina de LibreLogo - Prof. Gilvan VilarmSenid2016 - Oficina de LibreLogo - Prof. Gilvan Vilarm
Senid2016 - Oficina de LibreLogo - Prof. Gilvan Vilarm
 
Python Módulo Básico - Introdução a linguagem Python
Python Módulo Básico - Introdução a linguagem PythonPython Módulo Básico - Introdução a linguagem Python
Python Módulo Básico - Introdução a linguagem Python
 
Ruby, Simples e Expressivo
Ruby, Simples e ExpressivoRuby, Simples e Expressivo
Ruby, Simples e Expressivo
 
Ruby
RubyRuby
Ruby
 
AulaPython.pdf
AulaPython.pdfAulaPython.pdf
AulaPython.pdf
 
Paradigmas do Ruby
Paradigmas do RubyParadigmas do Ruby
Paradigmas do Ruby
 
Python para iniciantes
Python para iniciantesPython para iniciantes
Python para iniciantes
 
prolog
prologprolog
prolog
 
Palestra BrOffice.org
Palestra BrOffice.orgPalestra BrOffice.org
Palestra BrOffice.org
 
Seminário - Guido van Rossum: Breve história da linguagem Python
Seminário - Guido van Rossum: Breve história da linguagem PythonSeminário - Guido van Rossum: Breve história da linguagem Python
Seminário - Guido van Rossum: Breve história da linguagem Python
 
Palestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesPalestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas Aplicações
 
Conhecendo o Django
Conhecendo o DjangoConhecendo o Django
Conhecendo o Django
 
Uma linguagem para chamar de minha: Criando DSLs no dia a dia - QConRio2015
Uma linguagem para chamar de minha: Criando DSLs no dia a dia - QConRio2015Uma linguagem para chamar de minha: Criando DSLs no dia a dia - QConRio2015
Uma linguagem para chamar de minha: Criando DSLs no dia a dia - QConRio2015
 
Django Básico
Django BásicoDjango Básico
Django Básico
 
Canivete python
Canivete pythonCanivete python
Canivete python
 
Introdução à programação em Ruby
Introdução à programação em RubyIntrodução à programação em Ruby
Introdução à programação em Ruby
 
Python para devs
Python para devsPython para devs
Python para devs
 
Canivete suíço do Python
Canivete suíço do PythonCanivete suíço do Python
Canivete suíço do Python
 
Utilize Groovy nos seus futuros projetos
Utilize Groovy nos seus futuros projetosUtilize Groovy nos seus futuros projetos
Utilize Groovy nos seus futuros projetos
 
Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.
 

Destacado (6)

Web Services (in portuguese)
Web Services (in portuguese)Web Services (in portuguese)
Web Services (in portuguese)
 
Concorrencia monopolistica
Concorrencia monopolisticaConcorrencia monopolistica
Concorrencia monopolistica
 
Introduction to Elixir
Introduction to ElixirIntroduction to Elixir
Introduction to Elixir
 
Criando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONCriando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSON
 
A civilização industrial
A civilização industrialA civilização industrial
A civilização industrial
 
Mini Curso Web Services com PHP
Mini Curso Web Services com PHPMini Curso Web Services com PHP
Mini Curso Web Services com PHP
 

Similar a Erlang e Elixir por uma web mais feliz

PHP para aplicações Web de grande porte
PHP para aplicações Web  de grande portePHP para aplicações Web  de grande porte
PHP para aplicações Web de grande porte
Felipe Ribeiro
 

Similar a Erlang e Elixir por uma web mais feliz (20)

O case da Plataformatec com o Elixir - Como uma empresa brasileira criou uma ...
O case da Plataformatec com o Elixir - Como uma empresa brasileira criou uma ...O case da Plataformatec com o Elixir - Como uma empresa brasileira criou uma ...
O case da Plataformatec com o Elixir - Como uma empresa brasileira criou uma ...
 
Além da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e ErlangAlém da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e Erlang
 
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorPorque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
 
Javascript levado a serio
Javascript levado a serioJavascript levado a serio
Javascript levado a serio
 
O front-end moderno e sua lib mais popular: React
O front-end moderno e sua lib mais popular: ReactO front-end moderno e sua lib mais popular: React
O front-end moderno e sua lib mais popular: React
 
Java Para Web 2.0
Java Para Web 2.0Java Para Web 2.0
Java Para Web 2.0
 
Javascript levado a sério
Javascript levado a sérioJavascript levado a sério
Javascript levado a sério
 
Do alto para o baixo nível - Entendendo as Diferenças
Do alto para o baixo nível - Entendendo as DiferençasDo alto para o baixo nível - Entendendo as Diferenças
Do alto para o baixo nível - Entendendo as Diferenças
 
Ruby on Rails: Produtividade e diversão na web
Ruby on Rails: Produtividade e diversão na webRuby on Rails: Produtividade e diversão na web
Ruby on Rails: Produtividade e diversão na web
 
Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHP
 
Guia para o Profissional Java
Guia para o Profissional JavaGuia para o Profissional Java
Guia para o Profissional Java
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
 
Boas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SP
Boas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SPBoas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SP
Boas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SP
 
Pho Aula 02
Pho Aula 02Pho Aula 02
Pho Aula 02
 
PHP Presente e Futuro
PHP Presente e FuturoPHP Presente e Futuro
PHP Presente e Futuro
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis ter
 
PHP para aplicações Web de grande porte
PHP para aplicações Web  de grande portePHP para aplicações Web  de grande porte
PHP para aplicações Web de grande porte
 
De 1 a 1.000.00 de usuários
De 1 a 1.000.00 de usuáriosDe 1 a 1.000.00 de usuários
De 1 a 1.000.00 de usuários
 

Último

Último (6)

ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 

Erlang e Elixir por uma web mais feliz