Quebrando a Barreira de 2GB: E/S Assíncrona para Arquivos Grandes em WebAssembly

O autor implementou anteriormente o setjmp em WebAssembly, contornando a dependência do WASI libc na proposta de tratamento de exceções. No entanto, essa abordagem era limitada a arquivos menores que 2 GB. Esta postagem detalha como usar a API de Arquivos e o tipo Blob para criar um sistema de arquivos baseado em memória para lidar com arquivos maiores. Como a E/S da web é assíncrona, enquanto as linguagens de sistema são tipicamente síncronas, o Asyncify foi usado para conectar os paradigmas. O autor encontrou problemas de otimização com o wasm-opt, resolvendo-os criando um wasm-opt fictício. Finalmente, usando de forma inteligente um ponteiro de função volátil, contornou a suposição incorreta do Asyncify sobre a função `asyncjmp_rt_start`, alcançando, por fim, o tratamento assíncrono de arquivos grandes.
Leia mais