🔮
Rust学习笔记
  • 介绍
  • Rust入门
    • 安装使用
    • Cargo初用
    • 其他工具
    • 实例1
    • vim安装及配置
    • rust analyzer速度慢
  • rust基础
    • 关键字
    • 模块module和测试
    • 变量-数据类型
      • 浮点数
      • NaN
      • 有理数和复数
    • 单元类型
    • 字符串-切片-数组-元组-hashpmap
    • 结构体和枚举
    • 控制语句
    • 模式匹配match
    • 函数-method 闭包 迭代器
    • File操作
  • Rust进阶
    • 所有权
      • 所有权基础
      • 如何让函数使用某个值,但不获得其所有权
      • 切片
    • Rust VS C
    • 函数指针
  • Q&A
    • Rust的宏
    • cargo expand
    • web server
    • cargo watch使用
    • lib分类
    • cargo源
  • 参考
    • 博客
    • 项目
  • rust内存泄露
  • 智能指针
  • Tauri类似electron的框架
  • Tokio包使用
  • Rust wasm介绍
  • 多线程
    • C语言
  • Golang语言
    • 项目
  • Java
  • Javascript
Powered by GitBook
On this page
  • Deno介绍
  • 配置
  • Wasm demo - wasm-pack
  • 参考

Rust wasm介绍

PreviousTokio包使用Next多线程

Last updated 2 years ago

Deno介绍

Deno 是一个简单、现代、安全的 、、 运行时环境。

项目!Deno 是由 Node.js 的创始人 Ryan Dahl 创建的,旨在解决他所说的“”。

Deno 抛弃了 NPM 和臭名昭著的 node_modules。它是单个二进制可执行文件,可运行以 TypeScript 和 JavaScript 编写的应用程序。

建立在:

  • (Deno 的底层是用 Rust 开发,而 Node 是用 C++)

  • (Deno 的事件机制是基于 Tokio,而 Node 是基于 libuv)

。按照说明操作,只需 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 中的函数。

配置

安装后配置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

参考

实际上,WebAssembly 中已经实现了一些流行的 Deno 组件。例如,Deno 中的是使用 Emscripten 将 sqlite 的 C 源代码编译到 WebAssembly 中的成果。使 WebAssembly 应用程序可以访问操作系统的底层资源,例如文件系统。

curl -fsSL | sh

curl --proto '=https' --tlsv1.2 -sSf | sh

工具可以自动执行构建过程并生成所有工件,以使你的 Deno 应用程序轻松调用 Rust 函数。

curl -sSf | sh

curl

JavaScript
TypeScript
Webassembly
Deno
终于发布了1.0版本
我为Node.js感到遗憾的十件事
Rust
Tokio
TypeScript
V8
这个Deno入门项目模板
sqlite module
Deno WASI组件
安装Deno
https://deno.land/x/install/install.sh
https://sh.rustup.rs
ssvmup
https://raw.githubusercontent.com/second-state/ssvmup/master/installer/init.sh
hello world源代码和应用程序模板
http://localhost:8000/
聊聊Deno的那些事