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; ?> |
| 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');
?> |
| 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.
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.