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?
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.
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.