Design: Sintaxe WAT como um subconjunto JavaScript válido

Criado em 16 mar. 2019  ·  4Comentários  ·  Fonte: WebAssembly/design

Para permitir expressões S separadas por vírgulas dentro do formato de texto, para permitir que a sintaxe WAT seja uma sintaxe de subconjunto de JavaScript de tempo de análise válida como JSON é para JavaScript.

Isso permitiria que você escrevesse o seguinte exemplo:

(func $swap (param i32 i32) (result i32 i32) (get_local 1) (get_local 0))

Como o seguinte:

(func, $swap, (param, i32, i32), (result, i32, i32), (get_local, 1) (get_local, 0))

Uma aplicação disso é ser capaz de escrever sintaxe WAT válida em funções JavaScript

function add (a, b) {
   (i32.const, a)
   (i32.const, b)
   (i32.const, add)
}

Que você pode add.toString() para extrair o código-fonte WAT válido, que pode tornar mais fácil intercalar o código-fonte WAT dentro do JavaScript sem a necessidade de literais de modelo durante a prototipagem.

Comentários muito úteis

Não tenho certeza se queremos um WAST compatível com JS. Principalmente porque do ponto de vista do analisador, seria realmente difícil dizer se você está escrevendo WAST ou JS.

Prefiro usar os literais de modelo de JS:

function add (a, b) {
   wast`
     (i32.const, a)
     (i32.const, b)
     (i32.const, add)
   `
}

Todos 4 comentários

Expressões S me fazem pensar em Lisp e por causa disso eu esperaria que ' significasse aspas e , significasse não aspas.

Esta é uma ideia interessante, mas não tenho certeza se queremos modificar o formato do texto para suportá-la.

Não tenho certeza se queremos um WAST compatível com JS. Principalmente porque do ponto de vista do analisador, seria realmente difícil dizer se você está escrevendo WAST ou JS.

Prefiro usar os literais de modelo de JS:

function add (a, b) {
   wast`
     (i32.const, a)
     (i32.const, b)
     (i32.const, add)
   `
}

Você poderia criar um WAT DSL no CoffeeScript muito facilmente. Apenas para oferecer outra opção.

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

Questões relacionadas

arunetm picture arunetm  ·  7Comentários

artem-v-shamsutdinov picture artem-v-shamsutdinov  ·  6Comentários

badumt55 picture badumt55  ·  8Comentários

cretz picture cretz  ·  5Comentários

ghost picture ghost  ·  7Comentários