Design: Wie Webassembly struct behandelt?

Erstellt am 26. Juni 2017  ·  8Kommentare  ·  Quelle: WebAssembly/design

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?

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.

Alle 8 Kommentare

937 hätte dafür eine einfache Lösung bereitgestellt, ist aber derzeit geschlossen und ich bin mir nicht sicher, ob sich noch jemand im WebAssembly-Team darüber Gedanken macht.

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.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

badumt55 picture badumt55  ·  8Kommentare

nikhedonia picture nikhedonia  ·  7Kommentare

beriberikix picture beriberikix  ·  7Kommentare

jfbastien picture jfbastien  ·  6Kommentare

mfateev picture mfateev  ·  5Kommentare