
Ruby 3.3 apporte avec lui l'analyseur Prism, un analyseur de descente r�cursive portable, tol�rant aux erreurs et facile � maintenir. Prism est consid�r� comme pr�t pour la production et peut �tre utilis� d�s maintenant � la place de l'analyseur Ripper.
Ruby 3.3 ajoute �galement RJIT en tant que compilateur purement Ruby pour remplacer MJIT. Pour l'instant, RJIT ne supporte que x86_64 sur les architectures de type Unix et n'est consid�r� que comme exp�rimental. Bien que RJIT soit int�ressant, il n'est pas encore pr�t pour la production et il est recommand� aux utilisateurs d'utiliser le compilateur YJIT. Avec cette version 3.3 de Ruby, YJIT a re�u de nombreuses am�liorations en termes de performances, d'utilisation de la m�moire et d'autres am�liorations qui rendent ce compilateur JIT bien meilleur que les versions pr�c�dentes.
Ruby 3.3 utilise �galement Lrama comme g�n�rateur d'analyseur syntaxique en remplacement de Bison, le planificateur de threads M:N a �t� introduit, et il y a une vari�t� d'autres am�liorations de performance telles que le ramasse-miettes de Ruby.
[QUOTE]
Sortie de Ruby 3.3.0
Nous avons le plaisir d'annoncer la sortie de Ruby 3.3.0. Ruby 3.3 ajoute un nouvel analyseur nomm� Prism, utilise Lrama comme g�n�rateur d'analyseur, ajoute un nouveau compilateur JIT pur-Ruby nomm� RJIT, et de nombreuses am�liorations de performance, en particulier YJIT.
Prism
- Introduction de l'analyseur Prism comme gem par d�faut
- Prism est un analyseur de descente r�cursive portable, tol�rant aux erreurs et maintenable pour le langage Ruby.
- Prism est un analyseur de descente r�cursive portable, tol�rant aux erreurs et maintenable pour le langage Ruby.
- Prism est pr�t pour la production et activement maintenu, vous pouvez l'utiliser � la place de Ripper
- Il existe une documentation compl�te sur l'utilisation de Prism.
- Prism est � la fois une biblioth�que C qui sera utilis�e en interne par CRuby et une gem Ruby qui peut �tre utilis�e par n'importe quel outil qui a besoin d'analyser du code Ruby.
- Les m�thodes notables de l'API Prism sont :
- Prism.parse(source) qui retourne l'AST en tant que partie d'un objet de r�sultat d'analyse.
- Prism.parse_comments(source) qui retourne les commentaires
- Prism.parse_success ?(source) qui retourne vrai s'il n'y a pas d'erreurs.
- Vous pouvez faire des pull requests ou des issues directement sur le d�p�t Prism pour contribuer.
- Vous pouvez maintenant utiliser ruby --parser=prism ou RUBYOPT="--parser=prism" pour exp�rimenter le compilateur Prism. � noter que ce drapeau n'est utilis� que pour le d�bogage.
Utilisation de Lrama au lieu de Bison
- Remplacement de Bison par le g�n�rateur d'analyseur LALR de Lrama
- Si vous �tes int�ress�, veuillez consulter La vision future de l'analyseur Ruby
- L'analyseur interne de Lrama est remplac� par l'analyseur LR g�n�r� par Racc pour des raisons de maintenabilit�.
- Les r�gles de param�trage ( ?, *, +) sont support�es, elles seront utilis�es dans Ruby parse.y
YJIT
- Am�liorations majeures des performances par rapport � Ruby 3.2
- La prise en charge des arguments splat et rest a �t� am�lior�e.
- Des registres sont allou�s pour les op�rations de pile de la machine virtuelle.
- Plus d'appels avec des arguments optionnels sont compil�s. Les gestionnaires d'exception sont �galement compil�s.
- Les types d'appels non pris en charge et les sites d'appels m�gamorphiques ne sortent plus vers l'interpr�teur.
- Les m�thodes de base comme Rails #blank? et les m�thodes sp�cialis�es #present? sont int�gr�es.
- Integer#*, Integer#!=, String#!=, String#getbyte, Kernel#block_given?, Kernel#is_a?, Kernel#instance_of?, et Module#=== sont sp�cialement optimis�s.
- La vitesse de compilation est d�sormais l�g�rement sup�rieure � celle de Ruby 3.2.
- Plus de 3 fois plus rapide que l'interpr�teur sur Optcarrot !
- Utilisation de la m�moire consid�rablement am�lior�e par rapport � Ruby 3.2
- Les m�tadonn�es du code compil� utilisent beaucoup moins de m�moire.
- --yjit-call-threshold est automatiquement augment� de 30 � 120 lorsque l'application a plus de 40 000 ISEQs.
- --yjit-cold-threshold est ajout� pour ne pas compiler les ISEQs froides.
- Un code plus compact est g�n�r� sur Arm64.
- Le GC du code est maintenant d�sactiv� par d�faut
- --yjit-exec-mem-size est trait� comme une limite stricte o� la compilation du nouveau code s'arr�te.
- Pas de chute soudaine des performances due au GC de code. Meilleur comportement du copy-on-write sur les serveurs reforking avec Pitchfork.
- Vous pouvez toujours activer le GC de code si vous le souhaitez avec --yjit-code-gc
- Ajout de RubyVM::YJIT.enable qui permet d'activer YJIT � l'ex�cution.
- Vous pouvez d�marrer YJIT sans modifier les arguments de la ligne de commande ou les variables d'environnement. Rails 7.2 activera YJIT par d�faut en utilisant cette m�thode.
- Cela peut aussi �tre utilis� pour activer YJIT seulement une fois que votre application a fini de d�marrer. --yjit-disable peut �tre utilis� si vous souhaitez utiliser d'autres options YJIT tout en d�sactivant YJIT au d�marrage.
- D'autres statistiques YJIT sont disponibles par d�faut
- yjit_alloc_size et plusieurs autres statistiques li�es aux m�tadonn�es sont maintenant disponibles par d�faut.
La statistique ratio_in_yjit produite par --yjit-stats est maintenant disponible dans les versions release, une version sp�ciale stats ou dev n'est plus n�cessaire pour acc�der � la plupart des statistiques.
- yjit_alloc_size et plusieurs autres statistiques li�es aux m�tadonn�es sont maintenant disponibles par d�faut.
- Ajout de capacit�s de profilage
- --yjit-perf est ajout� pour faciliter le profilage avec Linux perf.
- --yjit-trace-exits supporte maintenant l'�chantillonnage avec --yjit-trace-exits-sample-rate=N
- Tests plus approfondis et corrections de bogues multiples
RJIT
- Introduction d'un compilateur JIT purement Ruby, RJIT, qui remplace MJIT.
- RJIT ne supporte que l'architecture x86-64 sur les plateformes Unix.
- Contrairement � MJIT, il ne n�cessite pas de compilateur C � l'ex�cution.
- RJIT n'existe qu'� des fins exp�rimentales.
- Vous devriez continuer � utiliser YJIT en production.
- Vous devriez continuer � utiliser YJIT en production.
- Si vous �tes int�ress� par le d�veloppement de JIT pour Ruby, vous pouvez consulter la pr�sentation de k0kubun lors de la troisi�me journ�e de RubyKaigi.
Planificateur de threads M:N
- Le planificateur de threads M:N a �t� introduit.
- M threads Ruby sont g�r�s par N threads natifs (threads OS), ce qui r�duit les co�ts de cr�ation et de gestion des threads.
- La compatibilit� avec l'extension C peut �tre rompue, de sorte que le planificateur de threads M:N est d�sactiv� par d�faut sur le Ractor principal.
- La variable d'environnement RUBY_MN_THREADS=1 active les threads M:N sur le Ractor principal.
- Les threads M:N sont toujours activ�s sur les Ractors non principaux.
- La variable d'environnement RUBY_MAX_CPU=n d�finit le nombre maximum de N (nombre maximum de threads natifs). La valeur par d�faut est 8.
- Comme un seul thread Ruby par Ractor peut fonctionner en m�me temps, le nombre de threads natifs utilis� sera le plus petit entre le nombre sp�cifi� dans RUBY_MAX_CPU et le nombre de Ractors en cours d'ex�cution. Ainsi, les applications � un seul Ractor (la plupart des applications) n'utiliseront qu'un seul thread natif.
- Pour prendre en charge les op�rations de blocage, plus de N threads natifs peuvent �tre utilis�s.
Am�lioration des performances
[LIST][*]defined ?(@ivar) est optimis� avec les formes d'objets.
[*]La...[/*]
La fin de cet article est r�serv�e aux abonn�s. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer � vous proposer des publications.