O que esperar do Ruby 2.6?

em Artigos, Ruby.

O Ruby 2.5 foi lançado em dezembro de 2017 e pudemos ver algumas das features novas nesse post. Mesmo sendo uma versão muito recente, já temos testes para a futura versão do Ruby, a 2.6, que está no modo preview.

O Ruby 2.6 já tem algumas features novas e pontos de melhoria com relação a versões anteriores, mas neste post vou focar em um único ponto de melhoria que, em minha opinião, além de ser uma grande feature, revolucionará a performance de suas APPs.

A versão traz uma nova forma de rodar o Ruby, utilizando JIT (Just-in-time) compiler.

O JIT do Ruby é diferente de outros compiladores. Ele funcionará de maneira unidirecional e, desse modo, o compilador irá transcrever código C. Esse código será transformado em um código nativo através do processo de compilação comum do compilador C.

// Entendendo o JIT

Para entendermos melhor o que é o JIT, precisamos falar um pouco sobre linguagens compiladas e interpretadas. Normalmente quando temos nosso primeiro contato com programação (que, na maioria das vezes, acontece no meio acadêmico) é com linguagens que trabalham com compiladores. Podemos tomar como exemplo o C e C++.

Nessas linguagens você escreve o código e, antes de rodar o programa, precisa compilá-lo, transformando-o em linguagem de máquina. Os programas escritos nessas linguagens tendem a performar melhor do que em linguagens que não usam compilador.

Já nos casos do Ruby, Python e PHP o código é interpretado. Em geral, linguagens interpretadas carregam todo o seu interpretador na memória e, conforme vão executando, traduzem as instruções de sua linguagem para instruções em linguagem de máquina. Sendo assim, essas linguagens utilizam a forma menos eficiente de execução de um programa, pois os traduzem o tempo todo.

O Java e C# buscaram um meio termo entre as linguagens compiladas e interpretadas e pré-compilam os arquivos .class e os assemblies respectivamente. Nesses casos o arquivo é compilado para um bytecode intermediário e na hora da execução, esse bytecode é transformado em linguagem de máquina; tornando o tempo de resposta muito mais rápido do que as linguagens interpretadas.

O JIT se caixa no terceiro caso. Ele acontece em tempo de execução, mas ao invés de traduzir o código nativo da linguagem em todas as requisições, ele traduz as instruções do bytecode para linguagem de máquina e faz isso uma vez só.

Nesse primeiro momento, o principal propósito do JIT no Ruby é de ser testado e validar se realmente funcionará nas plataforma, além de medir os riscos de segurança que ele pode causar.

// Quer testar o Ruby 2.6?

Ficou curioso? Quer testar esse cara? Então dê uma olhada nesse repositório do Github; fiz um Dockerfile com o Ruby 2.6 e o 2.5 para que você possa testar ambas versões e brincar um pouco.

Em outros posts falarei sobre outras novidades do Ruby 2.6 e você já vai ter como testes.

Fique ligado para a nova era da super performance do Ruby. Ficou com alguma dúvida? Deixe um comentário =)

Você também pode gostar