Uploaded avatar of kytrinyx

Uma entrevista com Meade Kincke

@kytrinyx
Mais de 7 anos atrás

Uma entrevista com Meade Kincke, na qual ele e Katrina Owen conversam sobre o compilador de Rust, uma GUI que usa espaços de cor científicos para determinar a cor da cerveja e o livro dele, "A Practical Guide To Rust".

Oi, Meade. Obrigado por conversar com a gente. Queríamos falar com você porque você é o mentor mais prolífico que temos na trilha de Rust. Você já ajudou mais de 400 alunos. Como você conheceu o Exercism?

Alguém no subreddit de Rust do Reddit postou que a trilha de Rust do Exercism precisava de mentores, então eu fui atrás. Fico muito feliz por ter feito isso, porque é imensamente gratificante e todo mundo tem sido tão gentil e atencioso. Fiz algumas conexões maravilhosas com meus alunos do Exercism, e adoro ajudá-los.

Tem alguma história em particular que se destaca?

Sim, tem um exercício de Rust em particular que tem sido muito popular: o Terno Pitagórico.

O problema mais comum nesse exercício costuma ser o desempenho. A maioria das pessoas resolve ele inicialmente com laços for aninhados, o que é no mínimo O(n²) e é muito ineficiente. Meu objetivo é levar meus alunos a uma solução linear: O(n).

Minha abordagem é fazer perguntas. Começo perguntando se a pessoa quer aprender o método de iterador de Rust, porque ele tem um monte de benefícios, um dos quais é que você pode usar a biblioteca Rayon para paralelizar seu trabalho.

Depois de responder "Sim, por favor", um dos meus alunos comentou que está aprendendo Rust porque pensa em usá-lo para controle embarcado e depois para processar sua enorme saída de dados. Por isso, o paralelismo é importante para ele. Ele ficou contente que eu peguei um exercício aparentemente simples para ensinar partes mais complexas e idiomáticas de Rust.

Agora, graças ao Exercism, ele me contratou para ensiná-lo individualmente, e vamos trabalhar juntos em alguns projetos experimentais. Também vou ensinar a equipe inteira dele quando ele converter totalmente a empresa para Rust.

Gostei muito de trabalhar com os alunos com quem fiz mentoria, e quero que isso continue crescendo.

Gosto tanto disso que agora me ofereci como voluntário para ser mantenedor da trilha de Rust e ajudar mais nos bastidores.

Essa conexão humana é tão importante! Você é o autor de A Practical Guide to Rust. Sobre o que é o livro e quais foram suas motivações para escrevê-lo?

Escrevi este livro para ajudar outras pessoas a entender melhor certos aspectos do Rust. Não existe muita documentação sobre a linguagem por aí, e eu senti que era preciso haver uma literatura com humor que explicasse os conceitos da linguagem de forma palpável. O livro traz guias para algumas áreas básicas e avançadas. Quero que as pessoas tenham uma noção sólida do uso prático e real da linguagem. Ele dá exemplos reais, não hipotéticos.

Sempre soube que ia escrever um livro. Quando me vi ensinando um colega a programar em Rust remotamente, a estrutura simplesmente se encaixou. Ele nunca tinha mexido com código antes, e eu precisava explicar termos e métodos que nós, nerds, damos por certos de formas novas e compreensíveis. Usei analogias como pegar um livro emprestado na biblioteca em vez de ser dono do livro ao discutir o conceito de ownership em Rust.

Também incorporei exemplos do meu projeto BrewStillery. É uma ótima forma de ver como coisas como structs e enums funcionam em um programa de verdade. Também mostra como usar paralelismo de forma real.

Ao escrever o livro, eu sabia que queria que ele fosse lido como uma história, e não apenas um guia de referência. Ele se constrói sobre si mesmo, mas os elementos funcionam sozinhos. É a diferença entre cozinhar com um manual de química e assistir a um episódio de "The French Chef", da Julia Child.

Ah, isso é intrigante. Para quem você escreveu o livro e o que o leitor vai tirar dele?

Ele é destinado a qualquer pessoa que queira aprender Rust. O que equilibra a forma como eu elaboro as ideias é que o livro dá ao leitor uma compreensão fundamental, enquanto boa parte da outra literatura tende à memorização mecânica.

Vejo que você recebeu muitas avaliações positivas. Você pretende lançar um Volume II?

Sim! Vou continuar escrevendo, é claro, e pretendo publicar mais volumes.

Além de ensinar por meio de mentoria e de escrever, você também trabalhou um pouco no compilador de Rust. Pode me contar sobre isso?

Claro!

Como uma breve introdução ao meu trabalho, existem essencialmente dois lugares onde um programa pode funcionar: o tempo de compilação e o tempo de execução. Quando uma função é executada em tempo de execução, tudo dentro dela precisa ser regenerado e recalculado. Isso significa, crucialmente, realocar memória, o que sempre queremos evitar. Quando uma função é constante, ela é carregada na memória quando o programa é iniciado. Quanto mais pudermos fazer em tempo de compilação, melhor será o desempenho dos nossos programas.

Um tempo atrás, ouvi dizer que essa ideia de execução de funções em tempo de compilação (const fn) estava sendo implementada em Rust, e fiquei muito empolgado. Tenho muita paixão por tornar as coisas eficientes e precisas. Uma coisa de que gosto muito em const fn é que, quando estiver completa, podemos ter coisas maravilhosas, como constantes matemáticas determinadas de forma elegante. Atualmente, pi é um valor fixo no código. Muitas pessoas diriam que isso é preciso o suficiente, mas eu sinto que deveria usar toda a extensão do espaço numérico disponível. Com const fn, podemos usar a fórmula de Leibniz, que preencheria completamente o espaço de ponto flutuante.

Li um pouco mais e me deparei com um post de blog dizendo que o MIRI tornaria a estabilização de const fn muito mais fácil. O tempo passou e eu não vi nenhum progresso quando novas versões foram lançadas. Entrei em contato com a equipe do Rust e comecei a mexer no compilador.

O melhor é que o próprio compilador é escrito em Rust. Ele foi inicialmente escrito em OCaml e depois reescrito em Rust, o que se chama de bootstrapping. Basicamente, o compilador analisa toda a entrada na AST, que então é passada para a representação intermediária de alto nível (HIR), depois para a de nível médio (MIR) e então para a de baixo nível (LIR), que é tratada pelo LLVM. Conforme percorremos todas essas etapas, chegamos cada vez mais perto do código de máquina.

É preciso entender que o compilador é só um programa, mas um programa muito elaborado. O Rust leva um bom tempo para compilar e, principalmente, para rodar todos os testes dele. Então você não simplesmente joga um código lá e sai dizendo "Acabou".

Meu primeiro trabalho no compilador foi na HIR. Envolveu uma quantidade enorme de leitura da biblioteca padrão (tanto a stable quanto a nightly) e seguir por toda sorte de caminhos secundários. Tive que descer recursivamente por cada tipo aninhado no compilador até esgotar todas as opções. A biblioteca nightly/do compilador tem um monte de tipos aninhados. Manter o fio do raciocínio exige muita concentração.

Para complicar mais, o compilador é trabalhado por uma equipe distribuída, o que significa que muitas vezes acabamos com conflitos de merge.

Foi muito divertido. Ainda há um monte de trabalho a fazer, e vou chegar lá em breve.

Além dessas contribuições de código aberto, eu sei que você é CTO de uma empresa de blockchain. Eu associo blockchain a perder muito dinheiro com Etherium. O que isso significa para você?

O blockchain, infelizmente, se tornou a buzzword mais badalada que já existiu.

É muito mais do que The City e Wall Street lucrando com uma nova tendência de moeda digital. Na verdade, não somos uma "empresa de blockchain"; nós da Chainetix fornecemos livros-razão privados para proteger com segurança os dados de uma empresa. De fato, nem lidamos com criptomoeda. O objetivo da Chainetix é colocar nosso conhecimento nas mãos de todos que têm um entendimento básico de programação.

Meu trabalho envolveu mapear nossos sistemas e nossa infraestrutura do zero para criar algo extremamente sólido. Escolhi um projeto chamado Habitat by Chef. Descobri ele porque é escrito em Rust, o que era intrigante vindo de uma empresa tão grande como a Chef. Em contraste com o Docker puro, o Habitat cria imagens que podem se atualizar automaticamente e fazer coisas incríveis, como service bindings. Também contribuí bastante com o repositório core-plans do Habitat.

Você mencionou antes seu projeto, BrewStillery. Parece que ele é importante para você. Pode nos contar um pouco mais sobre isso?

Sim, com certeza é!

BrewStillery é uma ferramenta de código aberto, tudo em um, para cerveja, vinho e destilados, que escrevi em Rust e GTK3. Também adicionei um tema CSS belamente único. Em uma frase, é uma calculadora avançada para quem produz bebidas alcoólicas.

Criei abas diferentes para separar as calculadoras específicas de cerveja e champanhe, além de uma aba geral que se aplica igualmente a cervejeiros, vinicultores e destiladores. Se você olhar a maioria das garrafas de cerveja e de vinho, vai ver a porcentagem de álcool naquela garrafa, o Alcohol By Volume. Bom, uma das coisas que o BrewStillery faz é determinar esse ABV. Como você provavelmente pode imaginar, tem um monte de maravilhas nerds envolvidas aqui. Do que eu mais me orgulho é de calcular a cor da cerveja:

Aba de Cerveja do BrewStillery com Copo Vazio

Aba de Cerveja do BrewStillery com Copo Cheio

Essas imagens de antes e depois mostram o que acontece depois que você insere as quantidades. O jeito que eu fiz é algo que ninguém tinha feito antes. Outro ótimo recurso é que tudo é calculado na hora, conforme você digita. Se você quiser os detalhes mais minuciosos sobre espaços de cor, me procure numa conferência e a gente conversa sobre isso tomando uns chopes!

09 de fevereiro de 2019 · Achou útil?