偶然看到写 Rust 代码,领树莓派
这种好事怎么能错过?虽然只能领到 Zero W;我本来就对 Rust 比较感兴趣,这次正好尝试一下。
先按照教程走吧:
为了省事我用的 docker,但实际上一点都不省事。
ssvm 要求 Ubuntu 20.04,对我服务器装着的纯血 Arch 不太友好。
git clone https://github.com/second-state/ssvm-nodejs-starter
cd ssvm-nodejs-starter
docker build -t ssvm-nodejs:v1 . # 需要很长时间,注意
docker run -p 3000:3000 --rm -it -v $(pwd):/app ssvm-nodejs:v1进入开发环境,接下来尝试编译:
(cargo build 速度感人,这里我推荐使用 proxychains-ng)
cd /app
cargo build # 需要很长时间,注意
ssvmup build # 我前几次尝试的时候没有执行 cargo package,结果一点反应没有;引以为戒。
node node/app.js # 编译完就可以运行了这是一个 Hello World 示例,跑起来大概这样:

新手教程已经完成了,我也该着手修改了。
做点什么呢?Rust 和 WebAssembly 我都是第一次接触。
考虑到作为初学者不应该写的太大,这里我选择了 leetcode 的 1374. Generate a String With Characters That Have Odd Counts。
之后我花了两天尝试用 ajaxForm 提交,不过怎么样都是失败。

于是就有了现在下面的这个玩意… 反正只说了学习基础知识欸嘿
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub fn sb(s: &str) -> String {
let l = s.parse::<i32>().unwrap();
let r = "a".repeat(l as usize - 1) + if l & 1 != 0 { "a" } else { "b" };
println!("The Rust function sb() received {}", r);
return r;
}app.js:
const { sb } = require('../pkg/ssvm_nodejs_starter_lib.js');
const http = require('http');
const url = require('url');
const hostname = '0.0.0.0';
const port = 3000;
const server = http.createServer((req, res) => {
const queryObject = url.parse(req.url,true).query;
if (!queryObject['length']) {
res.end(`Please use command curl http://${hostname}:${port}/?length=LENGTH \n`);
} else {
res.end(sb(queryObject['length']) + '\n');
}
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});这次试手的源码我放在了 GitHub 。(然而并没有什么用)
顺便一提,sb 指 stringbuilder
作者:藍
链接:https://kwaa.dev/p/ssvm-nodejs/
本文采用 CC BY-NC-SA 4.0 进行许可。