watgo – en WebAssembly Toolkit för Go

watgo – en WebAssembly Toolkit för Go


Jag är glad att kunna meddela den allmänna tillgängligheten av watgo – den WebAsammansättning Toolkit för Go. Detta projekt liknar wabt (C++) eller wasm-tools (Rust), men i ren, noll-beroende Go.

watgo kommer med en CLI och en Go API för att analysera WAT ​​(WebAssembly Text), validera den och koda den till WASM-binärer; den stöder också avkodning av WASM från dess binära format.

I centrum för allt är wasmir – en semantisk representation av en WebAssembly-modul som användare kan granska (och manipulera). Detta diagram visar funktionerna som tillhandahålls av watgo:

watgo – en WebAssembly Toolkit för Go

  • Parse: en parser från WAT till wasmir
  • Validera: använder den officiella WebAssembly-valideringssemantiken för att kontrollera att modulen är välformad och säker
  • Koda: avger wasmir in i WASM binär representation
  • Avkoda: läs in WASM binär representation wasmir

Användningsfall för CLI

watgo kommer med en CLI, som du kan installera genom att utfärda detta kommando:

go install github.com/eliben/watgo/cmd/watgo@latest

CLI syftar till att vara kompatibel med wasm-tools , och jag har redan bytt ut mina wasm-wat-samples-projekt för att använda den; t.ex. ett kommando för att analysera en WAT-fil, validera den och koda den till binärt format:

watgo parse stack.wat -o stack.wasm

API-användningsfall

wasmir representerar semantiskt en WASM-modul med ett API som är lätt att arbeta med. Här är ett exempel på hur man använder watgo för att analysera ett enkelt WAT-program och göra lite analys:

package main

import (
  "fmt"

  "github.com/eliben/watgo"
  "github.com/eliben/watgo/wasmir"
)

const wasmText = `
(module
  (func (export "add") (param i32 i32) (result i32)
    local.get 0
    local.get 1
    i32.add
  )
  (func (param f32 i32) (result i32)
    local.get 1
    i32.const 1
    i32.add
    drop
    i32.const 0
  )
)`

func main() {
  m, err := watgo.ParseWAT(()byte(wasmText))
  if err != nil {
    panic(err)
  }

  i32Params := 0
  localGets := 0
  i32Adds := 0

  // Module-defined functions carry a type index into m.Types. The function
  // body itself is a flat sequence of wasmir.Instruction values.
  for _, fn := range m.Funcs {
    sig := m.Types(fn.TypeIdx)
    for _, param := range sig.Params {
      if param.Kind == wasmir.ValueKindI32 {
        i32Params++
      }
    }

    for _, instr := range fn.Body {
      switch instr.Kind {
      case wasmir.InstrLocalGet:
        localGets++
      case wasmir.InstrI32Add:
        i32Adds++
      }
    }
  }

  fmt.Printf("module-defined funcs: %d\n", len(m.Funcs))
  fmt.Printf("i32 params: %d\n", i32Params)
  fmt.Printf("local.get instructions: %d\n", localGets)
  fmt.Printf("i32.add instructions: %d\n", i32Adds)
}

En viktig anmärkning: WAT-formatet stöder flera syntaktiska finesser som plattas ut/kanoniseras när de sänks till wasmir. Till exempel sänks alla vikta instruktioner till ovikta (linjär form), funktions- och typnamn löses till numeriska index, etc. Detta matchar validerings- och exekveringssemantiken för WASM och dess binära representation.

Dessa syntaktiska detaljer finns i watgo i textformat paket (som analyserar WAT till en AST) och tas bort när detta sänks till wasmir. De textformat Paketet hålls internt för närvarande, men i framtiden kan jag överväga att exponera det offentligt – om det finns intresse.

Testa strategi

Även om det fortfarande är tidiga dagar för watgo, är jag ganska säker på dess riktighet på grund av en strategi med mycket tunga tester redan från början.

WebAssembly kommer med en stor officiell testsvit, som är perfekt för end-to-end-testning av nya implementeringar. Kärntestsviten innehåller nästan 200 000 rader WAT-filer som innehåller flera moduler med förväntad exekveringssemantik och en mängd olika felscenarier. Dessa lever i specialdesignade .wast-filer och använder en anpassad spec-tolk.

watgo kapar detta tillvägagångssätt genom att använda den officiella testsviten för sina egna tester. En anpassad sele analyserar .wast-filer och använder watgo för att konvertera WAT ​​i dem till binär WASM, som sedan exekveras av Node.js ; denna sele är en betydande ansträngning i sig, men det är mycket värt det – resultatet är utmärkt testtäckning. watgo klarar hela WASM spec core test suite.

På samma sätt utnyttjar vi wabts interp-testsvit som också inkluderar end-to-end-tester, med en enklare nodbaserad sele för att testa dem mot watgo.

Slutligen upprätthåller jag en samling realistiska programexempel skrivna i WAT i wasm-wat-samples repository; dessa används också av watgo för att testa sig själv.




Source link

Postagens Similares

  • 2025 Consejos para mis viejos yo

    Cumplí años recientemente y estaba tan ocupado (vuelo de DataCouncil + sg) que nunca tuve la oportunidad de sentarme y reflexionar. Muchas cosas van bien, muchas más podrían ser mejores. Soy la única persona responsable de preservar lo bueno y arreglar lo malo. Ahora estoy de nuevo en un avión y con el estado de…

  • Nous confondons deux types d’AGI

    Je pense que le plus gros problème du débat sur l’AGI est que nous confondons deux types d’AGI. Je propose de les réfléchir et d’en discuter comme deux choses différentes : AGI douce: Un système d’IA implémenté en tant que projet produit/OSS qui émule suffisamment bien la généralité de l’apprentissage pour remplacer les travailleurs du savoir….

  • Jinsi ya kubadilisha kikoa maalum kwenye Substack

    Tangu Septemba, nimekuwa nikiendesha jarida langu la AI kwenye https://lspace.swyx.io Tangu wakati huo nimepata kikoa cha https://latent.space, lakini hati chafu za Substack haitoi usaidizi wowote wa jinsi ya kupitia mabadiliko maalum ya kikoa (jinsi ya kuongeza moja kwa mara ya kwanza). na kitufe cha Lemaza Kikoa Maalum kinatisha sana bila huruma yoyote kuhusu jinsi ya…

  • Gracias por ser un amigo

    Ha sido uno de esos meses, y con eso me refiero a uno de los 663 meses desde que nací. Este no será un post largo porque sólo tengo dos cosas que decir. En primer lugar, me alegra mucho que hayamos reordenado los condados de estudio rural de GMI (Ingreso Mínimo Garantizado) para que el…

  • 突然伟大的开源人工智能会导致美国经济崩溃吗?

    不知道为什么我没有更多地考虑这一点,但美国现在似乎因廉价、高质量、开源人工智能与廉价推理相结合而面临巨大的经济脆弱性(参见 Cerberus 等人)。 这是场景: 美国实验室让人们和公司着迷于顶级推理 ✅ 整个美国经济重新定位以5家公司为中心 他们的估值不断增长,同时从其他一切中窃取氧气 ✅ 开源模型开始变得非常好,并且被大量使用,但仍然落后于前沿模型 5-10% ✅ 然后突然间,到了 2026 年、2027 年或 2028 年……情况不再更糟了。它们现在同样好或者更好,价格同样便宜或者更便宜。 □ 对于建筑商、公司和人工智能来说,这仍然是令人惊奇的。它仍然是人工智能在做人工智能颠覆性的事情。 但对于美国经济来说,情况似乎可能非常糟糕。特别是对于模型提供商来说,因为像 NVIDIA 和 Cerberus 这样的公司仍然可以成为任何运行的芯片。 这让我想知道实验室最近对咨询和服务提供商的收购是否不那么重要, 让我们与我们的客户竞争,因为我们是混蛋…… 以及更多的, 嗯,如果这个市场因开源和精品推理芯片而崩溃,我们需要作为模型提供商以外的其他东西来吸引人们的关注…… 基本上,我将开源人工智能和专用推理提供商作为好奇心和兴趣点进行追踪。 但现在看来,除非我错过了一些重大的事情,否则它们与我们的巅峰模型持平或超越可能不仅对 5 家美国公司,而且对整个美国经济来说都是灾难性的。 现在我想起来,也许这也解释了为什么中国如此努力地将美国模式升华为开源,并不断推出高质量、廉价的替代品供世界使用。详细描述了技术、重量和数据。 也许这是因为他们希望世界尽快赶上(并超过)美国实验室。 这使得他们的开源游戏看起来不像是通向通用人工智能的一条不同道路,而更像是针对美国经济的直接战略人工智能游戏。 Source link

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *