Erlang e Elixir por uma web mais feliz

Preview:

Citation preview

Erlang e Elixir

Por uma web mais feliz

Bruno Henrique - Garu

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 balanceetc.

cacheSlave

MasterProxy

E dependendo da tecnologia escolhida

pode haver desperdício.

Exemplo

Erlang - Distributed

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 Armstronghttp://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

Elixir

O poder da Erlang VM com uma bela sintaxe.

Sintaxe

Erlang

https://speakerdeck.com/plataformatec/elixir

Elixir

https://speakerdeck.com/plataformatec/elixir

Protocol

Macros

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.comgithub.com/brunohenrique

@GaruHenr

Obrigado!

Recommended