Design: Dados iniciais e endiannes

Criado em 3 set. 2016  ·  6Comentários  ·  Fonte: WebAssembly/design

A especificação não diz nada sobre qual ordem de bytes i32.load usa. Os programas do mundo real contêm seção de dados para fornecer tabelas virtuais, dados estáticos, etc. Essas coisas geralmente requerem diferentes tipos de valor. No entanto, WebAssembly é limitado a sequências de bytes em sua seção data . Com bytes não se pode emular int32, pois eles não sabem nada sobre endiannes.

Seria bom se WebAssebmly tivesse algo semelhante a estruturas e inicializadores de estrutura semelhantes ao LLVM. Isso não só resolve o problema com endiannes de dados estáticos, mas também dá oportunidade para diminuir os dados binários, uma vez que os inteiros na seção de dados provavelmente consumirão menos bytes na representação do LEB128, ao passo que sempre consomem 4 bytes quando codificados na seção de dados.

As soluções alternativas atuais são:

  • não use a seção de dados, use a função inicializadora grande em vez disso
  • invente o próprio formato, inclua o decodificador no binário WebAssembly, execute-o a partir da função start

Comentários muito úteis

Há vantagens significativas em não ter que lidar com vários endiannesses em todo o ecossistema, e acredita-se que a probabilidade de uma arquitetura de CPU que não tenha pelo menos suporte eficiente para acessos little-endian se tornar popular em um futuro próximo é muito baixa.

Todos 6 comentários

WebAssembly é little-endian. Parece que AstSemantics.md não menciona isso; Eu já preenchi https://github.com/WebAssembly/design/pull/787 para corrigir isso.

É mencionado aqui e aqui e testado aqui .

A ideia de ter dados codificados em LEB128 na seção de dados é interessante. Há várias maneiras de fazer isso, seja com um novo tipo de inicializador de dados ou com a compactação da camada 1 . A compactação da camada 2 também pode ajudar com grandes segmentos de dados em geral.

I ver obrigado. Não é um requisito muito forte? Não há nenhuma CPU que eu conheço que use big-endian, mas se por algum motivo uma aparecesse e se tornasse amplamente usada, o WebAssembly seria executado nesta CPU com alguma sobrecarga.

Há vantagens significativas em não ter que lidar com vários endiannesses em todo o ecossistema, e acredita-se que a probabilidade de uma arquitetura de CPU que não tenha pelo menos suporte eficiente para acessos little-endian se tornar popular em um futuro próximo é muito baixa.

No sábado, 3 de setembro de 2016 às 16h07, Alexey Andreev [email protected]
escreveu:

I ver obrigado. Não é um requisito muito forte? Não há nenhuma CPU I
sei que usa big-endian, mas se por algum motivo um aparece e se torna
amplamente utilizado, o WebAssembly seria executado nesta CPU com alguma sobrecarga.

CPUs MIPS e SPARC são big-endian, embora SPARC tenha tido little-endian
carrega / armazena há algum tempo, e o MIPS tem variantes de ponta pequena.

Implementamos suporte big-endian no V8 por meio de troca explícita de endianness
código, mas ainda não medi as despesas gerais com cuidado.

-
Você está recebendo isto porque está inscrito neste tópico.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/WebAssembly/design/issues/786#issuecomment -244548450,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/ALnq1EEkfh88rAXYByuL9uNcjbsjVnFbks5qmX8agaJpZM4J0Snh
.

Seria bom se WebAssebmly tivesse algo semelhante a estruturas e inicializadores de estrutura semelhantes ao LLVM.

Isso já é possível no WebAssembly exatamente da mesma maneira que é feito em C e C ++: antes de main () ser chamada, a função _start pode chamar as funções .init_array. Não acho que haja nada para fazer aqui.

Concordado com @sunfishcode / @titzer em endianness.

Eu acredito que isso está resolvido.

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

Questões relacionadas

bobOnGitHub picture bobOnGitHub  ·  6Comentários

chicoxyzzy picture chicoxyzzy  ·  5Comentários

Thaina picture Thaina  ·  8Comentários

JimmyVV picture JimmyVV  ·  4Comentários

mfateev picture mfateev  ·  5Comentários