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

2025-03-04
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
Desenvolvimento Manipulação de Arquivos

Compilando Perl para WebAssembly: Uma Tarefa Hercúlea

2025-02-11
Compilando Perl para WebAssembly: Uma Tarefa Hercúlea

Ao construir uma startup, o autor enfrentou um desafio: extração de metadados de arquivos do lado do cliente. O ExifTool, embora poderoso, mostrou-se difícil de compilar estaticamente e implantar em diferentes sistemas operacionais devido à sua natureza em Perl. Várias abordagens foram tentadas, incluindo a compilação estática do Perl, levando finalmente ao WebAssembly. A jornada foi repleta de desafios, lutando contra o sistema de construção do Perl, Emscripten e WASI, exigindo até mesmo modificações no código-fonte do Perl. O autor conseguiu construir com sucesso um Perl WebAssembly autocontido executando o ExifTool, mas o processo expôs suporte insuficiente para tratamento de exceções em runtimes WebAssembly.

Leia mais
Desenvolvimento

Quebrando as Limitações do Tempo de Execução do WebAssembly: Assificando o ZeroPerl

2025-02-11
Quebrando as Limitações do Tempo de Execução do WebAssembly: Assificando o ZeroPerl

Frustrado com a falta de suporte a exnref na maioria dos tempos de execução do WebAssembly, tornando o ZeroPerl inutilizável, o autor decidiu corrigir o problema em vez de reclamar. Ao aproveitar o recurso Asyncify do Binaryen, uma substituição para setjmp foi implementada do zero, contornando os problemas de compatibilidade do libsetjmp. Após remover a biblioteca oficial, escrever código de montagem e otimizar com wasm-opt, o ZeroPerl agora é executado com sucesso no Wasmer, Wasmtime e em outros tempos de execução do WebAssembly. Essa inovação oferece um módulo Perl WebAssembly totalmente isolado e autocontido.

Leia mais
Desenvolvimento