learnxinyminutes-docs/pt-br/ruby-ecosystem.md
2024-12-08 23:21:12 -07:00

7.2 KiB

contributors translators
Jon Smock
http://github.com/jonsmock
Rafal Chmiel
http://github.com/rafalchmiel
Claudson Martins
http://github.com/claudsonm

Pessoas utilizando Ruby geralmente têm uma forma de instalar diferentes versões do Ruby, gerenciar seus pacotes (ou gemas) e as dependências das gemas.

Gerenciadores Ruby

Algumas plataformas possuem o Ruby pré-instalado ou disponível como um pacote. A maioria dos "rubistas" não os usam, e se usam, é apenas para inicializar outro instalador ou implementação do Ruby. Ao invés disso, rubistas tendêm a instalar um gerenciador para instalar e alternar entre diversas versões do Ruby e seus ambientes de projeto.

Abaixo estão os gerenciadores Ruby mais populares:

  • RVM - Instala e alterna entre os rubies. RVM também possui o conceito de gemsets para isolar os ambientes dos projetos completamente.
  • ruby-build - Apenas instala os rubies. Use este para um melhor controle sobre a instalação de seus rubies.
  • rbenv - Apenas alterna entre os rubies. Usado com o ruby-build. Use este para um controle mais preciso sobre a forma como os rubies são carregados.
  • chruby - Apenas alterna entre os rubies. A concepção é bastante similar ao rbenv. Sem grandes opções sobre como os rubies são instalados.

Versões do Ruby

O Ruby foi criado por Yukihiro "Matz" Matsumoto, que continua a ser uma espécie de BDFL, embora isso esteja mudando recentemente. Como resultado, a implementação de referência do Ruby é chamada de MRI (Matz' Reference Implementation), e quando você ver uma versão do Ruby, ela está se referindo a versão de lançamento do MRI.

As três principais versões do Ruby em uso são:

  • 2.0.0 - Lançada em Fevereiro de 2013. Maioria das principais bibliotecas e suporte a frameworks 2.0.0.
  • 1.9.3 - Lançada em Outubro de 2011. Está é a versão mais utilizada pelos rubistas atualmente. Também aposentada.
  • 1.8.7 - O Ruby 1.8.7 foi aposentado.

A diferença entre a versão 1.8.7 para 1.9.x é muito maior do que a da 1.9.3 para a 2.0.0. Por exemplo, a série 1.9 introduziu encodes e uma VM bytecode. Ainda existem projetos na versão 1.8.7, mas eles estão tornando-se uma pequena minoria pois a maioria da comunidade migrou para a versão, pelo menos, 1.9.2 ou 1.9.3.

Implementações Ruby

O ecossistema Ruby conta com várias diferentes implementações do Ruby, cada uma com pontos fortes e estados de compatibilidade. Para ser claro, as diferentes implementações são escritas em diferentes linguagens, mas todas elas são Ruby. Cada implementação possui hooks especiais e recursos extra, mas todas elas executam arquivos normais do Ruby tranquilamente. Por exemplo, JRuby é escrita em Java, mas você não precisa saber Java para utilizá-la.

Muito maduras/compatíveis:

  • MRI - Escrita em C, esta é a implementação de referência do Ruby. Por definição, é 100% compatível (consigo mesma). Todos os outros rubies mantêm compatibilidade com a MRI (veja Ruby Spec abaixo).
  • JRuby - Escrita em Java e Ruby, esta implementação robusta é um tanto rápida. Mais importante ainda, o ponto forte do JRuby é a interoperabilidade com JVM/Java, aproveitando ferramentas JVM, projetos, e linguagens existentes.
  • Rubinius - Escrita principalmente no próprio Ruby, com uma VM bytecode em C++. Também madura e rápida. Por causa de sua implementação em Ruby, ela expõe muitos recursos da VM na rubyland.

Medianamente maduras/compatíveis:

  • Maglev - Construída em cima da Gemstone, uma máquina virtual Smalltalk. O Smalltalk possui algumas ferramentas impressionantes, e este projeto tenta trazer isso para o desenvolvimento Ruby.
  • RubyMotion - Traz o Ruby para o desenvolvimento iOS.

Pouco maduras/compatíveis:

  • Topaz - Escrita em RPython (usando o conjunto de ferramentas PyPy), Topaz é bastante jovem e ainda não compatível. Parece ser promissora como uma implementação Ruby de alta performance.
  • IronRuby - Escrita em C# visando a plataforma .NET, o trabalho no IronRuby parece ter parado desde que a Microsoft retirou seu apoio.

Implementações Ruby podem ter seus próprios números de lançamento, mas elas sempre focam em uma versão específica da MRI para compatibilidade. Diversas implementações têm a capacidade de entrar em diferentes modos (1.8 ou 1.9, por exemplo) para especificar qual versão da MRI focar.

Ruby Spec

A maioria das implementações Ruby dependem fortemente da Ruby Spec. Ruby não tem uma especificação oficial, então a comunidade tem escrito especificações executáveis em Ruby para testar a compatibilidade de suas implementações com a MRI.

RubyGems

RubyGems é um gerenciador de pacotes para Ruby mantido pela comunidade. RubyGems vem com o Ruby, portanto não é preciso baixar separadamente.

Os pacotes do Ruby são chamados de "gemas", e elas podem ser hospedadas pela comunidade em RubyGems.org. Cada gema contém seu código-fonte e alguns metadados, incluindo coisas como versão, dependências, autor(es) e licença(s).

Bundler

Bundler é um gerenciador de dependências para as gemas. Ele usa a Gemfile de um projeto para encontrar dependências, e então busca as dependências dessas dependências de forma recursiva. Ele faz isso até que todas as dependências sejam resolvidas e baixadas, ou para se encontrar um conflito.

O Bundler gerará um erro se encontrar um conflito entre dependências. Por exemplo, se a gema A requer versão 3 ou maior que a gema Z, mas a gema B requer a versão 2, o Bundler irá notificá-lo que há um conflito. Isso se torna extremamente útil quando diversas gemas começam a referenciar outras gemas (que referem-se a outras gemas), o que pode formar uma grande cascata de dependências a serem resolvidas.

Testes

Testes são uma grande parte da cultura do Ruby. O Ruby vem com o seu próprio framework de teste de unidade chamado minitest (ou TestUnit para Ruby versão 1.8.x). Existem diversas bibliotecas de teste com diferentes objetivos.

  • TestUnit - Framework de testes "Unit-style" para o Ruby 1.8 (built-in)
  • minitest - Framework de testes para o Ruby 1.9/2.0 (built-in)
  • RSpec - Um framework de testes que foca na expressividade
  • Cucumber - Um framework de testes BDD que analisa testes Gherkin formatados

A comunidade Ruby orgulha-se de ser uma comunidade aberta, diversa, e receptiva. O próprio Matz é extremamente amigável, e a generosidade dos rubistas em geral é incrível.