Sous le capot des compilateurs JIT de Ruby

2025-09-13
Sous le capot des compilateurs JIT de Ruby

Cet article explore le fonctionnement interne des compilateurs JIT de Ruby, tels que YJIT et ZJIT. Il explique comment le code compilé JIT coexiste avec le bytecode et comment Ruby bascule entre les modes d'exécution. L'article clarifie également comment Ruby décide quels méthodes compiler (en fonction du nombre d'appels) et quand le code compilé JIT revient à l'interpréteur (par exemple, activation de TracePoint ou méthodes principales redéfinies). En résumé, le compilateur JIT de Ruby trouve un équilibre entre performance et exactitude grâce à un mécanisme ingénieux.

Lire plus
Développement

Programmation Polyglotte Propulsée par l'IA : D'un Développeur Ruby Uniquement à un Développeur Multilingue en Moins d'un An

2025-07-23
Programmation Polyglotte Propulsée par l'IA : D'un Développeur Ruby Uniquement à un Développeur Multilingue en Moins d'un An

Un développeur ayant utilisé uniquement Ruby pendant dix ans partage son expérience de la maîtrise de plusieurs langages — C++, C et Rust — en moins d'un an, grâce à des outils de codage d'IA tels que Cursor et Claude Code. L'auteur explique comment l'assistance de l'IA a permis de surmonter les défis liés à l'apprentissage des langages de programmation système, permettant des contributions efficaces à des projets tels que Sorbet, RBS et ZJIT. L'IA n'a pas agi comme un générateur de code, mais comme un partenaire de programmation possédant des compétences complémentaires, clarifiant la syntaxe, les modèles et répondant aux questions, réduisant considérablement la courbe d'apprentissage et permettant des contributions significatives dès le premier jour. Bien que l'IA accélère l'apprentissage, l'expertise humaine reste essentielle pour la correction de trajectoire. L'auteur pense que la programmation assistée par l'IA est l'avenir du développement de logiciels.

Lire plus
Développement programmation polyglotte

Ruby 3.5 : Allocation d’objets six fois plus rapide grâce à l’intégration de Class#new

2025-05-22
Ruby 3.5 : Allocation d’objets six fois plus rapide grâce à l’intégration de Class#new

Ruby 3.5 réalise une accélération significative de l’allocation d’objets, jusqu’à six fois plus rapide, grâce à l’intégration (inlining) de la méthode `Class#new`. L’article détaille cette optimisation, présentant les résultats des benchmarks, analysant les goulots d’étranglement des performances et expliquant la technique d’intégration. En éliminant les frais généraux des appels de méthodes, en réduisant la copie des paramètres et en améliorant les taux de succès du cache inline, cette optimisation traite efficacement les problèmes de performances liés à l’allocation d’objets Ruby, bien qu’elle introduise de légères préoccupations de compatibilité descendante.

Lire plus
Développement Machine virtuelle

Analyse statique des types pour Ruby sans annotations de type

2025-03-13
Analyse statique des types pour Ruby sans annotations de type

Les ingénieurs de Shopify ont développé un nouvel analyseur de type statique qui infère les informations de type pour les programmes Ruby sans nécessiter d'annotations de type. L'analyseur utilise un algorithme Sparse Conditional Constant Propagation (SCCP) amélioré et un suivi précis du flux de données pour gérer efficacement l'analyse de type interprocédurale, en complétant l'analyse en quelques secondes, même pour les programmes comportant un grand nombre de classes. Cette recherche propose une nouvelle approche pour optimiser les compilateurs pour les langages dynamiques et ouvre de nouvelles possibilités d'amélioration des performances dans les langages dynamiques comme Ruby.

Lire plus

Accélérer le FFI de CRuby avec la compilation JIT

2025-02-12
Accélérer le FFI de CRuby avec la compilation JIT

Cet article explore l'utilisation de la compilation Just-In-Time (JIT) pour améliorer les performances de l'interface de fonction étrangère (FFI) de Ruby. Des benchmarks montrent les inconvénients de performance du FFI par rapport aux extensions natives. L'auteur présente FJIT, une solution utilisant RJIT et la génération de code machine personnalisé pour générer du code machine en temps réel afin d'appeler des fonctions externes, contournant ainsi la surcharge du FFI. FJIT surpasse les extensions natives dans les tests, offrant une alternative hautes performances aux développeurs Ruby. Actuellement un prototype ne supportant que ARM64, on s'attend à ce que FJIT s'étende à d'autres architectures et appels de fonctions plus complexes à l'avenir.

Lire plus
Développement