Pywasm: Python 爱上 Wasm, 美味尝鲜!

pywasm 是一个使用纯 Python 实现的 WebAssembly 解释器. 您可以使用如下命令来安装它:

$ pip3 install pywasm

WebAssembly

WebAssembly/wasm 是一个可移植, 体积小, 加载快并且兼容 Web 的全新格式. WebAssembly 是由主流浏览器厂商组成的 W3C 社区团体 制定的一个新的规范.

高效: WebAssembly 有一套完整的语义, 实际上 wasm 是体积小且加载快的二进制格式, 其目标就是充分发挥硬件能力以达到原生执行效率

安全: WebAssembly 运行在一个沙箱化的执行环境中, 甚至可以在现有的 JavaScript 虚拟机中实现. 在 web 环境中, WebAssembly 将会严格遵守同源策略以及浏览器安全策略.

开放: WebAssembly 设计了一个非常规整的文本格式用来, 调试, 测试, 实验, 优化, 学习, 教学或者编写程序. 可以以这种文本格式在web页面上查看wasm模块的源码.

标准: WebAssembly 在 web 中被设计成无版本, 特性可测试, 向后兼容的. WebAssembly 可以被 JavaScript 调用, 进入 JavaScript 上下文, 也可以像 Web API 一样调用浏览器的功能. 当然, WebAssembly 不仅可以运行在浏览器上, 也可以运行在非web环境下.

AssemblyScript: 为 wasm 发明的编程语言

目前为止, 许多高级语言都能编译到 wasm. 其中最成熟的是 C 语言: 毕竟在设计开发过程中 C 就是 wasm 的第一目标. 但是 C 毕竟对大众不太友好, 因此在 C 之上一门新的语言出现了, 它就是 AssemblyScript, 一门对 TypeScript 做了减法的编程语言.

我们新建一个目录, 进入该目录

$ npm install --save-dev assemblyscript

$ npx asinit .

asinit 命令自动创建建议的目录结构和配置文件, 包括:

包含要编译为 WebAssembly 源代码的 ./assembly 目录(一个 index.ts 和 tsconfig.json)

./build 目录, 用于放置已编译的 WebAssembly 二进制文件

然后, 打开 ./assembly/index.ts, 其源代码是一个示例的加法函数, 如下

export function add(a: i32, b: i32): i32 {

return a + b;

}

$ npm run asbuild

运行如上命令将程序编译为 WebAssembly.

使用根目录中的 index.js 实例化和导出 WebAssembly 模块, 您将可以像任何其它模块一样使用它, 其显着区别在于, 模块导出的唯一值是整数和浮点数. 到目前为止, 一切都很好...

Run on pywasm

$ vim index.py

将以下代码拷贝到 index.py 中, 代码中做了两件事: 载入 wasm 二进制文件, 并调用函数 add(10, 20).

import pywasm

def env_abort(_: pywasm.Ctx):

return

vm = pywasm.load('./build/optimized.wasm', {

'env': {

'abort': env_abort,

}

})

r = vm.exec('add', [10, 20])

print(r)

$ python3 index.py

# 30

Bingo!

另外, 本文代码已发布至 github, 您可以直接克隆代码到本地, 如此, 就不用自己敲代码啦!

$ git clone https://github.com/mohanson/pywasm_assemblyscript

python wasm_Python-pywasm-美味尝鲜相关推荐

  1. 【Python】利用Conda尝鲜Python 3.10

    1 简介 就在几天前,Python3.10的第一个正式版本3.10.0发布,之前我们只是从其各个测试版本中捕风捉影地知晓了一些可能加入的新特性,而在正式版本中,我们得以一睹其正式加入的诸多新特性. 本 ...

  2. 尝鲜体验 VS Code Python 原生 Jupyter Notebook 支持

    9 月 21 日,PyCon China 2019 在上海举办.微软的 VS Code 发布了原生的Juypter Notebook 支持. 虽然要等到月底 Marketplace 里面才会正式更新, ...

  3. Python 3.10 尝鲜

    Python 3.10 尝鲜 图源:giaiphapso.com Python 3.10 版本已经在本月初(10.4)正式发布,其中最让人振奋的新特性是模式匹配,简单的说就是Python终于引入了类似 ...

  4. TensorFlow 2.0开发者预览版放出!上手尝鲜可以开始了

    问耕 发自 凹非寺 量子位 出品 | 公众号 QbitAI 下一代TensorFlow终于可以尝鲜了. 今天凌晨,谷歌AI团队的Martin Wicke在TensorFlow官方社区发帖,兴奋地通知T ...

  5. 一加8 线刷官方ColorOS尝鲜版遇到的各种问题及解决方案

    一加工程师发布刷尝鲜版Color OS系统的教程贴 教程原地址:https://www.oneplusbbs.com/thread-5873103-1.html 一加8刷Color OS 这里请注意, ...

  6. 相对舒适的爬虫入门系列(一):手快尝鲜【requests库】

    一.实现爬虫命令的交互前,总是要经过环境配置的 (虽然不同系统操作层面上会有不同,本文主要讲方向性内容(配置环境)+一些具体实操代码上手,要问咱也先说咱的环境是win10哈) 1.请直接下载安装Ana ...

  7. Manjaro尝鲜体验

    Manjaro尝鲜体验 mnjaro是世界上流行度第一的linux发行版,是基于ArchLinux核心简化安装版.因为手中的thinkpad x200s 安装win10后cpu温度太高,于是自己从网上 ...

  8. Windows下文本生成图像AI画图尝鲜体验

    工具库 transformers 的开源方 Hugging Face 发布了一个专注于 diffuser 模型的开源库,我们可以基于它,仅仅通过几行代码就开始生成自己的艺术作画.不过这个 diffus ...

  9. 微信团队分享:Kotlin渐被认可,Android版微信的技术尝鲜之旅

    本文由微信开发团队工程是由"oneliang"原创发表于WeMobileDev公众号,内容稍有改动. 1.引言 Kotlin 是一个用于现代多平台应用的静态编程语言,由 JetBr ...

最新文章

  1. Microsoft StreamInsight 构建物联网
  2. git和github的关系
  3. leetcode算法题--猜数字大小 II★★
  4. Xen虚拟化之一:Xen环境组件详解
  5. 【大讲堂第二期 | 第二场课程预告】全世界最出名的互联网公司的小伙伴都在这里!...
  6. stable_sort
  7. B 站 CEO 的身份证被上传到 GitHub 了?
  8. oracle 批量插入
  9. bom实现方块移动_从0开始实现一个俄罗斯方块
  10. 心电信号越界怎么回事_心电监护仪常见故障分析与排除
  11. 偏差与方差,欠拟合与过拟合
  12. Java Persistence with MyBatis 3(中文版) 第二章 引导MyBatis
  13. Node学习记录: mongodb
  14. 基模高斯光束matlab_matlab 计算高斯光束的束腰 - 物理 - 小木虫 - 学术 科研 互动社区...
  15. linux安装ps2键盘驱动程序,VoodooPS2Controller v1.8.25 黑苹果键盘鼠标触摸板万能驱动 _ 黑苹果乐园...
  16. 国外服务器有什么作用,网站放在国外服务器好吗?有什么优势?
  17. c# 使用正则表达式 提取章节小说正文全本篇
  18. SpringBoot集成MongoDB实现两种CRUD
  19. pytorch CNN手写字体识别
  20. 德州学院计算机专业地址,德州学院 计算机系 谢延红老师简介 联系方式 手机电话 邮箱...

热门文章

  1. python selenium 框架说明_基于python+selenium的框架思路(二)
  2. python可以实现什么黑科技_Python黑科技之元类
  3. 庄家如何用计算机下单,新人必看!庄家透露坐庄下单要诀
  4. 改变照片分辨率的软件_AI黑科技竟如此强大,模糊照片无损放大600%变得更清晰!...
  5. 怎么设置电脑屏幕一直亮着_电脑屏幕出现条纹是什么原因 花屏怎么解决?
  6. 《Python知识手册》,高清pdf免费获取
  7. 利用 Python 分析了某化妆品企业的销售情况,我得出的结论是?
  8. html table导出excel 插入图片_前端 Table 用 JS 导出EXCEL(支持大量数据,保留报表格式) - pensive2019...
  9. python asyncio理解_我实在不懂Python的Asyncio
  10. mysql web日志_mysql日志管理