Transcrição da minha entrevista com o autor Ruby


Durante a conferência de outono Rubi Rússia I, sobre os direitos do organizador, preso à margem do autor e Ruby deu-lhe uma hora de interrogatório entrevista. Tentei escolher perguntas que não estavam cansadas para que as respostas fossem úteis para nós, e não "para todo o bem versus todo o mal". E o avô me surpreendeu, o velho desenvolvedor plus! Sob o corte está a transcrição da entrevista, a opinião não trivial de Yukihiro Matsumoto sobre os tipos em geral e os hacks em particular, bem como a oportunidade de discutir tudo isso nos comentários. Estou em contato com a equipe Ruby Evrone . Convidamos Matsumoto a Moscou regularmente, há uma oportunidade de apresentar perguntas interessantes com antecedência para futuras entrevistas.

Como fundador da linguagem, você recebe muitas sugestões e idéias. Sobre o que você mais pergunta?

As pessoas costumam perguntar: "Eu uso a linguagem X. Por que você não adiciona uma função do X ao Ruby?" Na maioria dos casos, respondo que isso não é possível. Temos designs de idiomas diferentes e políticas de idiomas diferentes. Não podemos simplesmente pegar algumas funções do X e adicionar ao Ruby. Mas, às vezes, ainda emprestamos boas idéias de outras linguagens, como Python, JS ou Elixir.

Agora os idiomas dinâmicos adicionam a capacidade de especificar explicitamente os tipos. Isso já apareceu em Python, PHP e JavaScript (TypeScript). O que você pensa sobre isso, como irá trabalhar com os tipos na terceira versão do Ruby?

Rust and Go são idiomas estaticamente tipados. Em grandes projetos, centenas de desenvolvedores criam e mantêm muito código, milhões de linhas. Nesses casos, a verificação de tipo é conveniente, pois permite detectar erros. Em outros casos, precisamos escrever um teste para garantir que os tipos usados ​​estejam corretos. Os volumes de teste aumentam com o crescimento do projeto. Nisto, vejo o motivo da popularidade da digitação estática, pois seu uso reduz o número de testes.

Ao mesmo tempo, a declaração de tipo explícita é uma informação redundante. No caso do Ruby, o próprio idioma pode cuidar dos tipos e nosso código simplesmente funciona. Queremos os benefícios da verificação de tipo, mas não queremos a redundância de suas especificações manuais. Como uma comunidade de linguagem Ruby, nos esforçamos para fornecer aos desenvolvedores todos os recursos. Usaremos um arquivo com tipos independentes do nosso programa Ruby. Portanto, o programa Ruby não conterá informações de tipo.

Um arquivo de informações de tipo separado, que chamamos de "arquivo de assinatura ruby", conterá informações sobre os tipos usados ​​em bibliotecas, gemas e seu código de biblioteca. Também forneceremos uma nova ferramenta, o “type profiler”, que coletará informações de tipo. Ele pode detectar conflitos de tipo ou conflitos com base no próprio código ou em anotações de tipo.

Usando arquivos de assinatura, você pode refinar os tipos que você usa e ajudar o criador de perfil a verificar seu código. Depois de coletar todas as informações de tipo nas bibliotecas usadas e seu código, o criador de perfil possui informações suficientes para encontrar possíveis erros.

Versões futuras do Ruby serão capazes de verificar o tipo estático, até certo ponto. Ainda assim, Ruby é uma linguagem dinâmica, e o principal tipo de verificação é habitual durante a execução do nosso código. A verificação de tipo "primeiro nível" usa informações sobre os tipos no código e ajuda o desenvolvedor a detectar de 40 a 80% dos erros. A verificação de tipo "segundo nível" gera informações de tipo com base no próprio código. No futuro, com a ajuda de tais ferramentas, poderemos fornecer verificação de tipo estático no Ruby sem a necessidade de o desenvolvedor especificá-los explicitamente ...

Gosto dessa idéia e espero versões futuras do Ruby para ver como essa abordagem será boa. É ótimo que você esteja experimentando o idioma. Que futuro você vê para Ruby, em que direção você está desenvolvendo a linguagem?

Na verdade, eu não controlo o idioma ou a comunidade. Eu apenas forneço tecnologia e a comunidade decide que caminho seguir. Temos tecnologia suficiente para quase todas as áreas para tornar o Ruby flexível e produtivo. Por exemplo, Ruby é usado principalmente para criar aplicativos da web. Mas quero que o Ruby seja aplicado em outras áreas: pesquisa e computação, inteligência artificial, aprendizado de máquina, no campo da inovação. Estamos tentando tornar a tecnologia adequada para aplicações mais amplas.

Nós desenvolvedores gostamos de chamar as coisas de nomes diferentes. "Este é um carro esportivo" e este é um "carro familiar". JavaScript é uma linguagem de desenvolvimento da Web. C é uma linguagem de sistema de baixo nível. Como você chama o Ruby, posiciona-o?

Eu chamaria Ruby de "uma linguagem de programação produtiva". A produtividade é um dos principais objetivos, as principais tarefas do Ruby. Foi projetado para pessoas, não carros. Às vezes, os desenvolvedores reclamam do design da linguagem quando é difícil implementar com eficiência algumas das sintaxes. O design do Ruby não é focado na produtividade, mas na produtividade. Isso libera os desenvolvedores para resolver tarefas mais complexas relacionadas ao próprio projeto. Tentamos tornar o Ruby o mais produtivo possível e o mais produtivo possível.

O Python não possui funções anônimas com várias linhas devido à complexidade do desenvolvimento. É bom saber que, para Ruby, você e os desenvolvedores principais estão tentando facilitar a vida dos programadores, apesar da complexidade da implementação. A propósito, se começássemos a falar sobre complexidade. Imagine que você tem a oportunidade de voltar no tempo e dar um conselho a si mesmo quando começou a desenvolver Ruby. Que conselho seria esse?

Não empreste demais de outras linguagens de script. Sua linguagem de programação será a melhor linguagem de uso geral. Um grande foco no script se tornará uma espécie de rudimento no futuro.

Durante a evolução da linguagem Ruby, você fez muitas mudanças, fez muitas experiências. Alguns deles tiveram sucesso, outros não. Qual você considera o seu maior sucesso no desenvolvimento de um idioma? Do que você mais gosta?

Se você precisar escolher uma coisa, esses são blocos. Os blocos em Ruby são únicos; essa é uma abstração útil de uma função de ordem superior. Eles são muito mais simples do que em outros idiomas. Isso oferece limitações e facilidade de uso.

Coincidência, mas blocos são o que eu mais gosto em Ruby. Em meus próprios discursos e entrevistas, falo sobre Ruby como uma linguagem com DSL, açúcar sintático e bloqueios. Blocos são muito legais.

Em outros idiomas, como Swift, se outra função for especificada como o último argumento de uma função, essa função de argumento poderá se comportar como um bloco no Ruby. Há uma sugestão para esse açúcar sintático, mesmo para JavaScript. Estou muito orgulhoso disso.

Sim, o JavaScript, com sua sintaxe de seta espessa, geralmente usa o último argumento de uma função como "algo como blocos em Ruby". Não posso deixar de fazer a pergunta oposta. Como você pode chamar o maior erro de um projeto que precisa ser corrigido ou já corrigido?

Há algum. Vamos começar com variáveis ​​globais. Eles foram úteis para a linguagem de script, mas agora parecem um rudimento. Também me arrependo de adicionar fluxos explicitamente - precisamos de uma abstração mais conveniente para a simultaneidade. Outro dos meus erros de design é a falta de imunidade de alguns objetos. Por exemplo, agora você pode alterar o fuso horário de um objeto de hora. Em vez de apenas criar um novo objeto imutável. É disso que me arrependo.

A mutabilidade é complexa e pode facilmente levar a erros. Mas basta perguntas técnicas! Nós, seres humanos, somos criaturas sociais, e seria interessante aprender sobre sua vida, como você organiza o trabalho?

Sou desenvolvedor Ruby em período integral. Metade do meu tempo trabalho no design da próxima versão do idioma. O resto do tempo, estou trabalhando em uma implementação alternativa do MRuby. A implementação mainstream é criada pelos desenvolvedores principais, e eu só tomo decisões que eles refletem no código.

O número de confirmações no seu GitHub é impressionante, especialmente as confirmações no dia em que você voa para a Rússia. Recentemente, os desenvolvedores falaram muito sobre burnout. Você tem tempo livre, hobbies e algo que o proteja de queimar?

Felizmente, passo todo o meu tempo trabalhando com código aberto. Não tenho pressão dos clientes, não tenho chefes, me proponho as tarefas. Tudo isso me permite trabalhar sem estresse. Não tenho prazos além da próxima data de lançamento do Ruby. Essa liberdade permite que eu me sinta relaxado.Eu também tento passar um tempo fora do computador, prestando atenção aos meus parentes, familiares, ajudando a igreja local, passeando com o cachorro e brincando com meu gato.

Muitos desenvolvedores de Ruby russo gostam do Japão como país, sua cultura. Eles assistem animes, leem mangás e chegam ao Japão como turistas. Como japonês nativo e desenvolvedor de software, que lugares e atividades você pode recomendar a outros desenvolvedores que visitam o Japão?

O Japão é um país diverso. Você pode visitar Tóquio futurista, onde há muita cultura pop, como mangá e anime. Ao mesmo tempo, temos montanhas, florestas e locais históricos, como antigos santuários e templos. Apreciamos a beleza da flor de sakura e a cor das folhas de outono. Portanto, tudo depende do seu gosto e preferências. Você pode desfrutar de muitas coisas: comida, natureza, tecnologia. Você pode visitar muitos lugares, especialmente em Tóquio. Eu recomendo que os colegas prestem atenção à diversidade do nosso país e confiem exatamente nisso em suas viagens turísticas.

Existe algo na cultura e no idioma japonês que influenciou a criação do Ruby?

Não temos controle sobre essa influência cultural e é difícil de avaliar. Por exemplo, em japonês, as frases são coladas. Da mesma forma que o "encadeamento de métodos" funciona em Ruby. Talvez seja essa a influência da língua japonesa. O Japão é um país rico e não precisamos de trabalho duro constante. O código aberto não ganha dinheiro, mas, trabalhando no meu trabalho principal ou contando com o dinheiro dos patrocinadores, eu e os colaboradores podemos apoiar e desenvolver o idioma e criar melhores tecnologias. Essa também é a influência do Japão e as oportunidades que ele oferece.

E a última e insidiosa pergunta. As pessoas geralmente se imaginam no lugar dos outros, pensam no que fariam, como agiriam. Existe algo na posição do autor de uma linguagem de programação popular que não seja óbvia do lado de fora?

Criar uma linguagem de programação não é uma tarefa técnica muito difícil. Muitos estudantes que frequentam cursos de desenvolvimento de linguagens de programação na universidade podem criar seu próprio idioma e não há nada proibitivamente complicado. A dificuldade é que a linguagem é uma maneira de expressar pensamentos. Isso se aplica às linguagens de programação e às línguas naturais: russo, inglês e japonês. Linguagens de programação como Ruby, Python ou JavaScript - ajudam a nossa mente a formular pensamentos. Esta é a principal tarefa das linguagens de programação. Uma boa linguagem de programação oferece uma abordagem para a formulação de pensamentos. Para Ruby, essa abordagem é "produtividade do desenvolvimento e o prazer de escrever código". Para outros idiomas, pode ser "simplicidade", "eficiência" ou qualquer outra coisa. Cada idioma tem sua própria abordagem. E se você gosta,o que Ruby oferece para formular pensamentos é a sua linguagem.

All Articles