为提供更好的跨平台支持,WebAssembly 正在积极推动其在本地桌面端的进展。与此同时,Wasmtime(WebAssembly runtime)近期为它增加了 Go 绑定功能,这意味着开发者可直接在 Go 应用程序中调用 WebAssembly 模块。

Wasmtime 提供了 JIT 风格的 WebAssembly runtime,这是一个属于字节码联盟的项目,此前已为 Rust, C, Python 和 Microsoft .NET 提供了绑定,Go 语言则是其最新绑定的语言。

wasmtime-go 的代码已开源,下面介绍一个使用 wasmtime-go 编写 "Hello, world!" 的代码示例:

package mainimport ("fmt""github.com/bytecodealliance/wasmtime-go"
)func main() {// Almost all operations in wasmtime require a contextual `store`// argument to share, so create that firststore := wasmtime.NewStore(wasmtime.NewEngine())// Compiling modules requires WebAssembly binary input, but the wasmtime// package also supports converting the WebAssembly text format to the// binary format.wasm, err := wasmtime.Wat2Wasm(`(module(import "" "hello" (func $hello))(func (export "run")(call $hello)))`)check(err)// Once we have our binary `wasm` we can compile that into a `*Module`// which represents compiled JIT code.module, err := wasmtime.NewModule(store, wasm)check(err)// Our `hello.wat` file imports one item, so we create that function// here.item := wasmtime.WrapFunc(store, func() {fmt.Println("Hello from Go!")})// Next up we instantiate a module which is where we link in all our// imports. We've got one improt so we pass that in here.instance, err := wasmtime.NewInstance(module, []*wasmtime.Extern{item.AsExtern()})check(err)// After we've instantiated we can lookup our `run` function and call// it.run := instance.GetExport("run").Func()_, err = run.Call()check(err)
}func check(e error) {if e != nil {panic(e)}
}

此功能会在即将发布的 Wasmtime 0.16.0 milestone 版本中提供,0.16 版本还增加了 .NET 绑定功能,以及其他有趣的变更。

字节码联盟力推的 WebAssembly 接口类型增加了 WebAssembly 与其他语言的互通性。Mozilla 表示,WebAssembly 接口类型简化了应用程序与 WebAssembly 模块间来回传递复杂类型所需的“胶水代码”。

按照目前的进度,相信今年 Wasmtime 和 WebAssembly 在本地桌面端将会有不错的进展。对此你有什么看法?

WebAssembly增加Go语言绑定相关推荐

  1. 一些Qt第三方语言绑定库

    Qt API是基于C++实现的,并且提供了额外的特性来简化跨平台开发.整理了一些第三方语言绑定库有Python, Go, Node.js等语言.但是只有Python(PySide2)语言绑定库是由Qt ...

  2. Language binding(语言绑定)

    今天,看irrlicht,里面提到了 Language binding 看了维基,翻译了一下.(翻译的自己都拿不定主意,讲什么意思). 从宏观上理解的语言绑定的意义是:使别的语言也能使用别的稍加修改的 ...

  3. Linux系统站群VPS增加多IP绑定的详细教程、VPS额外增加IP手动绑定

    Linux系统站群VPS增加多IP绑定的详细教程.VPS额外增加IP手动绑定 我们购买的VPS如果有多个IP就需要手动绑定了,确定我们购买成功之后,我们需要编辑文件了. 文件目录/etc/syscon ...

  4. DotNetTextBox V3.0 所见即所得编辑器控件 For Asp.Net2.0(ver 3.0.7Beta) 增加多语言!

    英文名:DotNetTextBox V3.0 WYSWYG Web Control For Asp.Net2.0 中文名:DotNetTextBox V3.0 所见即所得编辑器控件 For Asp.N ...

  5. c语言绑定,C++实现动态绑定代码分享

    C++实现动态绑定代码分享 #include #include using namespace std; class BookItem { private: string bookName; size ...

  6. win10 增加eng语言

    最近有win10纯净版系统用户反映说要使用输入法的时候,发现eng输入法突然不见了,导致要输入英文的时候非常不方便,很多用户遇到这样的问题都不知在措,其实没关系,我们自己手动就可以添加回来了,针对此问 ...

  7. 线性表的增加C语言实现,数据结构(严蔚敏)C语言实现---线性表的顺序存储

    总觉得写的代码差点什么,所以回过头开始看数据结构,真正去实现一下. 这次看的是线性表的顺序存储,代码如下: 1.为了增加代码可读性,用了一些宏定义,文件名称为BaseDefine.h,内容如下: #i ...

  8. element 控件 tabel中增加el-switch 并绑定点击事件

    先看官网 <el-switchv-model="value"active-color="#13ce66"inactive-color="#ff4 ...

  9. 对jquery新增加的class绑定事件 jquery 对相同class 绑定事件

    当页面加载时,就会注册所有的事件,后面通过jquery新增的内容(<div class="item"></div>),再对新增的添加事件$(".i ...

最新文章

  1. 制作一个老旧C118的GSM便携式测试设备
  2. 首例人工智能著作权案宣判 软件自动生成的文字内容不构成作品
  3. 使用pip将Python包安装到不同的目录中?
  4. idea中的pom文件中的jar包下载不了,手动下载jar包的方法
  5. 【鸿蒙 HarmonyOS】界面跳转 ( Page Ability 的 action 标识 | Page Ability 之间的界面跳转及传递数据 | 鸿蒙工程下创建 Module | 代码示例 )
  6. Data Lake Analytics: 使用DataWorks来调度DLA任务
  7. 电子病历系统厂家排名_指挥大厅音响系统方案,会议话筒厂家-麦纳电子科技
  8. Rest Framework
  9. mysql删除密码代码_mysql 用户新建、受权、删除、密码修改
  10. mysql csv 表头_Mysql实例mysql 导出CSV文件 并带表头的方法
  11. 设计模式之观察者模式
  12. c51单片机时钟程序汇编语言,单片机电子时钟课设汇编语言代码和proteus仿真
  13. DNA测序发展史(3):三代测序
  14. 【MindSpore】【数据集】数据集内数据获取失败导致迭代器退出
  15. 远程桌面全屏无法退出
  16. 1.3 Codesys十六进制数字字符串与字节互转
  17. 周志明架构课--03.SOA时代:成功理论与失败实践
  18. Webapck 体系基础
  19. Google 提供官方的 adb / fastboot 独立工具包[Win/macOS/Linux]
  20. 反复p图、修图,照片画质低如何修复模糊图片为高清?

热门文章

  1. mysql配置-django
  2. with(nolock)简解
  3. C# 生成私钥和公钥
  4. 什么是Microsoft Teams的App Studio
  5. 如何在Ubuntu上创建桌面快捷方式
  6. 给Web开发人员的以太坊入坑指南
  7. 影响程序员生涯的三个错误观念,你千万不要犯!
  8. 图解ArcGIS API for JavaScript开发环境搭建
  9. noi 4982 踩方格
  10. Maven搭建SpringMVC+Mybatis项目详解【转】