Ich versuche, das Webassembly-Dokument zu lesen und sehe nur, dass nur die Typunterstützung i32, i64, f32, f64 erwähnt wird
Aber ich kann keinen Ort finden, an dem ein zusammengesetzter Typ wie struct erwähnt wird
Ist es nativ in Webassembly nicht möglich? Wie C-Compiler-Problemumgehung für die Struktur größer als 64 Bit? Wie kann ich 2 Floats und 2 Ints zusammen in den Stack packen?
Für Kompositionen von bis zu 8 Byte können Sie sie in eine 64-Bit-Ganzzahl packen.
Bei größeren Strukturen müssen Sie sie über einen linearen Speicher oder einen Satz veränderlicher Globals übertragen.
Mehrere Rückgabewerte sind definitiv noch auf dem Radar, und ich beabsichtige,
schreibe sehr bald einen Vorschlag. Das heißt, sie geben dir keine structs
direkt, musst du sie noch in einzelne Werte aufteilen für
alles andere als Funktionsaufrufe.
@rossberg-chromium Vielen Dank. Ich denke, wenn es die Größe und Reihenfolge dieser zurückgegebenen Werte nicht einschränkt, könnten wir mit einer gefälschten Struktur der kompilierten Sprache umgehen. Das sollte genug sein
In der Zwischenzeit könnten Strukturen mithilfe von Zeigern implementiert werden, oder?
Weisen Sie Ihre Struktur einfach im linearen Speicher zu und arbeiten Sie mit Zeigern.
@nidin Danke. Ist das die Art und Weise, wie C-Struct normalerweise nach wasm kompiliert wird?
@rossberg ein Update zur Strukturunterstützung?
@krisnye , es gibt keine Pläne für "struct" -Unterstützung für wasm-Programme, die linearen Speicher verwenden; der Compiler soll Structs und Struct-Operationen auf primitive Operationen reduzieren. Es gibt einige Pläne für Strukturtypen im Kontext des GC-Unterstützungsvorschlags, die keinen linearen Speicher verwenden, siehe zB https://github.com/WebAssembly/gc. Es gibt sehr experimentelle Unterstützung für zumindest einen Teil davon in Firefox Nightly, siehe https://github.com/lars-t-hansen/moz-gc-experiments.
Hilfreichster Kommentar
Mehrere Rückgabewerte sind definitiv noch auf dem Radar, und ich beabsichtige,
schreibe sehr bald einen Vorschlag. Das heißt, sie geben dir keine structs
direkt, musst du sie noch in einzelne Werte aufteilen für
alles andere als Funktionsaufrufe.