Une interview de Meade Kincke, dans laquelle lui et Katrina Owen parlent du compilateur Rust, d'une interface graphique qui utilise des espaces colorimétriques scientifiques pour déterminer la couleur de la bière, et de son livre « A Practical Guide To Rust ».
Salut Meade. Merci pour cette discussion. On voulait te parler parce que tu es le mentor le plus prolifique que nous ayons sur le parcours Rust. Tu as aidé plus de 400 apprenants. Comment as-tu découvert Exercism ?
Quelqu'un sur le subreddit Rust de Reddit a posté un message expliquant que le parcours Rust d'Exercism avait besoin de mentors, alors je me suis renseigné. Je suis tellement content de l'avoir fait, parce que c'est immensément gratifiant et que tout le monde a été si gentil et reconnaissant. J'ai noué de merveilleuses relations avec mes apprenants sur Exercism, et j'adore les aider.
Y a-t-il des histoires qui te marquent particulièrement ?
Oui, il y a un exercice Rust en particulier qui a été très populaire : le triplet pythagoricien.
Le problème le plus courant dans cet exercice est généralement la performance. La plupart des gens le résolvent d'abord avec des boucles for imbriquées, ce qui est au moins O(n²) et très inefficace. Mon objectif est d'amener mes apprenants à une solution linéaire : O(n).
Mon approche consiste à poser des questions. Je commence par leur demander s'ils veulent apprendre la méthode d'itérateur de Rust, parce qu'elle a une tonne d'avantages, dont l'un est qu'on peut utiliser la bibliothèque Rayon pour paralléliser son travail.
Après avoir répondu « Oui, avec plaisir », un de mes apprenants a mentionné qu'il apprend Rust parce qu'il envisage de l'utiliser pour le contrôle embarqué, puis pour traiter son énorme volume de données en sortie. Le parallélisme est donc important pour lui. Il a été ravi que je prenne un exercice apparemment simple pour enseigner des aspects plus complexes et plus idiomatiques de Rust.
Aujourd'hui, grâce à Exercism, il m'a engagé pour lui donner des cours en tête-à-tête, et nous allons travailler ensemble sur quelques projets expérimentaux. Je formerai aussi toute son équipe lorsqu'il aura converti l'entreprise entièrement à Rust.
J'ai vraiment pris plaisir à travailler avec les apprenants que j'ai mentorés, et je veux que cela continue de se développer.
Ça me plaît tellement que je me suis proposé comme mainteneur du parcours Rust pour aider davantage en coulisses.
Ce lien humain est tellement important ! Tu es l'auteur de A Practical Guide to Rust. De quoi parle ce livre et quelles étaient tes motivations pour l'écrire ?
J'ai écrit ce livre pour aider les autres à mieux comprendre certains aspects de Rust. Il n'existe pas énormément de documentation sur ce langage, et j'ai estimé qu'il fallait une littérature qui ait de l'humour et qui explique les concepts du langage de manière concrète. Il propose des guides sur certains domaines basiques et avancés. Je veux que les gens acquièrent une solide compréhension de l'usage pratique et concret du langage. Il donne de vrais exemples, pas des exemples hypothétiques.
J'ai toujours su que j'allais écrire un livre. Quand je me suis retrouvé à apprendre à un collègue à programmer en Rust à distance, le cadre s'est mis en place tout seul. Il n'avait jamais touché à du code auparavant, et je devais expliquer des termes et des méthodes que nous, les nerds, tenons pour acquis, d'une manière nouvelle et perceptible. J'ai utilisé des analogies comme emprunter un livre à la bibliothèque plutôt que le posséder, pour parler du concept de propriété en Rust.
J'ai aussi intégré des exemples tirés de mon projet BrewStillery. C'est une excellente façon de voir comment des choses comme les structs et les enums fonctionnent dans un vrai programme. Cela montre aussi comment utiliser le parallélisme de manière concrète.
En écrivant le livre, je savais que je voulais qu'il se lise comme une histoire plutôt que comme un simple guide de référence. Il se construit progressivement, mais chaque élément tient aussi debout tout seul. C'est la différence entre cuisiner avec un manuel de chimie et regarder un épisode de « The French Chef » de Julia Child.
Oh, c'est intriguant. Pour qui as-tu écrit ton livre et qu'est-ce que le lecteur en retirera ?
Il est destiné à toute personne qui veut apprendre Rust. Ce qui fait la différence dans la façon dont je développe les idées, c'est que cela donne au lecteur une compréhension fondamentale, alors qu'une grande partie de la littérature existante penche vers la mémorisation par cœur.
Je vois que tu as reçu beaucoup d'avis positifs. Comptes-tu publier un tome II ?
Oui ! Je vais bien sûr continuer à écrire et je prévois de publier d'autres tomes.
En plus d'enseigner par le mentorat et d'écrire, tu as aussi travaillé sur le compilateur Rust. Peux-tu m'en parler ?
Bien sûr !
Pour introduire brièvement mon travail, un programme peut fonctionner essentiellement à deux endroits : au moment de la compilation et à l'exécution. Quand une fonction est appelée pendant l'exécution du programme, tout ce qu'elle contient doit être régénéré et recalculé. Ce qui implique, point crucial, de réallouer de la mémoire, ce que l'on cherche toujours à éviter. Quand une fonction est constante, elle est chargée en mémoire au démarrage du programme. Plus on peut en faire au moment de la compilation, meilleures seront les performances de nos programmes.
Il y a quelque temps, j'ai entendu dire que cette idée d'exécution de fonction au moment de la compilation (const fn) était en cours d'implémentation dans Rust, et j'ai été vraiment enthousiaste. Je suis très attaché à rendre les choses efficaces et précises. Une chose que j'aime vraiment avec const fn, c'est que, lorsqu'il sera terminé, on pourra avoir des merveilles comme des constantes mathématiques déterminées avec élégance. Actuellement, pi est une valeur « en dur » (une valeur fixe écrite directement dans le code plutôt qu'une variable que l'on peut modifier à tout moment). Beaucoup de gens diraient que c'est suffisamment précis, mais j'estime qu'elle devrait utiliser la totalité de l'espace numérique disponible. Avec const fn, on peut utiliser la formule de Leibniz, qui remplirait complètement l'espace des nombres à virgule flottante.
J'ai lu un peu plus et je suis tombé sur un article de blog disant que MIRI rendrait la stabilisation de const fn beaucoup plus facile. Le temps a passé, et je ne voyais aucun progrès à la sortie de nouvelles versions. J'ai contacté l'équipe Rust et je me suis mis à bricoler le compilateur.
Ce qui est génial, c'est que le compilateur lui-même est écrit en Rust. Il a d'abord été écrit en OCaml, puis réécrit en Rust, ce qu'on appelle l'amorçage. En gros, le compilateur analyse toute l'entrée dans l'AST, qui est ensuite transmise à la représentation intermédiaire de haut niveau (HIR), puis de niveau moyen (MIR), puis de bas niveau (LIR), qui est prise en charge par LLVM. Au fil de toutes ces étapes, on se rapproche de plus en plus du code machine.
Il faut comprendre que le compilateur n'est qu'un programme, mais un programme très élaboré. Rust met pas mal de temps à se compiler, et surtout à exécuter tous ses tests. Donc on ne se contente pas de balancer du code et de dire « J'ai fini ».
Mon premier travail sur le compilateur a porté sur la HIR. Cela a impliqué énormément de lecture de la bibliothèque standard (à la fois stable et nightly) et de poursuite de pistes en tous genres. J'ai dû descendre récursivement à travers chaque type imbriqué du compilateur jusqu'à avoir épuisé toutes les options. La bibliothèque nightly/compiler a une tonne de types imbriqués. Garder le fil que l'on suit demande beaucoup de concentration.
Pour compliquer les choses, le compilateur est développé par une équipe répartie, ce qui fait qu'on aboutit souvent à des conflits de fusion.
C'était vraiment très amusant. Il reste encore énormément de travail à faire, et je m'y attellerai bientôt.
En plus de ces contributions open source, je sais que tu es CTO d'une entreprise de blockchain. J'associe la blockchain au fait de perdre beaucoup d'argent sur Etherium. Qu'est-ce que ça représente pour toi ?
La blockchain est malheureusement devenue le mot à la mode le plus galvaudé qui soit.
C'est bien plus que la City et Wall Street qui surffent une nouvelle tendance de monnaie numérique. Nous ne sommes en fait pas une « entreprise de blockchain » ; chez Chainetix, nous fournissons des registres privés pour sécuriser les données d'une entreprise. En fait, nous ne traitons même pas de cryptomonnaie. L'objectif chez Chainetix est de mettre notre expertise à la portée de toute personne ayant une compréhension de base de la programmation.
Mon travail a consisté à concevoir nos systèmes et notre infrastructure à partir de zéro pour créer quelque chose de solide comme le roc. J'ai choisi un projet appelé Habitat by Chef. Je l'ai découvert parce qu'il est écrit en Rust, ce qui était intriguant venant d'une entreprise aussi énorme que Chef. Contrairement à Docker tout court, Habitat crée des images qui peuvent se mettre à jour automatiquement et faire des choses étonnantes comme des liaisons de services. J'ai aussi pas mal contribué au dépôt core-plans d'Habitat.
Tu as mentionné plus tôt ton projet, BrewStillery. On dirait qu'il compte beaucoup pour toi. Peux-tu nous en dire un peu plus ?
Oui, absolument !
BrewStillery est un outil open source tout-en-un pour la bière, le vin et les spiritueux, que j'ai écrit en Rust et avec GTK3. J'ai aussi ajouté un thème CSS d'une beauté unique. En une phrase, c'est une calculatrice avancée pour quiconque fabrique des spiritueux.
J'ai créé différents onglets pour séparer les calculatrices propres à la bière et au champagne, tout en ayant un onglet général qui s'applique aussi bien aux brasseurs, aux viticulteurs et aux distillateurs. Si on regarde la plupart des bouteilles de bière et de vin, on voit le pourcentage d'alcool qu'elles contiennent : l'Alcohol By Volume. Eh bien, l'une des choses que fait BrewStillery, c'est déterminer cet ABV. Comme tu peux sans doute l'imaginer, il y a là-dedans une tonne de trucs géniaux de nerd. Ce dont je suis le plus fier, c'est le calcul de la couleur de la bière :


Ces images avant/après montrent ce qui se passe une fois les quantités saisies. La façon dont je l'ai fait est quelque chose que personne n'avait fait auparavant. Une autre super fonctionnalité est que tout est calculé à la volée pendant que tu saisis. Si tu veux les détails croustillants sur les espaces colorimétriques, aborde-moi lors d'une conférence et on en parlera autour d'une bière !