Tento ler o documento webassembly e só o vejo mencionar o tipo de suporte apenas i32, i64, f32, f64
Mas não consigo encontrar nenhum lugar que mencione um tipo composto, como struct
Não é possível nativamente em webassembly? Como contornar o compilador C para a estrutura maior que 64 bits? Como posso colocar 2 floats e 2 ints juntos na pilha?
Para composições de até 8 bytes, você pode compactá-los em um número inteiro de 64 bits.
Para estruturas maiores, você precisará transferi-las por meio da memória linear ou de um conjunto de globais mutáveis.
Vários valores de retorno definitivamente ainda estão no radar, e pretendo
escrever uma proposta muito em breve. Dito isso, eles não fornecem estruturas
diretamente, você ainda terá que dividi-los em valores individuais para
tudo o mais, exceto chamadas de função.
@rossberg-chromium Muito obrigado. Acho que se isso não limitar o tamanho e a ordem dos valores retornados, poderíamos contornar a estrutura falsa da linguagem compilada. Isso deve ser o suficiente
Enquanto isso, structs podem ser implementados usando ponteiros, certo?
Basta alocar sua estrutura na memória linear e trabalhar com ponteiros.
@nidin Obrigado. É esse o jeito de C struct compilado para wasm normalmente fazer?
@rossberg alguma atualização no suporte de estrutura?
@krisnye , não há planos para suporte "struct" para programas wasm que usam memória linear; o compilador deve reduzir structs e operações de struct a operações primitivas. Existem alguns planos para tipos de estrutura no contexto da proposta de suporte de GC, sem usar memória linear, consulte, por exemplo, https://github.com/WebAssembly/gc. Há suporte altamente experimental para pelo menos um subconjunto disso no Firefox Nightly, consulte https://github.com/lars-t-hansen/moz-gc-experiments.
Comentários muito úteis
Vários valores de retorno definitivamente ainda estão no radar, e pretendo
escrever uma proposta muito em breve. Dito isso, eles não fornecem estruturas
diretamente, você ainda terá que dividi-los em valores individuais para
tudo o mais, exceto chamadas de função.