Transcription de mon entretien avec l'auteur Ruby


Au cours de la conférence d'automne Ruby Russie I, sur les droits de l'organisateur, pris en marge de l'auteur et Ruby lui a donné une heure interrogation entrevue. J'ai essayé de choisir des questions qui n'étaient pas blasées afin que les réponses nous soient utiles, et non «pour tout bon contre tout mauvais». Et mon grand-père m'a surpris, l'ancien développeur plus! Sous la coupe se trouve la transcription de l'interview, l'opinion non triviale de Yukihiro Matsumoto sur les types en général et les hacks en particulier, ainsi que l'occasion de discuter de tout cela dans les commentaires. Je suis en contact avec l’équipe Ruby Evrone . Nous invitons Matsumoto à Moscou régulièrement, il est possible de poser à l'avance des questions intéressantes pour de futures interviews.

En tant que fondateur de la langue, vous obtenez beaucoup de suggestions et d'idées. De quoi êtes-vous le plus souvent interrogé?

Les gens demandent souvent: "J'utilise le langage X. Pourquoi n'ajoutez-vous pas une fonction de X à Ruby?" Dans la plupart des cas, je réponds que ce n'est pas possible. Nous avons différentes conceptions linguistiques et différentes politiques linguistiques. Nous ne pouvons pas simplement prendre certaines fonctions de X et les ajouter à Ruby. Mais parfois, nous empruntons toujours de bonnes idées à d'autres langages tels que Python, JS ou Elixir.

Désormais, les langages dynamiques ajoutent la possibilité de spécifier explicitement les types. Cela est déjà apparu en Python, PHP et JavaScript (TypeScript). Que pensez-vous de cela, comment fonctionnera les types dans la troisième version de Ruby?

Rust et Go sont des langages typés statiquement. Dans les grands projets, des centaines de développeurs créent et maintiennent beaucoup de code, des millions de lignes. Dans de tels cas, la vérification de type est pratique, elle vous permet de détecter les erreurs. Dans d'autres cas, nous devons écrire un test pour nous assurer que les types utilisés sont corrects. Les volumes de tests augmentent avec la croissance du projet. En cela, je vois la raison de la popularité du typage statique, car son utilisation réduit le nombre de tests.

Dans le même temps, la déclaration de type explicite est une information redondante. Dans le cas de Ruby, le langage lui-même peut prendre en charge les types et notre code fonctionnera tout simplement. Nous voulons les avantages de la vérification de type, mais nous ne voulons pas de la redondance de leurs spécifications manuelles. En tant que communauté de langue Ruby, nous nous efforçons de fournir aux développeurs toutes les fonctionnalités. Nous utiliserons un fichier avec des types indépendants de notre programme Ruby. Ainsi, le programme Ruby ne contiendra pas d'informations de type.

Un fichier d'informations de type distinct, que nous appelons le «fichier de signature ruby», contiendra des informations sur les types utilisés dans les bibliothèques, les gemmes et le code de votre bibliothèque. Nous fournirons également un nouvel outil, le «type profiler», qui collectera les informations de type. Il peut détecter des conflits de type ou des conflits basés sur le code lui-même ou des annotations de type.

À l'aide de fichiers de signature, vous pouvez affiner les types que vous utilisez et aider le profileur à vérifier votre code. Après avoir collecté toutes les informations de type dans les bibliothèques utilisées et votre code, le profileur dispose de suffisamment d'informations pour trouver des erreurs potentielles.

Les futures versions de Ruby pourront dans une certaine mesure effectuer une vérification de type statique. Pourtant, Ruby est un langage dynamique, et les principales vérifications de type qu'il contient sont habituelles à faire pendant l'exécution de notre code. La vérification de type «premier niveau» utilise des informations sur les types dans le code et aide le développeur à détecter de 40 à 80% des erreurs. La vérification de type «deuxième niveau» génère des informations de type basées sur le code lui-même. À l'avenir, avec l'aide de tels outils, nous serons en mesure de fournir une vérification de type statique dans Ruby sans que le développeur ait besoin de les spécifier explicitement ...

J'aime cette idée et j'attends avec impatience les futures versions de Ruby pour voir à quel point cette approche sera bonne. C'est formidable que vous expérimentiez la langue. Quel avenir voyez-vous pour Ruby, dans quelle direction développez-vous le langage?

En fait, je ne contrôle ni la langue ni la communauté. Je fournis simplement la technologie et la communauté décide de la direction à suivre. Nous avons suffisamment de technologie pour presque tous les domaines pour rendre Ruby flexible et productif. Par exemple, Ruby est principalement utilisé pour créer des applications Web. Mais je souhaite que Ruby soit appliqué dans d'autres domaines: recherche et informatique, intelligence artificielle, apprentissage automatique, dans le domaine de l'innovation. Nous essayons de rendre la technologie adaptée à une application plus large.

Nous, les développeurs, aimons appeler les choses des noms différents. «Ceci est une voiture de sport», et ceci est une «voiture familiale». JavaScript est un langage de développement Web. C est un langage système de bas niveau. Comment aimez-vous appeler Ruby, le positionner?

J'appellerais Ruby "un langage de programmation productif". La productivité est l'un des principaux objectifs, les principales tâches de Ruby. Il a été conçu pour les gens, pas pour les voitures. Parfois, les développeurs se plaignent de la conception du langage lorsqu'une partie de la syntaxe est difficile à implémenter efficacement. La conception de Ruby n'est pas axée sur la productivité, mais sur la productivité. Cela permet aux développeurs de résoudre des tâches plus complexes liées au projet lui-même. Nous essayons de rendre Ruby aussi productif que possible et aussi productif que possible.

Python n'a pas de fonctions anonymes multilignes en raison de la complexité du développement. C'est agréable d'entendre que pour Ruby, vous et les développeurs principaux tentez de faciliter la vie des programmeurs, malgré la complexité de la mise en œuvre. Soit dit en passant, si nous avons commencé à parler de complexité. Imaginez que vous avez la possibilité de remonter le temps et de vous donner un petit conseil lorsque vous avez commencé à développer Ruby. Quel conseil serait-ce?

N'empruntez pas trop aux autres langages de script. Votre langage de programmation sera le meilleur langage à usage général. Une grande concentration sur les scripts deviendra une sorte de rudiment à l'avenir.

Au cours de l'évolution du langage Ruby, vous avez fait beaucoup de changements, fait beaucoup d'expérimentation. Certains ont réussi, d'autres non. Que considérez-vous comme votre plus grand succès dans le développement d'une langue, qu'est-ce que vous aimez le plus?

Si vous devez choisir une chose, ce sont des blocs. Les blocs dans Ruby sont uniques, c'est une abstraction utile d'une fonction d'ordre supérieur. Ils sont beaucoup plus simples que dans d'autres langues. Cela donne à la fois des limites et une facilité d'utilisation.

Coïncidence, mais les blocs sont ce que j'aime le plus chez Ruby. Dans mes propres discours et interviews, je parle de Ruby en tant que langue avec DSL, sucre syntaxique et blocs. Les blocs sont très cool.

Dans d'autres langages, tels que Swift, si une autre fonction est spécifiée comme dernier argument d'une fonction, cette fonction d'argument peut se comporter comme un bloc dans Ruby. Il existe une suggestion pour un tel sucre syntaxique même pour JavaScript. J'en suis très fier.

Oui, JavaScript, avec sa syntaxe à flèche épaisse, utilise souvent le dernier argument d'une fonction comme «quelque chose comme des blocs dans Ruby». Je ne peux pas m'empêcher de poser la question opposée. Que pouvez-vous appeler la plus grosse erreur dans un projet qui doit être corrigé ou déjà corrigé?

Il y en a. Commençons par les variables globales. Ils étaient utiles pour le langage de script, mais maintenant ils ressemblent à un rudiment. Je regrette également d'avoir ajouté des flux explicitement - nous avons besoin d'une abstraction plus pratique pour la concurrence. Une autre de mes erreurs de conception est le manque d'immunité de certains objets. Par exemple, vous pouvez maintenant modifier le fuseau horaire d'un objet temporel. Au lieu de simplement créer un nouvel objet immuable. Voilà ce que je regrette.

La mutabilité est complexe et peut facilement conduire à des erreurs. Mais assez de questions techniques! Nous, les humains, sommes des créatures sociales, et il serait intéressant d'en savoir plus sur votre vie, comment vous organisez le travail?

Je suis développeur Ruby à plein temps. La moitié de mon temps, je travaille sur la conception de la prochaine version de la langue. Le reste du temps, je travaille sur une implémentation alternative de MRuby. L'implémentation traditionnelle est créée par les développeurs principaux, et je ne prends que des décisions qui se reflètent dans le code.

Le nombre de validations sur votre GitHub est impressionnant, en particulier les validations le jour de votre vol vers la Russie. Récemment, les développeurs ont beaucoup parlé de burnout. Avez-vous du temps libre, des loisirs et quelque chose qui vous protège contre l'épuisement?

Heureusement, je passe tout mon temps à travailler avec l'open source. Je n'ai aucune pression des clients, je n'ai pas de patron, je me fixe les tâches. Tout cela me permet de travailler sans stress. Je n'ai pas d'autre échéance que la prochaine date de sortie de Ruby. Cette liberté me permet de me sentir détendu, j'essaye aussi de passer du temps pas devant l'ordinateur, de faire attention à mes proches, à la famille, d'aider l'église locale, de marcher avec le chien et de jouer avec mon chat.

De nombreux développeurs de rubis russes aiment le Japon en tant que pays, sa culture. Ils regardent des anime, lisent des mangas, viennent au Japon en tant que touristes. En tant que développeur natif japonais et logiciel, quels lieux et activités pouvez-vous recommander à d'autres développeurs visitant le Japon?

Le Japon est un pays diversifié. Vous pouvez visiter Tokyo futuriste, où il y a beaucoup de culture pop, comme les mangas et les anime. Dans le même temps, nous avons des montagnes, des forêts et des sites historiques, tels que de vieux sanctuaires et des temples. Nous apprécions la beauté de la fleur de sakura et la couleur des feuilles d'automne. Tout dépend donc de vos goûts et de vos préférences, vous pouvez profiter de beaucoup de choses: nourriture, nature, technologie. Vous pouvez visiter de nombreux endroits, en particulier à Tokyo. Je recommande aux collègues de prêter attention à la diversité de notre pays et de s'appuyer exactement sur cela dans vos voyages touristiques.

Y a-t-il quelque chose dans la culture et la langue japonaise qui a influencé la création de Ruby?

Nous n'avons aucun contrôle sur une telle influence culturelle et c'est difficile à évaluer. Par exemple, en japonais, les phrases sont collées ensemble. De la même manière que le «chaînage de méthodes» fonctionne dans Ruby. C'est peut-être l'influence de la langue japonaise. Le Japon est un pays riche et nous n'avons pas besoin d'un travail acharné constant. L'open source ne fait pas d'argent, mais en travaillant à mon travail principal ou en comptant sur l'argent des sponsors, moi et les contributeurs pouvons soutenir et développer le langage et faire de meilleures technologies. C'est aussi l'influence du Japon et les opportunités qu'il offre.

Et la dernière question insidieuse. Les gens s'imaginent souvent à la place des autres, pensent ce qu'ils feraient, comment ils agiraient. Y a-t-il quelque chose dans la position de l'auteur d'un langage de programmation populaire qui n'est pas évident de l'extérieur?

La création d'un langage de programmation n'est pas une tâche technique très difficile. De nombreux étudiants qui suivent des cours de développement de langages de programmation à l'université peuvent créer leur propre langue et rien n'est prohibitif. La difficulté est que le langage est un moyen d'exprimer ses pensées. Cela s'applique aussi bien aux langages de programmation qu'aux langages naturels: russe, anglais, japonais. Langages de programmation tels que Ruby, Python ou JavaScript - ils aident notre esprit à formuler des pensées. C'est la tâche principale des langages de programmation. Un bon langage de programmation offre une approche pour formuler des pensées. Pour Ruby, cette approche est «la productivité du développement et le plaisir d'écrire du code». Pour d'autres langues, cela pourrait être «simplicité», «efficacité» ou autre chose. Chaque langue a sa propre approche. Et si vous l'aimez,ce que Ruby propose pour formuler des pensées est votre langage.

All Articles