Technologies

Nouveau moteur JIT pour PHP-8.4/9 : Révolution dans la compilation Just-in-Time

  • 15 septembre 2023
  • 4 min. à lire
PHP se dote d'un nouveau moteur JIT révolutionnaire pour ces futures versions PHP-8.4/9, offrant des performances optimisées grâce à l'Intermediate Repres.

PHP, l'un des langages de programmation web les plus populaires au monde, est sur le point de franchir une étape majeure avec l'introduction d’un nouveau moteur JIT (Juste-à-Temps) qui sera utilisé dans la prochaine version majeure de PHP-8.4/9. Cette innovation promet d'apporter une performance accrue et des possibilités d'optimisation plus étendues.

La prochaine version majeure de PHP fera usage d’un nouveau moteur JIT. Il s’agit désormais d’un compilateur véritablement optimisé qui repose sur une représentation intermédiaire, s’inspirant ainsi du compilateur serveur Java HotSpot (Java HotSpot Server Compiler). De plus, il partage des similitudes notables avec l’IR et le pipeline de compilation utilisés par V8 (V8 TurboFan JavaScript Compiler).

Le compilateur actuel étant difficile à modifier, ce changement pose les fondations pour des améliorations futures et permet d’abstraire de nombreux détails de bas niveau qui étaient présents dans l’ancienne version du JIT PHP.

Dans cet article, nous explorerons en détail les avantages et les inconvénients de cette mise à jour majeure du moteur JIT de PHP.

Comparaison avec l’approche JIT de PHP 8.*, le nouveau paradigme

Le Just-in-Time (JIT) est une technique utilisée dans la compilation des langages informatiques. Elle permet d’améliorer les performances en compilant certaines parties du code source au moment de l’exécution.

Contrairement à l’approche précédente de PHP 8.*, qui générait du code natif directement à partir du bytecode PHP, la version PHP-8.4/9 introduit une approche révolutionnaire basée sur la représentation intermédiaire (IR - Intermediate Representation) - un framework de compilation JIT léger.

Avec l’approche actuelle, le JIT de PHP 8.* compile uniquement certaines parties du code source au moment de l’exécution. Cela permet d’améliorer les performances, mais reste limité en termes d’optimisation globale. En revanche, le nouveau JIT basé sur le framework IR offre une approche plus avancée en compilant tout le code source en une représentation intermédiaire (Intermediate Representation*). Cette représentation permet ensuite d’appliquer des optimisations plus poussées avant l’exécution.

Avantages clés de la nouvelle compilation JIT

Tout d’abord, grâce à cette nouvelle approche, il est possible d’améliorer encore davantage les performances des applications développées avec PHP. En effet, la compilation complète du code source permet une optimisation globale qui peut conduire à des exécutions beaucoup plus rapides.

  • L’utilisation de l’IR ouvre la porte à une optimisation plus poussée et à une allocation de registres plus efficace, se traduisant par un code natif résultant plus performant.
  • Cette nouvelle approche libère PHP des détails de bas niveau tels que les différentes architectures de processeurs, les conventions d’appel, les détails TLS, etc.
  • Il devient également beaucoup plus facile de prendre en charge de nouvelles cibles, comme par exemple l’architecture RISCV.

Un autre avantage notable est la séparation du framework IR du développement de PHP lui-même. Cela signifie que le framework IR peut accepter des contributions de la part d’autres projets, que ce soit pour de nouvelles optimisations, des améliorations ou des corrections de bugs. (IR - Lightweight JIT Compilation Framework)

Le nouveau moteur JIT basé sur le framework IR représente une avancée majeure qui promet d’améliorer significativement les performances et les possibilités offertes par PHP.

Inconvénients et impacts à noter

Cependant, il est important de noter que cette nouvelle méthode de compilation JIT peut entraîner un ralentissement dans le processus de compilation. Bien que cela soit presque imperceptible pour le JIT de traçage, la compilation JIT de Wordpress peut devenir jusqu’à 4 fois plus lente.

Un autre point à prendre en compte est que le framework IR est intégré à PHP en tant que sous-module GIT. Pour l’obtenir, il est nécessaire d’utiliser la commande suivante :

git submodule update --init --recursive

Il est également souligné que bien que cette nouvelle implémentation JIT ait réussi avec succès tous les flux de travail CI, y compris les nightly, elle n’est pas encore considérée comme totalement mature et peut potentiellement provoquer des échecs.

Transition en Douceur et maintien de l’ancienne implémentation au sein de PHP 8.3

Malgré l’introduction de la nouvelle implémentation du JIT basée sur le framework IR pour PHP, l’équipe de développement n’a pas complètement supprimé l’ancienne implémentation présente dans PHP 8.3.

Afin de réduire les risques associés à cette mise à jour majeure, le patch n’élimine pas l’ancienne implémentation JIT, qui est identique à celle de PHP-8.3. Ainsi, il reste possible de construire PHP avec l’ancien JIT en configurant avec l’option --disable-opcache-jit-ir.

En maintenant l’ancienne implémentation, les développeurs ont également pris en compte le fait que certains projets peuvent ne pas être compatibles avec la nouvelle approche ou nécessiter des ajustements supplémentaires avant d’être migrés vers celle-ci.

Cependant, il est nécessaire de noter que bien que maintenue dans PHP 8.3, l’ancienne implémentation du JIT ne bénéficiera plus des mises à jour et des améliorations apportées au nouveau modèle basée sur le framework IR. À l’avenir, il est prévu de supprimer complètement l’ancienne implémentation.

Intégration future du framework IR au dépôt php-src

Des travaux sont actuellement en cours pour intégrer le framework IR au dépôt php-src. Cette intégration vise à rendre plus accessible et plus facile à utiliser cette nouvelle approche du Just in Time.

En effet, les sous-modules git ont une expérience utilisateur terrible et le fait de s’appuyer sur le dépôt de du compte GitHub personnel de Dmitry Stogov est problématique.

Cela facilitera également l’intégration de ces changements dans les futures versions de PHP, garantissant ainsi une évolution continue du système.

Conclusion

Le nouveau moteur JIT pour PHP-8.4/9 basé sur IR promet de redéfinir les performances et les possibilités d’optimisation pour les développeurs PHP du monde entier. Malgré quelques inconvénients mineurs, les avantages significatifs en termes d’efficacité et de flexibilité de ciblage font de cette mise à jour une avancée majeure pour le langage. Chez .LOUD on reste à l’affût des prochaines mises à jour pour découvrir comment cette innovation va façonner l’avenir du développement PHP.

Source

Nicolas Verlhiac

Nicolas Verlhiac

Full stack software expert | E-commerce & CRM

Nous sommes spécialisés dans la création de solutions technologiques innovantes qui aident les entreprises à rester compétitives et à prospérer.

tracking-thumb