Design: Ausgangsdaten und Endiannes

Erstellt am 3. Sept. 2016  ·  6Kommentare  ·  Quelle: WebAssembly/design

Die Spezifikation sagt nichts darüber aus, welche Byte-Reihenfolge i32.load verwendet. Reale Programme enthalten Datenabschnitte, um virtuelle Tabellen, statische Daten usw. bereitzustellen. Diese Dinge erfordern normalerweise unterschiedliche Werttypen. WebAssembly ist jedoch auf Bytefolgen in seinem Abschnitt data . Mit Bytes kann man int32 nicht emulieren, da sie nichts über Endiannes wissen.

Es wäre schön, wenn WebAssebmly ähnliche Strukturen und Strukturinitialisierer wie LLVM hätte. Es löst nicht nur das Problem mit Endiannes statischer Daten, sondern bietet auch die Möglichkeit, Binärdaten zu verringern, da Ganzzahlen im Datenabschnitt wahrscheinlich weniger Bytes in der LEB128-Darstellung verbrauchen, während sie bei der Codierung im Datenabschnitt immer 4 Bytes verbrauchen.

Aktuelle Problemumgehungen sind:

  • Verwenden Sie keinen Datenabschnitt, verwenden Sie stattdessen die große Initialisierungsfunktion
  • eigenes Format erfinden, Decoder in WebAssembly-Binärdatei einbinden, es von start Funktion ausführen

Hilfreichster Kommentar

Es gibt erhebliche Vorteile, sich nicht mit mehreren Endianness im gesamten Ökosystem auseinandersetzen zu müssen, und die Wahrscheinlichkeit, dass eine CPU-Architektur, die nicht zumindest eine effiziente Unterstützung für Little-Endian-Zugriffe bietet, in absehbarer Zeit populär wird, wird als sehr gering eingeschätzt.

Alle 6 Kommentare

WebAssembly ist Little-Endian. Es scheint, dass AstSemantics.md dies nicht erwähnt; Ich habe jetzt https://github.com/WebAssembly/design/pull/787 eingereicht, um dies zu korrigieren.

Es wird erwähnt , hier und hier und getestet hier .

Die Idee, LEB128-kodierte Daten im Datenabschnitt zu haben, ist interessant. Dazu gibt es verschiedene Möglichkeiten, entweder mit einer neuen Art von Dateninitialisierer oder mit Layer-1-Komprimierung . Die Layer-2-Komprimierung kann auch bei großen Datensegmenten im Allgemeinen hilfreich sein.

Ich verstehe, danke. Ist die Anforderung nicht zu stark? Ich kenne keine CPU, die Big-Endian verwendet, aber wenn aus irgendeinem Grund eine auftaucht und weit verbreitet ist, würde WebAssembly mit etwas Overhead auf dieser CPU ausgeführt.

Es gibt erhebliche Vorteile, sich nicht mit mehreren Endianness im gesamten Ökosystem auseinandersetzen zu müssen, und die Wahrscheinlichkeit, dass eine CPU-Architektur, die nicht zumindest eine effiziente Unterstützung für Little-Endian-Zugriffe bietet, in absehbarer Zeit populär wird, wird als sehr gering eingeschätzt.

Am Sa, 3. September 2016 um 16:07, Alexey Andreev [email protected]
schrieb:

Ich verstehe, danke. Ist die Anforderung nicht zu stark? Es gibt keine CPU I
wissen, dass Big-Endian verwendet wird, aber wenn aus irgendeinem Grund einer erscheint und wird
weit verbreitet, würde WebAssembly auf dieser CPU mit etwas Overhead ausgeführt werden.

MIPS- und SPARC-CPUs sind Big-Endian, obwohl SPARC Little-Endian hatte
lädt/speichert seit geraumer Zeit, und MIPS hat kleine Varianten.

Wir haben Big-Endian-Unterstützung in V8 über explizites Endianness-Swapping implementiert
Code, aber ich habe die Gemeinkosten noch nicht sorgfältig gemessen.


Sie erhalten dies, weil Sie diesen Thread abonniert haben.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/WebAssembly/design/issues/786#issuecomment -244548450,
oder den Thread stumm schalten
https://github.com/notifications/unsubscribe-auth/ALnq1EEkfh88rAXYByuL9uNcjbsjVnFbks5qmX8agaJpZM4J0Snh
.

Es wäre schön, wenn WebAssebmly ähnliche Strukturen und Strukturinitialisierer wie LLVM hätte.

Dies ist in WebAssembly bereits genauso machbar wie in C und C++: Bevor main() aufgerufen wird, kann die _start-Funktion .init_array-Funktionen aufrufen. Ich glaube nicht, dass hier etwas zu tun ist.

Einverstanden mit @sunfishcode / @titzer bezüglich Endianness.

Ich glaube, das ist gelöst.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

artem-v-shamsutdinov picture artem-v-shamsutdinov  ·  6Kommentare

beriberikix picture beriberikix  ·  7Kommentare

badumt55 picture badumt55  ·  8Kommentare

bobOnGitHub picture bobOnGitHub  ·  6Kommentare

thysultan picture thysultan  ·  4Kommentare