Dépasser la limite des 2 Go : E/S asynchrones pour les fichiers volumineux dans WebAssembly

2025-03-04
Dépasser la limite des 2 Go : E/S asynchrones pour les fichiers volumineux dans WebAssembly

L'auteur avait précédemment implémenté setjmp dans WebAssembly, contournant la dépendance de WASI libc à la proposition de gestion des exceptions. Cependant, cette approche était limitée aux fichiers de moins de 2 Go. Cet article détaille comment utiliser l'API File et le type Blob pour créer un système de fichiers basé sur la mémoire afin de gérer des fichiers plus volumineux. L'E/S web étant asynchrone tandis que les langages système sont généralement synchrones, Asyncify a été utilisé pour relier les paradigmes. L'auteur a rencontré des problèmes d'optimisation avec wasm-opt, qu'il a résolus en créant un faux wasm-opt. Enfin, en utilisant intelligemment un pointeur de fonction volatile, il a contourné l'hypothèse incorrecte d'Asyncify concernant la fonction `asyncjmp_rt_start`, réussissant ainsi à gérer de manière asynchrone les fichiers volumineux.

Lire plus
Développement Gestion des fichiers

Compiler Perl en WebAssembly : une tâche herculéenne

2025-02-11
Compiler Perl en WebAssembly : une tâche herculéenne

Lors de la création d'une startup, l'auteur a rencontré un défi : l'extraction de métadonnées de fichiers côté client. ExifTool, bien que puissant, s'est avéré difficile à compiler statiquement et à déployer sur différents systèmes d'exploitation en raison de sa nature Perl. Plusieurs approches ont été essayées, y compris la compilation statique de Perl, menant finalement à WebAssembly. Le processus a été semé d'embûches, luttant contre le système de construction de Perl, Emscripten et WASI, nécessitant même des modifications du code source de Perl. L'auteur a réussi à construire une version autonome de Perl en WebAssembly et à exécuter ExifTool, mais le processus a révélé un support insuffisant pour la gestion des exceptions dans les environnements d'exécution WebAssembly.

Lire plus
Développement

Dépassement des limitations d'exécution de WebAssembly : implémentation asynchrone de ZeroPerl

2025-02-11
Dépassement des limitations d'exécution de WebAssembly : implémentation asynchrone de ZeroPerl

Frustré par le manque de prise en charge d'exnref dans la plupart des environnements d'exécution WebAssembly, rendant ZeroPerl inutilisable, l'auteur a décidé de résoudre le problème au lieu de se plaindre. En tirant parti de la fonctionnalité Asyncify de Binaryen, un remplacement pour setjmp a été implémenté à partir de zéro, contournant les problèmes de compatibilité de libsetjmp. Après avoir supprimé la bibliothèque officielle, écrit du code assembleur et optimisé avec wasm-opt, ZeroPerl s'exécute désormais correctement dans Wasmer, Wasmtime et d'autres environnements d'exécution WebAssembly. Cette percée fournit un module Perl WebAssembly entièrement isolé et autonome.

Lire plus
Développement