Este documento discute como combinar Ruby e Erlang para superar suas deficiências individuais. Ele propõe criar uma arquitetura que permita que as linguagens se beneficiem mutuamente, com Erlang fornecendo programação distribuída e desempenho, enquanto Ruby oferece produtividade e facilidade de desenvolvimento. A biblioteca rinterface é apresentada como uma forma de facilitar a comunicação entre os nós Erlang e aplicações Ruby.
3. Quem?
• Desenvolvedor web
• Ex Administrador de redes
• Desenvolvedor e Pesquisador Abril
• http://nuxlli.com.br
• @nuxlli
4. O que queremos?
Criar uma arquitetura que junte as duas
linguagens de forma que uma possa
favorecer a outra e tentar eliminar
suas deficiências.
5. Agenda
• Linguagens: Vantagens e
Desvantagens
• Onde usamos
• Erlang distribuída
• Lib para facilitar a vida
• Futuro da lib
6.
7. Erlang - Vantagens
• Suporte à concorrência (no threads)
• Hot Swapping Code nativo
• Distribuída
• Feita para ambientes Real Time
• Libs de alta performance
8. Erlang - Desvantagens
• Curva de aprendizado muito alta
(paradigma funcional)
• Dificuldade para criação de
framework web
• Code base complexo
• Poucos desenvolvedores
9.
10. Ruby - Vantagens
• Curva de aprendizado baixa
• Menos é mais
• Comunidade de desenvolvedores
grande
11. Ruby - Desvantagens
• Desempenho
• Pouca aceitação no mundo EE
• Complexidade para desenvolver
aplicações distribuídas
12. O que elas ganham?
• Erlang
• Produtividade
• Facilidade em escrever testes
• Ruby
• Performance
• Programação distribuída
20. Problemas identificados:
• Fora do padrão Erlang
• Manutenção, 3 pontos de mudança:
• Nós Erlang
• Servidor Erlang (API HTTP)
• Aplicação Ruby on Rails
25. Como funciona?
Em Erlang:
rpc:call(smath@localhost, math, add, [10, 20])
Em Ruby:
Erlang::Node.rpc(:smath,:math,:add, [10,20])
26. Status:
• O que faz:
• Chamadas rpc aos nós erlang
• Tratamento de tipos: inteiros, flutuantes, atoms,
tuplas, listas e strings
• API simples para execução de chamadas
• O que queremos:
• Comportar como um nó Erlang
• Facilities para rodar testes
• DSL para chamadas e respostas
31. Futuro - Server Node
Erlang::Mod.new :math do
def add x, y
x + y
end
end
module Fib
def fib(n)
n < 2 ? n : fib(n-1) + fib(n-2)
end
end
Erlang::Mod.new :fib => Fib