Design: Como a webassembly lida com a estrutura?

Criado em 26 jun. 2017  ·  8Comentários  ·  Fonte: WebAssembly/design

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?

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.

Todos 8 comentários

937 teria fornecido uma solução fácil para isso, mas atualmente está fechado e não tenho certeza se alguém na equipe WebAssembly ainda está pensando nisso.

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.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

nikhedonia picture nikhedonia  ·  7Comentários

chicoxyzzy picture chicoxyzzy  ·  5Comentários

mfateev picture mfateev  ·  5Comentários

badumt55 picture badumt55  ·  8Comentários

jfbastien picture jfbastien  ·  6Comentários