Google Chrome et WebAssembly : JavaScript Promise Integration entre en phase d'essai

Par:
fredericmazue

mer, 03/04/2024 - 11:50

JavaScript Promise Integration (JSPI) est une API qui permet au code séquentiel synchrone compilé sur WebAssembly d'accéder aux API Web asynchrones. De nombreuses API Web sont conçues en termes de promesses JavaScript : au lieu d'effectuer immédiatement l'opération demandée, elles renvoient une promesse de le faire. Lorsque l'action est finalement exécutée, l'exécuteur de tâches du navigateur appelle tous les rappels avec la promesse. JSPI s'intègre à cette architecture pour permettre à une application WebAssembly d'être suspendue lorsque la promesse est renvoyée et de reprendre lorsque la promesse est résolue.

De Chrome 123 - version du navigateur au moment où nous écrivons ces lignes - à Chrome 128, JSPI est disponible en version d'essai.

L'extrait de code ci-dessous, qui est un programme C qui calcule la séquence de Fibonacci en externalisant l'ajout d'une fonction JavaScript, illustre comment utiliser cette fonctionnalité.

// This is C code.
long promiseFib(long x) {
  if (x == 0)
    return 0;
  if (x == 1)
    return 1;
  // This is where the C code calls asynchronous JavaScript.
  return promiseAdd(promiseFib(x - 1), promiseFib(x - 2));
}

// Addition artificially wrapped in a Promise.
EM_ASYNC_JS(long, promiseAdd, (long x, long y), {
  // This is asynchronous JavaScript code.
  return Promise.resolve(x+y);
});

JSPI est spécifié ici