Design: Bagaimana webassembly menangani struct?

Dibuat pada 26 Jun 2017  ·  8Komentar  ·  Sumber: WebAssembly/design

Saya mencoba membaca dokumen webassembly dan hanya melihatnya menyebutkan jenis dukungan saja i32,i64,f32,f64

Tetapi saya tidak dapat menemukan tempat yang menyebutkan tipe komposit seperti struct

Apakah tidak mungkin secara native di webassembly? Bagaimana solusi kompiler C untuk struct yang lebih besar dari 64 bit? Bagaimana saya bisa mengemas 2 pelampung dan 2 int bersama di tumpukan?

Komentar yang paling membantu

Beberapa nilai pengembalian pasti masih ada di radar, dan saya berniat untuk
menulis proposal segera. Yang mengatakan, mereka tidak memberi Anda struct
secara langsung, Anda masih harus membaginya menjadi nilai individual untuk
segala sesuatu selain panggilan fungsi.

Semua 8 komentar

937 akan memberikan solusi mudah untuk ini tetapi saat ini ditutup dan saya tidak yakin apakah ada orang di tim WebAssembly yang masih memikirkannya.

Untuk komposisi hingga 8 byte, Anda dapat mengemasnya dalam bilangan bulat 64-bit.

Untuk struktur yang lebih besar, Anda harus mentransfernya melalui memori linier atau satu set global yang dapat diubah.

Beberapa nilai pengembalian pasti masih ada di radar, dan saya berniat untuk
menulis proposal segera. Yang mengatakan, mereka tidak memberi Anda struct
secara langsung, Anda masih harus membaginya menjadi nilai individual untuk
segala sesuatu selain panggilan fungsi.

@rossberg-chromium Terima kasih banyak. Saya pikir jika itu tidak membatasi ukuran dan urutan nilai yang dikembalikan itu, maka kita bisa menyelesaikannya dengan struct palsu dengan bahasa yang dikompilasi. Itu sudah cukup

Sementara itu, struct dapat diimplementasikan menggunakan pointer, bukan?

Cukup alokasikan struct Anda dalam memori linier dan bekerja dengan pointer.

@nidin Terima kasih. Apakah itu cara C struct dikompilasi ke wasm biasanya?

@rossberg ada pembaruan pada dukungan struktur?

@krisnye , tidak ada rencana untuk dukungan "struct" untuk program wasm yang menggunakan memori linier; kompiler seharusnya menurunkan struct dan operasi struct ke operasi primitif. Ada beberapa rencana untuk tipe struct dalam konteks proposal dukungan GC, tidak menggunakan memori linier, lihat misalnya https://github.com/WebAssembly/gc. Ada dukungan yang sangat eksperimental untuk setidaknya sebagian dari itu di Firefox Nightly, lihat https://github.com/lars-t-hansen/moz-gc-experiments.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

aaabbbcccddd00001111 picture aaabbbcccddd00001111  ·  3Komentar

dpw picture dpw  ·  3Komentar

mfateev picture mfateev  ·  5Komentar

thysultan picture thysultan  ·  4Komentar

arunetm picture arunetm  ·  7Komentar