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.h...
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
E...
Referências
Death by Accidental Complexity - http://www.infoq.com/presentations/Death-by-Accidental-Complexity
Systems tha...
squall.bruno@gmail.com
github.com/brunohenrique
@GaruHenr
Obrigado!
Próximos SlideShares
Carregando em…5
×

Erlang e Elixir por uma web mais feliz

2.155 visualizações

Publicada em

Publicada em: Tecnologia

Erlang e Elixir por uma web mais feliz

  1. 1. Erlang e Elixir Por uma web mais feliz
  2. 2. Bruno Henrique - Garu
  3. 3. https://www.facebook.com/groups/natalonrails
  4. 4. https://www.facebook.com/wdevtips
  5. 5. Motivação
  6. 6. Necessidade de aprender coisas novas
  7. 7. Estudar o paradigma funcional
  8. 8. Criar um sistema Realtime para atender milhares de usuários
  9. 9. Mas, entre todas as linguagens funcionais, porque Erlang?
  10. 10. Um pouco de história...
  11. 11. Por que uma nova linguagem?
  12. 12. Contexto no qual Erlang foi criada
  13. 13. Switch
  14. 14. Nenhuma linguagem atendia a todos os requisitos ...
  15. 15. ... alta concorrência
  16. 16. ... tolerância a falhas
  17. 17. ... alta disponibilidade
  18. 18. Isso nos anos 80 ...
  19. 19. ... então por que usar agora?
  20. 20. Nosso contexto
  21. 21. Server
  22. 22. Fazendo a coisa certa em um contexto diferente.
  23. 23. Entendendo suas features na prática
  24. 24. Como atender uma grande quantidade usuários ?
  25. 25. Podemos escalar na horizontal ?
  26. 26. Podemos ...
  27. 27. ... mas existe um limite tanto físico quanto financeiro
  28. 28. Fazer isso nem sempre é uma coisa simples
  29. 29. Load balance etc. cache Slave Master Proxy
  30. 30. E dependendo da tecnologia escolhida pode haver desperdício.
  31. 31. Exemplo
  32. 32. https://speakerdeck.com/plataformatec/elixir
  33. 33. Erlang - Distributed
  34. 34. https://speakerdeck.com/plataformatec/elixir
  35. 35. Como manter um número elevado de usuários simultâneos?
  36. 36. Agora começa a concorrência.
  37. 37. Mas o que é concorrência?
  38. 38. Two queues and one coffee machine. Joe Armstrong http://joearms.github.io/2013/04/05/concurrent-and-parallel-programming.html
  39. 39. Ruby, Python, Java, PHP, C# - O que elas possuem em comum?
  40. 40. Orientação a Objeto
  41. 41. E um forte conceito de estado mutável.
  42. 42. Estado e concorrência não funcionam muito bem juntos.
  43. 43. Como lidamos com concorrência?
  44. 44. Podemos usar threads
  45. 45. O que é uma thread?
  46. 46. Temos algum problema com thread?
  47. 47. Sim, estado compartilhado é um grande problema.
  48. 48. Soluções?
  49. 49. locks
  50. 50. transactional memory
  51. 51. message-passing
  52. 52. E é assim que Erlang funciona.
  53. 53. Quando não temos estado compartilhado fica mais fácil
  54. 54. Exemplo
  55. 55. https://gist.github.com/brunohenrique/5428281#file-no_side_effects-rb
  56. 56. Elixir
  57. 57. O poder da Erlang VM com uma bela sintaxe.
  58. 58. Sintaxe
  59. 59. Erlang https://speakerdeck.com/plataformatec/elixir
  60. 60. Elixir https://speakerdeck.com/plataformatec/elixir
  61. 61. Protocol
  62. 62. http://elixir-lang.org/getting_started/4.html
  63. 63. Macros
  64. 64. http://elixir-lang.org/getting_started/5.html
  65. 65. 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
  66. 66. 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
  67. 67. squall.bruno@gmail.com github.com/brunohenrique @GaruHenr Obrigado!

×