A Conferência Central da Rússia em Ruby, em 28 de setembro, marca 10 anos. Este ano, o
RubyRussia tem um novo local, com até 4 fluxos de relatórios selecionados, comunicação e, claro, a lendária pós-festa! Entre os palestrantes estão Yukihiro Matsumoto, Takashi Kokubun, Xavier Noria, Nick Sutterer, Genadi Samokovarov e muito mais!
Em preparação, conversamos com palestrantes sobre Ruby, trabalho e vida. Hoje publicamos material em que
Dmitry Matveyev (gerente de projetos em
Evrone ) faz perguntas a
Takashi Kokubun .
O palestrante RubyRussia 2019, um otimizador para o compilador Ruby JIT, suporta Haml e ERB, um engenheiro de back-end da ArmTreasure Data.Diga-me o que será discutido no seu relatório na conferência?Sobre o trabalho no compilador JIT. Eu gostaria de focar em três pontos. A primeira é a função embutida. A função deve estar "limpa", sem efeitos colaterais, para que seu corpo possa estar alinhado. Se houver muitas funções, o compilador começará a funcionar lentamente. Vou descrever como resolver esse problema.
O segundo ponto diz respeito à otimização do posicionamento de objetos na memória. Em aplicativos grandes e complexos como o Rails, você precisa criar muitos objetos em uma solicitação. Se você otimizar esse processo, poderá melhorar o desempenho. Geralmente, os objetos são criados na pilha. Portanto, você precisa gerenciar estruturas de dados complexas. Você também precisa chamar o coletor de lixo para remover objetos não utilizados. E se colocarmos objetos na pilha, simplesmente aumentaríamos o ponteiro da pilha ao adicionar um objeto e diminuiríamos quando o objeto precisar ser excluído. O uso da pilha para armazenar objetos é mais rápido por si só, além do coletor de lixo começar a funcionar mais rapidamente. Mas, para usar a pilha, precisamos garantir que os objetos não sejam usados em outros lugares. Para esse fim, usamos uma técnica chamada "análise de escape". Precisamos analisar cada método e garantir que cada um de seus objetos internos não seja usado externamente e não seja retornado como resultado do método atual. Se pudermos fazer isso, podemos colocar objetos na pilha, e isso aumentará a produtividade. Minha idéia é adicionar metadados para obter instruções. Agora, isso é um experimento, mas vou fazer uma solicitação para o mestre com esse código em um futuro próximo.
O terceiro ponto é sobre a otimização do envio de chamadas de função no JIT. Atualmente, esse processo gera uma forte ramificação da lógica, o que afeta adversamente o mecanismo de previsão de ramificação do processador. Isso diminui a velocidade do processador como um todo. Precisamos simplificar essa lógica, ou seja, reduzir o número de condições. Atualmente, estou explorando como fazer isso.
Este é um relatório grave, com muitos códigos e conceitos! Parece ser difícil?Eu acho que a maioria das pessoas não implementa compiladores por conta própria, e eu entendo que isso pode ser difícil. Mas tentarei explicar tudo da maneira mais simples possível com exemplos e ilustrações. Ou seja, meu relatório deve ser compreensível para pessoas sem experiência especial no desenvolvimento de compiladores.
É possível usar o novo compilador na produção agora e em quais casos?A idéia é fazer com que os aplicativos RoR sejam executados mais rapidamente. Por exemplo, minha empresa atual se beneficiará disso. Mas eu não diria que tudo está pronto para produção. Acontece que apenas os aplicativos RoR não são particularmente acelerados. Isso ocorre porque esses aplicativos geralmente são grandes e geram muito código C, o que leva ao uso ineficiente do armazenamento em cache no processador. Eu tenho algumas idéias sobre como corrigir isso. É nisso que estou trabalhando agora. Mas agora meu compilador pode ser útil para pequenas aplicações. Por exemplo, eu sei que a gema karafka trabalha mais rápido com ela do que sem ela.
Eu li que o compilador JIT já foi derramado no mestre do brunch de linguagem Ruby e está disponível desde a versão 2.6. É isso mesmo?Sim, minha solicitação de mesclagem já foi aceita. Mas esta é a primeira versão e ainda há muito trabalho a ser feito. As melhorias já estarão no Ruby 2.7 e ainda mais no Ruby 3.
Diga-me como você começou a escrever em Ruby?No começo, trabalhei com o Objective-C, mas não gostei muito. Era necessário escrever um aplicativo de back-end e os amigos recomendaram o Ruby On Rails. Fiz exatamente isso - e fiquei muito satisfeito com o resultado! Gostei da sintaxe simples e compreensível da linguagem e comecei a estudá-la e a usá-la mais profundamente.
Você está escrevendo Ruby no trabalho agora?Estive na Treasure Data nos últimos dois anos. É uma plataforma que rastreia dados do usuário em aplicativos clientes. Este projeto foi originalmente escrito em Ruby On Rails, e meu post foi chamado "Desenvolvedor Ruby". Então eu escrevi muito em Ruby. Mas agora estou trabalhando em alguns serviços distribuídos escritos em Java e Kotlin, e às vezes também uso Python.
O projeto Treasure Data está associado a alta carga e big data. Mas Ruby não é o idioma mais rápido. Como você conseguiu criar um aplicativo de alta carga que funciona com big data na plataforma RoR?O aplicativo registra os dados do usuário e os salva no armazenamento. Ele também fornece uma interface para consultar dados em idiomas como Hive e Presto, e um painel de administração. Não foi um problema escrever tudo sobre trilhos. Além disso, criamos uma infraestrutura competente e temos a capacidade de aumentar os recursos de memória e processador em picos de carga. O principal problema que temos com o Ruby é que ele não é adequado para computação paralela. E temos que usar o Kotlin para esse fim.
Por que você ama Ruby? Se houvesse um projeto que pudesse ser implementado no Ruby e no Python, qual deles você escolheria?Eu gosto da sintaxe limpa do Ruby, é muito legível e intuitiva. Isso permite que você escreva com rapidez e facilidade a lógica do aplicativo, o que é importante do ponto de vista comercial. Esta é uma linguagem puramente objetiva, eu realmente aprecio isso. Tenho experiência em Python, mas isso não me parece tão intuitivo. Eu o escolheria apenas para projetos de aprendizado de máquina.
Outra coisa em que você está trabalhando ultimamente é o mecanismo de modelo Haml ...Eu trabalhei em Haml e ERB em um trabalho anterior. Agora, não dedico muito tempo a isso, mas às vezes olho para as pull-quests nesses projetos.
O que você acha das perspectivas de mecanismos de modelo como Haml, Slim ou ERB, em geral, dado que no mundo moderno há uma tendência de separar completamente a parte traseira e a frente em dois aplicativos diferentes e fornecer a formação de páginas HTML completamente ao JavaScript? Ou seja, nessa configuração, os mecanismos de modelo se tornam completamente desnecessários?Concordo que, para tarefas com uma interface de usuário complexa, faz sentido colocar essa lógica em um aplicativo separado. Isso precisa ser feito para competir com outras empresas, que estão aumentando cada vez mais a complexidade e a funcionalidade da interface do usuário. Mas ainda há necessidade de soluções mais simples e, mais importante, mais baratas que façam sentido escrever no RoR com mecanismos de modelo clássicos. Assim, eles ainda estão em operação e serão utilizados por um longo tempo.
Vejo que você pode programar em várias linguagens, pelo menos em Ruby, Python, Java, Kotlin e C. Um bom conjunto. Você pode dar conselhos aos iniciantes sobre como aprender tantas línguas? Como se tornar um bom programador?Eu acho que a eficácia do treinamento será alta quando o idioma for adequado para as tarefas que um programador enfrenta. O Ruby é bom para escrever aplicativos da Web, porque trabalhar com strings é muito fácil se comparado ao Java. O Python é mais adequado para aprendizado de máquina (possui uma rica infraestrutura nessa área). Se você quiser aprender Python, eu recomendaria resolver tarefas de aprendizado de máquina em vez de escrever aplicativos da Web. Se você estiver mais interessado em Java, Kotlin ou outras linguagens baseadas em JVM, sugiro escrever sistemas distribuídos. Atualmente, o Ruby não é adequado para computação paralela ou exigente. Para resolver esses problemas no Ruby, precisamos de muitos processos que consomem muitos recursos, para que não sejam eficazes. Assim, o uso de ferramentas apropriadas para problemas relevantes ajudará a entender por que essa ferramenta foi projetada dessa maneira. Isso ajudará a entender melhor sua essência.
Quais livros estão no topo de sua "classificação" pessoal?O primeiro é Ruby sob um microscópio. Está escrito de maneira muito simples e descreve os detalhes do intérprete. Uma compreensão profunda de como o intérprete funciona ajudará a resolver problemas complexos e também aumentará a confiança na propriedade da ferramenta, ou seja, língua. Eu recomendo este livro mesmo para iniciantes.
O segundo é "Código legível". É sobre como escrever código claro, por incrível que pareça :). Nós escrevemos muito código e lemos muito código, e devemos ser capazes de escrever código que outras pessoas entenderão. E para isso, precisamos olhar o código do ângulo da percepção de outra pessoa. Livros como este ajudam. Eu também recomendo mesmo para iniciantes. Bem, o terceiro livro ... Este é um livro em japonês, sobre como o processador é organizado, sobre sua arquitetura, até os transistores dos quais ele é composto. Compreender como um computador funciona em um nível tão baixo às vezes é muito útil, mesmo quando se resolve problemas em níveis muito mais altos. Eu recomendo a leitura de qualquer bom livro sobre design de microprocessador, mesmo que à primeira vista isso pareça óbvio.
O que você espera da Rússia e da conferência RubyRussia ?
Eu nunca estive na Rússia antes. Espero ver muito de tudo bonito, por exemplo, belas casas, belas paisagens ... Além disso, deve ser mais frio na Rússia do que no Japão. Será interessante para mim ver e sentir todas essas diferenças entre nossos países.
Legal! Posso garantir que, mesmo que faça frio (na verdade, no final de setembro, não faz tanto frio conosco), a conferência e a festa serão quentes de qualquer maneira!Também estamos esperando por você na conferência! Você pode fazer suas perguntas pessoalmente (e no lendário pós-festa :) em 28 de setembro. O programa está
aqui , e o bilhete agora custa 9.000 rublos.
Graças às empresas que suportam o
RubyRussia :
Organizador -
EvroneParceiro Geral -
ToptalParceiro Gold -
GettParceiros Silver -
JetBrains e
BookmateParceiro Bronze -
InSales