全栈程序员的新玩具Rust(六)第一个WASM程序

先上代码

https://gitee.com/lightsever/rust_study/tree/master/wasm_hello01

webassembly就不用再赘述了,耳朵里面快磨出茧子来了。

rustwasm是火狐自家的玩具,让我们来继续做实验,让rust飞起来吧。

环境安装

安装好rust环境之后仍然需要 一个 wasm 工具包

cargo install wasm-pack

然后如果想快速创建一个wasm项目模板可以用这个

cargo generate --git https://github.com/rustwasm/wasm-pack-template

WASM项目

生成后的项目代码如下

#[wasm_bindgen]就是告诉rust,这个函数要么是导出给js用的,要么希望从js那拿过来用的。

自然 alert是从js那拿过来用

greet是给js调用的

我们搞helloworld,这里就先不改了

这个项目用cargo 编译是生成不了wasm文件的

要在项目目录用

wasm-pack build

这样wasm就编译成功了

生成的项目是个npm包,自己生成了胶水代码,使用非常方便,但是要用webpack打包。

我自己npm都不熟练,我就不去搞这个了。

主要是不能接受暗藏玄机,我们要来搞一搞事情。

JS项目

我用TS来搞这个项目,他生成的胶水代码是个npm包,所以直接放在网站项目里是不能用的,我们要来改一改。

你或许会有点疑惑都用WASM了?怎么还要写js代码?这是因为WASM不能完全替代js。他需要初始化,丢一些可以import的函数给WASM,要不然WASM啥也不能干。另外需要JS来调用WASM的某个函数,要不然WASM啥也不会干。

也就是说,主要是初始化和入口工作,这个工作可以一次性,然后整个网站的逻辑全部用wasm完成。

首先是胶水js,这个文件我们要做三处修改

1.首先

import * as wasm from …

这行删掉,这是告诉js从wasm导入一个模块,它会被打包程序替换,而我们不想用webpack

2.然后是底下有 export的两行

把export 和 const 关键字删除

这里是导入js函数给wasm的胶水代码,和导出wasm函数个js的胶水代码。

同理,原来都是 package系统用的东西

好了,改完了

但这样wasm从哪里来?

js在web环境所有的全局变量都是 window 的成员,这样我们随便从哪都能给他塞进去

然后是胶水的定义.d.ts

把export 改为 declare,这就成了一个不依赖打包就能使用的定义文件啦。

写我们的app.ts

爱用ts,你用js也差不多这样

1.加载 wasm文件 为 arraybuffer

2.实例化wasm对象

这里有个小花招,我们直接把window塞了进去,否则你就需要手工构造一个wasm导入的js胶水函数的字典。因为所有的全局对象都是windows的成员,而rustwasm帮我们生成的胶水代码都是全局定义的,直接丢window进去完事儿。

3.把全局的wasm对象给赋值了,这里直接window[“WASM”]这样塞进去了。

4.调用wasm入口函数

按照我们编写的rust代码,应该alert 出一个  hello peter.

诚不欺我。

入口函数和初始化函数一次写完就不用搞了。

以后只消生成wasm就是,当然胶水文件因为我们不是用rustwasm预设的配合webpack的用法,所以我们每次也要改改。但我们的改动其实很机械

1.js文件,有import的 整行删掉

2.js文件,export 开头的,删除 export 和 const关键字

3.d.ts 文件,export开头的,替换成 declare

回头写个脚本,自动办了就是。

今天有了helloworld,写个游戏,就不远了。

原文地址:https://www.cnblogs.com/crazylights/p/12122068.html

时间: 2024-10-08 11:42:33

全栈程序员的新玩具Rust(六)第一个WASM程序的相关文章

全栈程序员的新玩具Rust(一) IDE环境

最基本的helloword过程 我们之前提过 第一步.安装rust工具链 https://www.rust-lang.org/tools/install 第二步.创建项目 cargo new helloworld 会得到一个控制台程序模板,源码如下 fn main() {     println!("Hello, world!");} 第三步.运行项目 cd helloworld cargo run 或者直接去执行exe(仅限windows) 注:rust在window下编译需要vs的

全栈程序员的新玩具Rust(二)基本代码入门

先来看这个简单的程序 1.奇怪的关键字 fn=function 函数 mut=mutability 变异性,反义词是immutability 不变性. 2.变量定义 这和其它语言不太一样,普通的语言里变量默认为可变,如果不可变则要标注为readonly 有些语言压根没有不可变这个设计,所有变量都可变. rust中,let定义的变量为immutability ,不可变,类似于其它语言中的readonly 所以图中的x 为 只读变量,不可变 图中y可以赋值 并且rust 允许覆盖定义,图中x定义了两

全栈程序员的新玩具Rust(三)板条箱

上次用到了stdout,这次我们来写一个更复杂一点的游戏 rust的标准库叫做std,默认就会引入. 这次我们要用到一个随机数函数,而随机数比较尴尬的一点是这玩意不在标准库中,我们要额外依赖一个库. 很多编程方案都有自己的模块化库系统,rust也不例外,不过rust 把库叫做crate,就是图中这种箱子的意思,倒也形象. rust提供了一个官方网站 crates.io用来管理库,你也可以把你的库提交上去 我们这次就要使用这个rand库 安装依赖库 因为查询到当前rand库的版本已经到了 0.7.

推荐给程序员的新技能:如何把一个杯子卖到上万元

文章来源:如何把一个杯子卖到上万元,不学你就OUT了 我们可以看看一个产品卖到多少钱需要占有什么样的资源: 第1种卖法:卖产品本身的使用价值,只能卖3元/个 如果你将他仅仅当一只普通的杯子,放在普通的商店,用普通的销售方法,也许它最多只能卖3元钱,还可能遭遇邻家小店老板娘的降价招客暗招,这就是没有价值创新的悲惨结局. 需要资源:普通的销售渠道. 第2种卖法:卖产品的文化价值,可以卖5元/个 如果你将它设计成今年最流行款式的杯子,可以卖5元钱.隔壁小店老板娘降价招客的暗招估计也使不上了,因为你的杯

程序员应具备的素质(国内的大多程序员生产力不够,所以只能早早转行)

学习编程已经有10个年头了,在这10年里,我做个不少软件项目,有大有小,写过基于单片机的裸奔式的嵌入式软件,写过基于os(linux.rtems.linux)的嵌入式软件,做过windows驱动开发,开发个windows应用软件,这一路走来,发现在国内程序员并不受尊重,程序员往往寿命很短,不到30岁就的转行,大家一致认为程序员是it民工,再来看看国外的程序员40岁都能活跃在编程一线,是大家羡慕的朝阳行业,为什么国内国外程序员会有如此天壤之别呢?说白了国内的大多程序员生产力不够,没有创造出作为一名

“全栈2019”Java多线程第四十六章:判断任意线程是否已持有写锁

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多线程第四十六章:判断任意线程是否已持有写锁 下一章 "全栈2019"Java多线程第四十七章:判断锁是否为公平锁isFair() 学习小组 加入同步学习小组,共同交流与进步. 方式一:加入编程圈子. 方式二:关注头条号Gorhaf,私信"Java学习小组". 方式三:关

20年的老程序员对新入行的朋友的一些建议

从事编程这一行也已经20年了,到今天为止,有关编程方面的知识我也写了六七门课程了,教授课程的时间也已超过了1000小时,下面我所说的全部是我多年来的实践的经验之谈. 编程真的不是一件容易的事. 不管你多喜欢或是多会编程,在学习和解决问题上总会碰到障碍.工作的时间越久就越能明白这个道理.不过这倒是一个让人进步的机会,因为你要一直不断的学习才能很好的解决你面前的难题.如果你已不有了进取心,那么当遇到难道无法解决时你就会想要放弃. 编程也是最让人沮丧的事情 正常的编程过程都是这样的:尝试.失败.学习.

程序员老司机谈到的一位优秀程序员应该具备的十个优秀的习惯

在这个世界上,有数百万的人热衷于软件开发,他们有很多名字,如:软件工程师(Software Engineer),程序员(Programmer),编码人(Coder),开发人员(Developer).经过一段时间后,这些人也许能够成为一个优秀的编码人员,他们会非常熟悉如何用计算机语言来完成自己的工作.但是,如果你要成为一个优秀的程序员,你还可以需要有几件事你需要注意,如果你能让下面十个条目成为你的习惯,那么你才能真正算得上是优秀程序员. 1. 学无止境.就算是你有了10年以上的程序员经历,你也得要

程序员的职业修养观后感——这是一个态度问题

我们常常听人说起,职业态度,我相信,大家对职业态度都有自己的理解. 那么,作为一名程序员,什么才是我们的职业态度呢? 马丁大叔结合了自己的经历以及全身的功力,写出了这么一本<程序员的职业修养>来探讨这一问题. 还是同样的配方,同样的味道,马丁大叔先举了一个失败的例子,关于他年轻时候怒发冲冠辞去工作之后又迫于无奈降薪回去继续上班的故事. 这本书主要是讨论了作为一名程序员在工作中会遇到的非程序问题. 比如,你的产品经理经常异想天开怎么办?你的项目估算日期几乎不可能怎么办? 我想面对这些问题,大多数