Ruby está vivo e bem e pensando nos próximos 25 anos
NotíciaA comunidade global Ruby é sinônimo de simpatia e suporte, que usa a frase "Matz é legal e por isso somos legais", que é comumente abreviado para MINASWAN. Matz sabe como encantar seu público, e ele iniciou sua palestra na Conferência Bath Ruby com o comentário: “Nós banho de amor japonês, tomamos banhos todos os dias em vez de tomar banho, então isso significa que Banho é bom, esta é uma cidade muito agradável, então somos legais. BINSWAN " Crédito: Dan Bartlett
Como o software nasce? Não é exatamente a primeira pergunta que você espera ouvir por um orador em uma conferência de programação, mas este é o genial criador japonês da linguagem de programação Ruby, Yukihiro. “Matz” Matsumoto, e ele está falando para mais de 500 desenvolvedores de Ruby na conferência anual de dois anos da Ruby..
A linguagem Ruby comemorou 25 anos em fevereiro, embora oficialmente o primeiro lançamento de Ruby, 0,95, foi em dezembro de 1995. Em resposta à sua própria questão filosófica, Matz sugere que o software nasce quando é nomeado. No caso de Ruby que foi dois anos antes, em 24 de fevereiro de 1993, daí a grande celebração em Tóquio e através das mídias sociais. Matz diz que queria nomeá-lo depois de uma jóia: “Ruby era curto, Ruby era linda e mais cara, então eu chamei minha linguagem de Ruby,” ele diz, brincando com sua comunidade.
No entanto, Matz não estava no Reino Unido pela primeira vez em cinco anos apenas para comer bolo de aniversário. Ruby pode ter atingido a maturidade, mas ainda há dúvidas sobre se pode sobreviver mais 25 anos. Como seu criador, a linguagem Ruby é muito agradável e atrai seguidores apaixonados. Sua sintaxe, por exemplo, é muito legível, mas expressiva de uma maneira concisa e como uma linguagem de programação dinâmica, reflexiva, orientada a objetos e de propósito geral, é intuitiva e fácil de aprender. Ruby tenta não restringir quem usa ou como o Matz é citado frequentemente dizendo: “Ruby é projetado para tornar os programadores felizes.”
Mas nem todo mundo é feliz. A popularidade da linguagem Ruby tem sido sustentada há muitos anos pelo sucesso do framework de aplicações web Ruby on Rails (RoR), que dominou o cenário web, particularmente entre startups que queriam algo que lidasse com grande parte do trabalho pesado. Esse aumento dominante fez com que Ruby subisse para o quinto lugar no RedMonk Language Rankings em 2012, que usa uma combinação de classificações de idiomas GitHub e Stack Overflow para avaliar a popularidade de um idioma, [desde então ele caiu para oitavo].
Mas RoR, embora popular, não é o superstar que foi e tem enfrentado uma concorrência acirrada como questões como o dimensionamento se tornaram uma preocupação maior para as empresas da web. O framework JavaScript Node.js, por exemplo, se tornou popular, já que requer menos memória para lidar com inúmeras conexões por causa de suas funções de callback..
A posição de Ruby entre as dez maiores linguagens de programação caiu lentamente no ranking da RedMonk desde 2012 - no Índice de popularidade de idiomas Tiobe - caiu entre os dez primeiros - mas isso é provavelmente um reflexo de ter atingido a maturidade e o declínio do domínio a estrutura de aplicativo da web Ruby on Rails.
(Imagem: © Redmonk.com)É claro que Matz está ciente de que a adoção de qualquer linguagem de programação é estimulada pelos projetos e estruturas que crescem a partir da comunidade e do ecossistema de uma língua - o RoR era um exemplo surpreendente disso - e não das próprias linguagens, mesmo se Ruby criasse uma muito amor de seus usuários. Então, enquanto ele estava ansioso para expressar seu pesar por erros do passado que ele havia feito em sua linguagem na Conferência Bath Ruby, ele também queria definir o caminho a seguir para resolver os problemas de desempenho e dimensionamento que os desenvolvedores têm para não usar Ruby.
A abordagem de Matz para abordar as questões-chave também está de olho em duas tendências-chave que ele vê para o futuro: escalabilidade e, o que ele chamou de "companheiro inteligente"..
Para combater a escalabilidade e criar maior produtividade, Matz acredita, “Execução mais rápida, menos código, equipe menor [são] as chaves para a produtividade.”
Computadores estão ficando mais rápidos, mas não é o suficiente, “precisamos de execução mais rápida porque precisamos processar mais dados e mais tráfego, reconhece Matz. “Estamos chegando ao limite do desempenho dos núcleos. É por isso que o Ruby 3.0 tem o objetivo de ser três vezes mais rápido que o Ruby 2.0” ou o que o Matz chama de 'Ruby3x3'. “Isso é fácil de dizer” Matz admitiu e nos dias de 1,8, ele diz que Ruby foi “muito devagar” e foi um erro.
O trabalho de Koichi Sasada no YARV (Yet another Ruby VM) melhorou o desempenho do Ruby 1.9, e “Desde então,” diz Matz, “temos trabalhado duro para melhorar o desempenho da máquina virtual, mas não é suficiente.”
Hora do JIT
Para melhorar ainda mais o desempenho, o Ruby está introduzindo a tecnologia JIT (Just-In-Time), que já é usada pela JVM e outros idiomas. “Então criamos um protótipo deste compilador JIT para que este ano, provavelmente no dia de Natal, o Ruby 2.6 seja lançado,” Matz confirmado.
Você pode tentar a implementação inicial do compilador MJIT no 2.6 preview1. Atualmente, você pode verificar e compilar programas Ruby em código nativo com a opção --jit, mas Matz diz que é “não otimizado” embora para “pelo menos trabalho intensivo de CPU, ele roda duas vezes mais rápido que o Ruby 2.0,” que ele diz “Parece promissor e oferece muito espaço para melhorar o desempenho do compilador JIT”. Para tarefas intensivas de CPU, em particular, Matz parecia confiante de que seria capaz de alcançar a melhoria do desempenho em três vezes..
De acordo com os comentários encontrados no código MJIT por John Hawthorn, o protótipo JIT atual tem uma abordagem bastante incomum, pois usa compiladores C, GCC e LLVM Clang, para a implementação e, embora o código Ruby seja single-threaded, o MJIT é compilado em um segunda linha.
Provavelmente a explicação geral mais clara de como o MJIT funciona é fornecida por Shannon Skipper:
“Com o MJIT, certas instruções do Ruby YARV são convertidas em código C e colocadas em um arquivo .c, que é compilado pelo GCC ou Clang em um arquivo de biblioteca dinâmica .so. O RubyVM pode usar esse código nativo pré-compilado em cache a partir da biblioteca dinâmica na próxima vez que o RubyVM vir a mesma instrução YARV.
Escalabilidade, Matz também acredita, deveria significar criar menos código “mais código é mais manutenção, mais depuração, mais tempo, menos produtividade,” e ele brincou “mais pesadelo.”
Yukihiro “Matz” Matsumo, o cientista da computação japonês que criou Ruby, estava no Reino Unido para comandar o primeiro Hack Challenge do país por aspirantes a commiters para o idioma, realizado no Cookpad em Bristol, e para falar na Conferência Bath Ruby..
No entanto, menos código Ruby não significará mudanças significativas na sintaxe da linguagem. Em grande parte porque há pouco espaço para mudanças: “nós ficamos sem personagens. Quase todos eles são usados,” diz Matz.
Sendo um expoente do desenvolvimento sem ego, ele também não está preparado para mudar a sintaxe por causa de sua auto-estima e ver programas Ruby existentes quebrados, então ele teve o cuidado de dizer: “nós não vamos mudar a sintaxe do Ruby tanto assim.”
O processo deve ser tratado por equipes menores também, de acordo com Matz, para lidar com a escalabilidade e aumentar a produtividade: “Se o seu time for maior que o fato, eles podem comer duas pizzas,” citando CEO da Regra Two-Pizza do Amazon Jeff Bezos “então sua equipe é muito grande.” Francamente, isso pode depender de quem está no seu time e o quanto eles gostam de pizza, mas a ideia, diz Matz, é baseada na experiência pessoal., “se sua equipe é maior, então você precisa de mais comunicação e comunicação em si é o custo.”
Mais abstração
Houve debates bastante acirrados nos últimos anos sobre a necessidade de mais abstrações de Ruby que fornecessem serviços para os desenvolvedores construírem aplicativos adequados a diferentes campos, por isso foi interessante ouvir Matz dizer que Ruby precisava “mais abstração”, e mencionando Ruby on Rails usando a abstração Model-View-Controller (MVC) como exemplo. O criador do Ruby não achou que eles eram perfeitos “mas eles fornecem o tipo de abstração que é vital para a produtividade no futuro.”
Uma abstração chave que ele elaborou foi um projeto de abstração simultâneo chamado Guild.
“Uma coisa que eu lamento no design do Ruby foi o thread [...] é muito primitivo,” Matz admite. Mas Ruby é uma vítima de seu próprio sucesso: A linguagem é usada por muitas pessoas, então Matz sente que é tarde demais para remover o thread.
“Eu acho que não há problema em incluir uma nova abstração,” ele se aventurou “e desencorajar o uso de fios” no futuro. "Guild é a experiência de Ruby para fornecer uma abordagem melhor. A guilda é totalmente isolada,” Matz disse à platéia em Bath.
“Basicamente, não temos um estado compartilhado entre Guildas. Isso significa que não precisamos nos preocupar com o compartilhamento de estados, de modo que não precisamos nos preocupar com os bloqueios ou exclusividades mútuas. Entre Guildas nos comunicamos com um canal ou fila.”
Matz espera enviar a abstração concorrente do Guild em Ruby 2.7 ou 2.8.
Outro projeto de codinome que Ruby tem em andamento é o Steep. Esta é uma tentativa de análise de tipo estático para o Ruby: “É difícil analisar as informações do tipo Ruby, porque Ruby é uma linguagem tipada dinamicamente, então você pode fazer qualquer coisa com todos os tipos,” explicou Matz. Alguns subconjuntos de Ruby podem ser digitados estaticamente, então Matz diz que eles podem adicionar essas verificações de tipo estático, que são “como se fosse uma informação do tipo definido pelo usuário em TypeScript […]. Vamos inferir o máximo possível e estamos tentando obter as informações desses arquivos externos definidos pelo tipo ou da análise do tipo de perfil de tempo de execução… ”
Usando esta análise, Matz sugere, os desenvolvedores serão capazes de detectar mais erros em tempo de compilação, “Nós não vamos implementar 100% de detecção de segurança, não é possível para Ruby, mas podemos detectar 20-40% de erros,” que Matz diz que é muito melhor do que nada.
Ruby não se sentiu muito morta na conferência de Bath Ruby, onde mais de 500 desenvolvedores se reuniram para dois dias de palestrantes e workshops (e karaokê). A conferência anual é o maior evento de desenvolvimento de Ruby no Reino Unido e o primeiro evento em cinco anos para hospedar Yukihiro “Matz” Matsumoto, o criador do Ruby.
(Imagem: © Bath Ruby)Matsumoto também tocou em Ruby se tornando um “companheiro mais inteligente” bem como melhor amigo do programador. “Estamos agora no começo de computadores mais inteligentes, por exemplo, o RuboCop [analisador de código estático] é uma maneira de ajudá-lo,” embora, Matz comentou muita risada na platéia, ele é “não é um grande fã do livro de regras padrão da RuboCop.” Matz sugeriu que, no futuro, quando você compilar um programa “Ruby poderia sugerir [por exemplo] 'Você chama esse método com uma string de argumento, mas [você] espera chamar esse método com o inteiro'”. Falando com ele depois de sua palestra, Matz elaborou um pouco mais sobre suas esperanças para a interatividade da programação, que ele concordou que soavam como o Jarvis de Tony Stark. Matz diz que ele essencialmente quer ver “um AI [que] irá interagir comigo para organizar um software melhor.”
Cuidado com o vão
A mudança traz consigo a possibilidade de um software que não funciona mais como pretendido ou em tudo. É uma preocupação que assombra o Matz de erros do passado: “No passado fizemos uma grande lacuna, por exemplo entre 1,8 e 1,9,” diz Matz. “Fizemos uma grande lacuna e introduzimos muitas mudanças de quebra, de modo que nossa comunidade foi dividida em duas por cinco anos.”
Embora esse tipo de coisa tenha acontecido no passado, sendo o exemplo clássico do Python 2 e do Python 3, Matz vê isso como uma tragédia: “não vamos cometer esse erro novamente, então faremos uma evolução contínua. Nós vamos adicionar o compilador JIT a 2.6 e não esperar até o Ruby 3.0, vamos adicionar algum tipo de abstração simultânea no Ruby 2.7 a 2.8, mas isso não será uma mudança. […] Nós vamos ter isso para que todo programa Ruby 2 seja executado em Ruby 3.”
Reverter a atual trajetória lenta de Ruby para baixo não será uma tarefa fácil e Matz parece perceber isso. Comentando sobre a exibição dos resultados da pesquisa recente do Stack Overflow Developer na manhã do keynote, seu sorriso desapareceu rapidamente: “Go e Rust são os idiomas mais amados e Ruby não está na lista, infelizmente. Eu acredito que o Ruby ficará quente novamente no futuro. As pessoas adoram novas tecnologias. Dez anos atrás Ruby estava muito quente, por causa do Rails. Nos dias de hoje o Ruby não é considerado quente, mas é estável.“
Ruby, no entanto, cruzou essa lacuna até a maturidade e Matz não tem intenção de desistir: “Ruby é uma boa linguagem para ajudar você a se tornar produtivo e eu quero que Ruby seja assim para sempre, se possível. Isso significa que temos que evoluir continuamente para sempre, então não podemos parar; nós não podemos parar”
Parte desse momento se reflete no primeiro Desafio Ruby Hack realizado fora do Japão. Isso aconteceu na semana passada na nova sede internacional da Cookpad, uma plataforma de compartilhamento de receitas que emprega extensivamente desenvolvedores de Ruby em Bristol. Esses desafios são uma oportunidade para os committers iniciantes aprenderem como estender os recursos do Ruby, corrigir erros e melhorar o desempenho do Ruby.
De acordo com Miles Woodroffe, CTO da Cookpad, o principal patrocinador da conferência Bath Ruby, este hack foi focado no Ruby Interpreter que instrui os computadores sobre como executar programas escritos em código Ruby..
Um dos objetivos do hack permite que os participantes contribuam diretamente para a próxima versão do Intérprete Ruby.
À medida que o lançamento de Ruby 3 se aproxima, previsto não oficialmente para 2020, fica claro que o Matz quer continuar fornecendo uma ferramenta que ajuda você a se concentrar nos aspectos divertidos e agradáveis da programação..
Duas coisas são aparentes quando se fala com Yukihiro “Matz” Matsumoto Primeiro, que ele fará tudo o que puder para permitir que Ruby sobreviva e prospere e, segundo, que esteja se divertindo completamente fazendo o que faz. Ele é apaixonado por Ruby e sua comunidade e sua visão é bem simples: Programação é divertida, ele se divertiu nos últimos 25 anos fazendo Ruby e com 52 anos agora, ele espera poder passar os próximos 25 anos tendo muito divertido trabalhar na linguagem que ele sonhou e escreveu em um caderno - agora perdido - aos 17 anos.
- Este é um extrato de um artigo para a revista mensal User and Developer do Linux, a respeitada autoridade sobre o GNU / Linux e o ecossistema de código aberto e gratuito para entusiastas do Linux, profissionais de TI e desenvolvedores. Assine hoje e receba 5 edições por £ 5 (somente no Reino Unido. A oferta termina em 30 de abril de 2018).