2017-12-27 6 views
1

Die Spezifikation sagt, dass 0x40 ist:Webassembly Bedeutung des 0x40 Byte?

ein Pseudo-Typ

Jetzt im nicht ganz sicher, ob eine leere Block_Typ zur Darstellung, was sie damit meinen. Selbst wenn mein Block nicht leer ist, würde der Compiler mir 0x40 nach dem Opcode 0x02 geben.

Ist 0x40 analog zu "void"?

Antwort

2

Ja, es ist wie void. Die Idee ist, dass Blöcke einen Wert (i32, i64, f32, f64 für den Moment) zurückgeben können, oder gar keinen Wert. Die Typen sind unter language types aufgeführt und block type beschränkt die zulässigen Typen. Dies bedeutet, dass Anweisungen Werte konsumieren können, die ein Block auf den Ausführungsstapel drückt, sodass ein Block einer Funktion in diesem Sinne ähnelt. Sie könnten einen Block nicht möchten, um einen Wert auf den Stapel zu schieben, so dass es void könnte daher nützlich sein. Oder der Compiler könnte einfach nicht intelligent genug sein, um diese Eigenschaft von Blöcken zu verwenden, und stattdessen verwendet er in einigen Fällen Locals.

Schließlich wird multi-value unterstützt, die sowohl Funktionen als auch Blöcke ermöglichen, mehrere Werte auf den Stapel zu schieben.

+0

Das räumt auf. Nochmals vielen Dank für die tolle Antwort. Multi-Value-Support ist ziemlich nett und ich bin wirklich beeindruckt von den Fortschritten. – Asperger