Rust wasm介绍
Deno介绍
Deno 是一个简单、现代、安全的 JavaScript、TypeScript、Webassembly 运行时环境。
Deno项目终于发布了1.0版本!Deno 是由 Node.js 的创始人 Ryan Dahl 创建的,旨在解决他所说的“我为Node.js感到遗憾的十件事”。
Deno 抛弃了 NPM 和臭名昭著的 node_modules。它是单个二进制可执行文件,可运行以 TypeScript 和 JavaScript 编写的应用程序。
建立在:
这个Deno入门项目模板。按照说明操作,只需 5 分钟你就能在 Deno 中运行第一个 WebAssembly 函数(由 Rust 编写)。
Node.js:JavaScript 的易用性(尤其是编写基于事件的异步应用程序时)以及 C/C++的高性能。Node.js 应用程序是用 JavaScript 编写的,但会在基于 C/C++的原生运行时上执行,这些运行时包括谷歌 V8 JavaScript 引擎和许多原生库模块。Deno 希望能复制这种成功路径,但在这个过程中它使用了 TypeScript 和 Rust 支持的现代技术栈。
Deno 是单个二进制可执行文件。
应用程序是使用 TypeScript 或 JavaScript 编写的,在代码中将依赖项明确声明为 import 语句,并带有完整的 URL,链接到依赖项的源代码。
Deno 与 Node.js 模块不兼容。
在毫秒级别执行复杂神经网络模型运算的 AI 即服务应用程序?在 Deno 和 Node.js 中,许多函数都是通过 TypeScript 或 JavaScript API 调用,但以 Rust 或 C 语言编写的原生代码执行。
Deno 内部使用谷歌 V8 引擎。V8 不仅是一个 JavaScript 运行时,还是一个 WebAssembly 虚拟机。Deno 对 WebAssembly 提供了开箱即用的支持。Deno 为你的 TypeScript 应用程序提供了一个 API,以调用 WebAssembly 中的函数。
实际上,WebAssembly 中已经实现了一些流行的 Deno 组件。例如,Deno 中的sqlite module是使用 Emscripten 将 sqlite 的 C 源代码编译到 WebAssembly 中的成果。Deno WASI组件使 WebAssembly 应用程序可以访问操作系统的底层资源,例如文件系统。
配置
curl -fsSL https://deno.land/x/install/install.sh | sh
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
ssvmup工具可以自动执行构建过程并生成所有工件,以使你的 Deno 应用程序轻松调用 Rust 函数。
curl https://raw.githubusercontent.com/second-state/ssvmup/master/installer/init.sh -sSf | sh
安装后配置export环境
rustwasmc build --target deno --no-wasi
deno run --allow-read --allow-env --unstable deno/test.ts
deno run --allow-read --allow-net --allow-env --unstable deno/server.ts
Wasm demo - wasm-pack
cargo install wasm-pack
cargo new --lib mywasm
toml文件新增
[lib]
crate-type = ["cdylib"]
[dependencies]
wasm-bindgen = "0.2"
lib.rs文件新增
use wasm_bindgen::prelude::*; | .Cargo.toml.swp 12 |~
13 #[wasm_bindgen] |~
14 extern { |~ 15 pub fn alert(s:&str); |~
16 } |~
17 |~
18 #[wasm_bindgen] |~
19 pub fn greet(name:&str) { |~
20 alert(&format!("Hello, {}!",name)); |~
21 }
然后执行 wasm-pack build --target web
在项目目录线新建index.html
1 <!DOCTYPE html> |</mywasm/
2 <html> |▸ .git/
3 <head> |▸ pkg/
4 <meta charset="utf-8"> |▾ src/
5 <title>hello-wasm example</title> | lib.rs
6 </head> |▸ target/
7 <body> | .gitignore
8 <script type="module"> | Cargo.lock
9 import init, {greet} from "./pkg/mywasm.js"; | Cargo.toml
10 init() | index.html 11 .then(() => { | .Cargo.toml.swp 12 greet("WebAssembly") |~
13 }); |~
14 </script> |~ 15 </body> |~
15 </body> |~
16 </html>
最后在项目目录下执行 python -m http.server
127.0.0.1:8000
参考
Last updated