Die 2-GB-Grenze überwinden: Asynchrone E/A für große Dateien in WebAssembly
Der Autor hatte zuvor setjmp in WebAssembly implementiert und dabei die Abhängigkeit von WASI libc vom Exception-Handling-Vorschlag umgangen. Dieser Ansatz war jedoch auf Dateien kleiner als 2 GB beschränkt. Dieser Beitrag beschreibt, wie man die File API und den Blob-Typ verwendet, um ein speicherbasiertes Dateisystem zu erstellen, um größere Dateien zu verarbeiten. Da die Web-E/A asynchron ist, während Systemsprachen typischerweise synchron sind, wurde Asyncify verwendet, um die Paradigmen zu überbrücken. Der Autor stieß auf Optimierungsprobleme mit wasm-opt und löste diese durch die Erstellung eines Dummy-wasm-opt. Schließlich wurde durch geschickte Verwendung eines volatilen Funktionszeigers die falsche Annahme von Asyncify bezüglich der Funktion `asyncjmp_rt_start` umgangen, wodurch schließlich die asynchrone Verarbeitung großer Dateien erreicht wurde.