JavaScriptCore, le moteur JavaScript du moteur de rendu de pages web WebKit d'Apple, comporte un nouveau format de bytecode qui améliore l’usage de la mémoire et la sécurité du typage. D’après le bulletin publié le 21 juin, l'objectif de ce nouveau format était de réduire la consommation de mémoire et de permettre la mise en cache du bytecode sur disque. L'équipe de WebKit affirme que ce format utilise 50 % de mémoire en moins en moyenne, ce qui se traduit, pour de gros sites Web en JavaScript comme Facebook ou Reddit, par une réduction globale de 10 % de l'utilisation de la mémoire.

Ce format apporte deux changements importants. D’une part, il n'y a plus d'encodage lié séparé pour l'exécution. Cela signifie que le bytecode ne peut plus être directement threadé, puisque l'adresse de l'instruction ne peut plus être stockée sur le disque, car elle change à chaque invocation du programme. D’autre part, pour que le format unique convienne à la fois au stockage et à l'exécution, les instructions peuvent être codées en format étroit (narrow) ou large (wide). Avec une instruction narrow, l'opcode et les opérandes prennent chacun un octet. Une instruction wide consiste en un opcode spécial à un octet - op_wide - suivie d'une série d'emplacements de quatre octets pour l'opcode original et ses arguments

L'effort est particulièrement visible avec les services web courants. (Crédit Webkit)

Ce bytecode dispose également d'une table de métadonnées. Lors du linking du bytecode, une table auxiliaire est initialisée avec toutes les données inscriptibles associées à une instruction donnée. De plus, la sécurité du typage a été renforcée grâce à l'amélioration de l'infrastructure liée au bytecode. Une API de mise en cache pour le nouveau bytecode est en cours de développement dans le référentiel WebKit. Les développeurs peuvent contribuer à ce travail sur bugs.webkit.org. Les développeurs impliqués dans le projet voulaient résoudre deux problèmes majeurs posés par l'ancien format de bytecode. D’abord, il utilisait trop de mémoire. Ensuite, il incluait un flux d'instructions qui était inscriptible, ce qui empêchait le mapping de mémoire du flux de bytecode. Les optimisations de l'ancien format de bytecode comme le threading direct avaient également perdu de leur efficacité.

Le nouveau format de bytecode est disponible dans le navigateur Safari 12.1, livré avec iOS 12.1 et MacOS 10.14.4, et dans Safari Technology Preview. Safari Technology Preview est téléchargeable sur webkit.org.