IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Pourquoi Chrome a activé par défaut le Garbage Collection de WebAssembly ?
Avec WasmGC, le ramasse-miettes du langage de programmation n'a plus besoin de faire partie du portage vers Wasm

Le , par Jade Emy

96PARTAGES

12  0 
Thomas Steiner, défenseur des développeurs chez Google, a écrit que dans Chrome, le Garbage Collection ou ramasse-miettes WebAssembly (WasmGC) est désormais activé par défaut. Dans un billet de blog, il parle des raisons et des conséquences, tout en donnant son avis. Il donne aussi deux exemples de langages de programmation compatibles avec WasmGC en action.

Dans Chrome, le code JavaScript (et WebAssembly) est exécuté par le moteur open source V8 de Google, qui dispose déjà de capacités de Garbage Collection ou ramasse-miettes. "Cela signifie que les développeurs qui utilisent, par exemple, PHP compilé en Wasm, finissent par envoyer une implémentation de garbage collector du langage porté (PHP) au navigateur qui dispose déjà d'un garbage collector", écrit Thomas Steiner, "ce qui est aussi inutile que cela en a l'air".

Mais il s'est ensuite interrogé sur les conséquences pour les langages de programmation de haut niveau (avec leur propre ramasse-miettes intégré) qui sont compilés dans WebAssembly. Le billet de blog comprend deux exemples de langages de programmation compatibles avec WasmGC en action :
  • "L'un des premiers langages de programmation qui a été porté sur Wasm grâce à WasmGC est Kotlin sous la forme de Kotlin/Wasm."
  • "Les équipes Dart et Flutter de Google préparent également le support de WasmGC. Le travail de compilation de Dart vers Wasm est presque terminé, et l'équipe travaille sur le support d'outils pour livrer des applications web Flutter compilées en WebAssembly."

Voici un extrait du billet de blog :


Il existe deux types de langages de programmation : les langages de programmation à ramasse-miettes et les langages de programmation qui nécessitent une gestion manuelle de la mémoire. Parmi les premiers, on peut citer Kotlin, PHP ou Java. Des exemples du second sont C, C++ ou Rust. En règle générale, les langages de programmation de haut niveau sont plus susceptibles d'avoir une fonction standard de ramasse-miettes. Dans ce billet de blog, l'accent est mis sur ces langages de programmation à collecte de déchets et sur la manière dont ils peuvent être compilés en WebAssembly (Wasm). Mais qu'est-ce que le garbage collection (souvent appelé GC) pour commencer ?

Garbage collection ou ramasse-miettes

En termes simplifiés, l'idée du ramasse-miettes est la tentative de récupérer la mémoire qui a été allouée par le programme, mais qui n'est plus référencée. Cette mémoire est appelée "garbage". Il existe de nombreuses stratégies pour mettre en œuvre le ramasse-miettes. L'une d'entre elles est le comptage de références, dont l'objectif est de compter le nombre de références à des objets en mémoire. Lorsqu'il n'y a plus de références à un objet, celui-ci peut être marqué comme n'étant plus utilisé et donc prêt pour le ramasse-miettes. Le garbage collector de PHP utilise le comptage de références, et l'utilisation de la fonction xdebug_debug_zval() de l'extension Xdebug vous permet de jeter un coup d'œil sous son capot. Considérons le programme PHP suivant.

Code : Sélectionner tout
1
2
3
4
5
6
7
<?php
  $a= (string) rand();
  $c = $b = $a;
  $b = 42;
  unset($c);
  $a = null;
?>
Le programme affecte un nombre aléatoire converti en chaîne de caractères à une nouvelle variable appelée a. Il crée ensuite deux nouvelles variables, b et c, et leur affecte la valeur de a. Ensuite, il réaffecte b au nombre 42, puis désaffecte c. Enfin, il définit la valeur de a à null. En annotant chaque étape du programme avec xdebug_debug_zval(), vous pouvez voir le compteur de références du garbage collector à l'œuvre.

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
<?php
  $a= (string) rand();
  $c = $b = $a;
  xdebug_debug_zval('a');
  $b = 42;
  xdebug_debug_zval('a');
  unset($c);
  xdebug_debug_zval('a');
  $a = null;
  xdebug_debug_zval('a');
?>
L'exemple ci-dessus produira les journaux suivants, où vous verrez comment le nombre de références à la valeur de la variable a diminue après chaque étape, ce qui est logique étant donné la séquence du code. (Votre nombre aléatoire sera bien sûr différent).

Code : Sélectionner tout
1
2
3
4
5
6
7
8
a:
(refcount=3, is_ref=0)string '419796578' (length=9)
a:
(refcount=2, is_ref=0)string '419796578' (length=9)
a:
(refcount=1, is_ref=0)string '419796578' (length=9)
a:
(refcount=0, is_ref=0)null
Le comptage de références est utilisé en PHP, mais la plupart des navigateurs modernes n'utilisent pas le comptage de références pour le ramasse-miettes.
Il y a d'autres défis avec le garbage collection, comme la détection des cycles, mais pour cet article, avoir un niveau de compréhension basique du comptage de références est suffisant.

Les langages de programmation sont mis en œuvre dans d'autres langages de programmation

Les langages de programmation sont implémentés dans d...
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.

Une erreur dans cette actualité ? Signalez-nous-la !