Rompiendo la barrera de los 2 GB: E/S asincrónica para archivos grandes en WebAssembly

2025-03-04
Rompiendo la barrera de los 2 GB: E/S asincrónica para archivos grandes en WebAssembly

El autor implementó previamente setjmp en WebAssembly, eludiendo la dependencia de WASI libc en la propuesta de manejo de excepciones. Sin embargo, este enfoque estaba limitado a archivos menores a 2 GB. Esta publicación detalla cómo usar la API de Archivos y el tipo Blob para crear un sistema de archivos basado en memoria para manejar archivos más grandes. Dado que la E/S web es asincrónica, mientras que los lenguajes de sistema suelen ser sincrónicos, se utilizó Asyncify para conectar los paradigmas. El autor encontró problemas de optimización con wasm-opt, resolviéndolos creando un wasm-opt ficticio. Finalmente, utilizando inteligentemente un puntero de función volátil, eludió la suposición incorrecta de Asyncify sobre la función `asyncjmp_rt_start`, logrando finalmente el manejo asincrónico de archivos grandes.

Leer más
Desarrollo Manejo de Archivos

Compilando Perl a WebAssembly: Una Tarea Hercúlea

2025-02-11
Compilando Perl a WebAssembly: Una Tarea Hercúlea

Al construir una startup, el autor se enfrentó a un desafío: la extracción de metadatos de archivos del lado del cliente. ExifTool, aunque potente, resultó difícil de compilar estáticamente e implementar en diferentes sistemas operativos debido a su naturaleza en Perl. Se intentaron varios enfoques, incluida la compilación estática de Perl, llevando finalmente a WebAssembly. El proceso estuvo lleno de desafíos, luchando contra el sistema de compilación de Perl, Emscripten y WASI, incluso requiriendo modificaciones en el código fuente de Perl. El autor logró construir con éxito una versión autocontenida de Perl en WebAssembly y ejecutar ExifTool, pero el proceso expuso una insuficiente compatibilidad con el manejo de excepciones en los entornos de ejecución de WebAssembly.

Leer más
Desarrollo

Superando las Limitaciones del Tiempo de Ejecución de WebAssembly: Asignación Asíncrona de ZeroPerl

2025-02-11
Superando las Limitaciones del Tiempo de Ejecución de WebAssembly: Asignación Asíncrona de ZeroPerl

Frustrado por la falta de soporte exnref en la mayoría de los tiempos de ejecución de WebAssembly, lo que hacía que ZeroPerl fuera inutilizable, el autor decidió solucionar el problema en lugar de quejarse. Aprovechando la función Asyncify de Binaryen, se implementó una alternativa a setjmp desde cero, evitando los problemas de compatibilidad de libsetjmp. Después de eliminar la biblioteca oficial, escribir código de ensamblaje y optimizar con wasm-opt, ZeroPerl ahora se ejecuta correctamente en Wasmer, Wasmtime y otros tiempos de ejecución de WebAssembly. Este avance proporciona un módulo Perl WebAssembly completamente aislado y autónomo.

Leer más
Desarrollo