La communauté mondiale Ruby est synonyme de convivialité et de soutien, qui utilise l'expression "Matz est gentil et donc nous sommes gentils", ce qui est communément abrégé en MINASWAN. Matz sait comment charmer son public et il a lancé son discours à la conférence Ruby à Bath avec le commentaire suivant: “Nous, les Japonais adorons le bain, nous prenons des bains tous les jours au lieu de prendre des douches, ce qui signifie que Bath est agréable, c'est une très belle ville, donc nous sommes gentils. BINSWAN " Crédit: Dan Bartlett

Comment est né le logiciel? Ce n’est pas tout à fait la première question que vous vous attendez à entendre posée par un orateur lors d’une conférence de programmation, mais c’est le génial, créateur japonais du langage de programmation Ruby, Yukihiro. “Matz” Matsumoto, et il parle à plus de 500 développeurs Ruby lors de la conférence annuelle Bath Ruby, qui dure deux jours..

Le langage Ruby a célébré ses 25 ans en février, bien que la première version de Ruby (0,95) ait été officiellement publiée en décembre 1995. En réponse à sa propre question philosophique, Matz suggère que le logiciel est né quand il porte son nom. Dans le cas de Ruby, deux ans plus tôt, le 24 février 1993, d’où la grande fête à Tokyo et sur les médias sociaux. Matz dit qu'il voulait l'appeler comme un bijou: “Ruby était petit, Ruby était beau et plus cher, alors j'ai nommé mon langage Ruby,” dit-il en plaisantant avec sa communauté.

Cependant, Matz n'était pas au Royaume-Uni pour la première fois en cinq ans pour manger du gâteau d'anniversaire. Ruby a peut-être atteint sa maturité, mais on peut se demander s'il peut survivre encore 25 ans. Comme son créateur, le langage Ruby est très sympathique et attire des adeptes passionnés. Sa syntaxe, par exemple, est très lisible mais expressive de manière concise et, en tant que langage de programmation dynamique, réfléchissant, orienté objet et polyvalent, elle est intuitive et facile à apprendre. Ruby essaye de ne pas restreindre ceux qui l'utilisent ou comme Matz est souvent cité: “Ruby est conçu pour rendre les programmeurs heureux.”

Mais tout le monde n'est pas heureux. La popularité du langage Ruby est renforcée depuis de nombreuses années par le succès du framework d’applications Web Ruby on Rails (RoR), qui a dominé la scène Web, en particulier parmi les startups qui souhaitaient faire face à une grande partie des tâches lourdes. Cette montée en puissance dominante a permis à Ruby d'atteindre la cinquième place du classement des langues RedMonk en 2012, qui utilise une combinaison de classements de langues GitHub et Stack Overflow pour évaluer la popularité d'une langue, [depuis lors, elle est tombée à la huitième place].

Mais RoR, bien que populaire, n’est pas la superstar qu’il était et a été confronté à une concurrence féroce car des problèmes tels que l’échelle sont devenus une préoccupation majeure pour les entreprises du Web. Le framework JavaScript Node.js, par exemple, est devenu populaire car il nécessite moins de mémoire pour gérer de nombreuses connexions en raison de ses fonctions de rappel..

La position de Ruby dans le top 10 des langages de programmation a lentement diminué dans le classement RedMonk depuis 2012 - dans l'Indice de popularité du langage Tiobe - elle est tombée dans le top 10, mais est probablement le reflet de sa maturité et de la domination décroissante de le cadre d'application Web Ruby on Rails.

(Image: © Redmonk.com)

Il est clair que Matz est conscient que l'adoption de tout langage de programmation est stimulée par les projets et les cadres issus de la communauté et de l'écosystème d'une langue - RoR en était un exemple étonnant - et non généralement à partir des langages eux-mêmes, même si Ruby crée une beaucoup d'amour de ses utilisateurs. Ainsi, tout en souhaitant exprimer ses regrets pour les erreurs passées qu'il avait commises dans son langage lors de la conférence Bath Ruby, il souhaitait également définir la voie à suivre pour résoudre les problèmes de performances et d'échelle rencontrés par les développeurs pour ne pas utiliser Ruby..

L'approche de Matz pour aborder les problèmes clés tient également compte de deux tendances clés qu'il voit pour l'avenir: l'évolutivité et, ce qu'il a appelé le compagnon plus intelligent..

Pour lutter contre l'évolutivité et créer une plus grande productivité, Matz croit, “Une exécution plus rapide, moins de code, une petite équipe [sont] les clés de la productivité.”

Les ordinateurs deviennent de plus en plus rapides mais cela ne suffit pas, “nous avons besoin d'une exécution plus rapide car nous devons traiter plus de données et plus de trafic, reconnaît Matz. “Nous atteignons la limite de performance des cœurs. C'est pourquoi Ruby 3.0 a pour objectif d'être trois fois plus rapide que Ruby 2.0.” ou ce que Matz appelle 'Ruby3x3'. “C'est facile à dire” Matz a admis et dans les jours de 1,8, il dit que Ruby était “trop lent” et c'était une erreur.
Les travaux de Koichi Sasada sur YARV (Yet Another Ruby VM) ont amélioré les performances de Ruby 1.9. “Depuis,” dit Matz, “nous avons travaillé dur pour améliorer les performances de la machine virtuelle, mais cela ne suffit pas.”

Temps pour JIT

Pour améliorer encore les performances, Ruby introduit la technologie JIT (Just-In-Time), déjà utilisée par JVM et d’autres langues.. “Nous avons donc créé un prototype de ce compilateur JIT afin que cette année, probablement le jour de Noël, Ruby 2.6 soit publié,” Matz confirmé.
Vous pouvez essayer l'implémentation initiale du compilateur MJIT dans l'aperçu 2.6. Actuellement, vous pouvez vérifier et compiler les programmes Ruby en code natif avec l'option --jit, mais Matz dit que c'est “pas optimisé” bien que pour “au moins, il nécessite deux fois plus de temps que Ruby 2.0,” ce qu'il dit “semble prometteur et offre beaucoup d'espace pour améliorer les performances du compilateur JIT”. Pour les tâches gourmandes en ressources, en particulier, Matz semblait confiant qu’il serait capable d’accomplir trois fois l’amélioration des performances..

Selon les commentaires trouvés dans le code MJIT par John Hawthorn, le prototype actuel de compilateur JIT a une approche assez inhabituelle, car il utilise les compilateurs C, GCC et LLVM Clang, pour la mise en œuvre et, bien que le code Ruby ne comporte qu'un seul thread, MJIT est compilé sur une deuxième fil.
Shannon Skipper a sans doute fourni l'explication la plus claire du fonctionnement de MJIT:

“Avec MJIT, certaines instructions Ruby YARV sont converties en code C et placées dans un fichier .c, qui est compilé par GCC ou Clang dans un fichier de bibliothèque dynamique .so. RubyVM peut ensuite utiliser le code natif précompilé et mis en cache de la bibliothèque dynamique la prochaine fois que RubyVM verra cette même instruction YARV..

L’évolutivité, estime également Matz, devrait signifier créer moins de code “plus de code, c'est plus de maintenance, plus de débogage, plus de temps, moins de productivité,” et il a plaisanté “plus de cauchemar.”

Yukihiro “Matz” Matsumo, l'informaticien japonais qui a créé Ruby, était au Royaume-Uni pour organiser le premier Hack Challenge du pays pour les aspirants auteurs de la langue, organisé à Cookpad à Bristol, et pour prendre la parole à la conférence Bath Ruby..

Moins de code Ruby ne signifiera cependant pas de changements importants dans la syntaxe du langage. En grande partie parce qu'il y a peu de place pour le changement: “nous sommes à court de caractères. Presque tous sont utilisés,” dit Matz.

En tant qu'exposant du développement sans ego, il n'est pas prêt non plus à modifier la syntaxe pour préserver son estime de soi et à voir les programmes Ruby existants rompus. Il a donc pris soin de préciser: “on ne va pas changer beaucoup la syntaxe de Ruby.”

Le processus devrait également être traité par des équipes plus petites, selon Matz, pour gérer l'évolutivité et augmenter la productivité: “Si votre équipe est plus grande que le fait, elle peut manger deux pizzas,” citant la règle des deux pizzas d'Amazon Jeff Bezos “alors votre équipe est trop grande.” Franchement, cela dépend peut-être de votre équipe et de leur passion pour la pizza, mais l'idée, dit Matz, est basée sur l'expérience personnelle., “si votre équipe est plus grande, vous avez besoin de plus de communication et la communication elle-même est son coût.”

Plus d'abstraction

Il y a eu des débats houleux au cours des dernières années sur le besoin d'abstractions supplémentaires de Ruby fournissant des services aux développeurs pour leur permettre de créer des applications adaptées à différents domaines. Il était donc intéressant d'entendre Matz dire que Ruby avait besoin de “plus d'abstraction”, et mentionnant Ruby on Rails, l'utilisation de l'abstraction Model-View-Controller (MVC) à titre d'exemple. Le créateur de Ruby ne pensait pas qu'ils étaient parfaits “mais ils fournissent le genre d'abstraction qui est vital pour la productivité future.”

Une abstraction clé sur laquelle il a parlé était un projet d’abstraction simultané appelé Guild..

“Une chose que je regrette dans la conception de Ruby était du fil […] il est trop primitif,” Matz admet. Mais Ruby est victime de son propre succès: le langage est utilisé par tellement de gens, Matz a donc l'impression qu'il est trop tard pour supprimer le fil..

“Je pense que c'est bien d'inclure une nouvelle abstraction,” il s'est risqué “et décourager l'utilisation de threads” A l'avenir. "Guild est l'expérience de Ruby pour fournir une meilleure approche. Guild est totalement isolée.,” Matz a dit au public à Bath.

“Fondamentalement, nous n'avons pas d'état partagé entre les guildes. Cela signifie que nous n’avons pas à nous soucier du partage d’État, nous ne devons donc pas nous soucier des verrous ou des exclusivités mutuelles. Entre guildes, nous communiquons avec un canal ou une file d'attente.”

Matz s'attend à envoyer l'abstraction concurrente de Guild en Ruby 2.7 ou 2.8.
Steep est un autre projet portant le nom de code que Ruby a en projet. Voici une tentative d'analyse de type statique pour Ruby: “Il est difficile d'analyser les informations de type Ruby, car Ruby est un langage typé dynamiquement, vous pouvez donc tout faire avec tous les types.,” a expliqué Matz. Certains sous-ensembles de Ruby peuvent être typés statiquement. Matz dit donc qu'ils peuvent ajouter ces vérifications de type statique, qui sont: “un peu comme une information de type défini par l'utilisateur TypeScript […]. Nous allons en déduire autant que possible et nous essayons d'obtenir les informations de ces fichiers externes définis par le type ou de l'analyse du type de profil d'exécution… ”
En utilisant cette analyse, suggère Matz, les développeurs seront capables de détecter plus d’erreurs lors de la compilation., “Nous n'allons pas implémenter une sécurité de détection à 100%, ce n'est pas possible pour Ruby, mais nous pouvons détecter 20 à 40% des erreurs.,” qui Matz dit est beaucoup mieux que rien du tout.

Ruby ne s'est pas senti vraiment mort à la conférence Bath Ruby, où plus de 500 développeurs se sont réunis pour deux jours de conférences et d'ateliers (et de karaoké). La conférence annuelle est le plus grand événement pour développeurs Ruby au Royaume-Uni et le premier événement depuis cinq ans à accueillir Yukihiro. “Matz” Matsumoto, le créateur de Ruby.

(Image: © Bath Ruby)

Matsumoto a également évoqué le fait que Ruby devienne un “compagnon plus intelligent” ainsi que le meilleur ami du programmeur. “Nous [sommes] au début des ordinateurs plus intelligents, par exemple, RuboCop [analyseur de code statique] est un moyen de vous aider,” bien que, a commenté Matz à beaucoup de rire dans le public, il est “pas un grand fan du livre de règles par défaut de RuboCop.” Matz a suggéré qu'à l'avenir, lorsque vous compilez un programme “Ruby pourrait suggérer [par exemple] 'Vous appelez cette méthode avec une chaîne d'argument, mais vous n'avez pas l'intention d'appeler cette méthode avec un entier'”. S'exprimant après sa allocution, Matz a expliqué un peu plus ses espoirs d'interactivité de la programmation, affirmant qu'ils ressemblaient beaucoup à Jarvis de Tony Stark. Matz dit qu'il veut essentiellement voir “une IA [qui] va interagir avec moi pour organiser de meilleurs logiciels.”

Attention à l'écart

Le changement apporte la possibilité de logiciels qui ne fonctionnent plus comme prévu. C'est une préoccupation qui hante Matz des erreurs du passé: “Dans le passé, nous faisions un grand écart, par exemple entre 1,8 et 1,9.,” dit Matz. “Nous avons fait un grand écart et introduit de nombreux changements radicaux, de sorte que notre communauté a été divisée en deux pendant cinq ans..”
Bien que ce genre de chose se soit produit par le passé, comme dans l'exemple classique de Python 2 et Python 3, Matz considère cela comme une tragédie: “nous n'allons plus jamais faire cette erreur, nous allons donc faire une évolution continue. Nous allons ajouter le compilateur JIT à la version 2.6 et ne pas attendre Ruby 3.0, nous allons ajouter un type d’abstraction simultanée dans Ruby 2.7 à la version 2.8, mais ce ne sera pas un changement radical. […] Nous l'aurons pour que chaque programme Ruby 2 fonctionne en Ruby 3.”

Inverser la lente trajectoire actuelle de Ruby ne sera pas une tâche facile et Matz semble s'en rendre compte. En commentant en voyant les récents résultats de l'enquête Stack Overflow Developer Survey le matin du discours, son sourire a brièvement disparu: “Go and Rust sont les langues les plus aimées et Ruby ne figure malheureusement pas dans la liste. Je crois que Ruby deviendra chaud à l'avenir. Les gens aiment les nouvelles technologies. Il y a dix ans, Ruby était très chaud à cause de Rails. Ces jours Ruby n'est pas considéré chaud, mais il est stable.“

Ruby, cependant, a franchi le cap sur sa maturité et Matz n'a pas l'intention d'abandonner: “Ruby est un bon langage pour vous aider à devenir productif et je veux que Ruby soit comme ça pour toujours, si possible. Cela signifie que nous devons évoluer en permanence pour toujours, nous ne pouvons donc pas nous arrêter; nous ne pouvons pas arrêter”

Une partie de cet élan se reflète dans le tout premier défi Ruby Hack organisé en dehors du Japon. Cela s'est déroulé la semaine dernière au nouveau siège international de Cookpad, une plate-forme de partage de recettes qui emploie beaucoup de développeurs Ruby, à Bristol. Ces défis sont une opportunité pour les futurs aspirants d'apprendre à étendre les fonctionnalités de Ruby, à corriger les bugs et à améliorer les performances de Ruby..

Selon Miles Woodroffe, CTO de Cookpad, sponsor principal de la conférence Bath Ruby, ce hack était axé sur l'interpréteur Ruby, qui explique aux ordinateurs comment exécuter des programmes écrits en code Ruby..

L'un des objectifs du hack a permis aux participants de contribuer directement à la prochaine version de Ruby Interpreter..

Alors que la sortie de Ruby 3 se rapproche, prévue officieusement pour 2020, il est clair que Matz veut continuer à fournir un outil qui vous aide à vous concentrer sur les aspects amusants et agréables de la programmation..

Deux choses sont évidentes quand on parle à Yukihiro “Matz” Matsumoto. Premièrement, il fera tout ce qui est en son pouvoir pour permettre à Ruby de survivre et de prospérer et, deuxièmement, il s’amuse beaucoup à faire ce qu’il fait. Il est passionné par Ruby et sa communauté et son point de vue est assez simple: programmer est amusant, il s’amuse depuis 25 ans à créer Ruby et à 52 ans, il espère pouvoir passer les 25 prochaines années. autant de plaisir à travailler sur la langue qu'il a imaginée et écrite dans - un cahier maintenant perdu - à 17 ans.

  • Ceci est un extrait d’un article du mensuel mensuel User and Developer, de l’autorité reconnue sur GNU / Linux et de l’écosystème gratuit et à code source ouvert pour les passionnés de Linux, les professionnels de l’informatique et les développeurs. Abonnez-vous aujourd'hui et recevez 5 numéros pour 5 £ (Royaume-Uni uniquement. L'offre prend fin le 30 avril 2018).