Rust and WebAssembly 先导篇

2024-02-29 10:08
文章标签 rust webassembly 先导

本文主要是介绍Rust and WebAssembly 先导篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文地址:Rust 🦀 and WebAssembly 🕸

为什么是Rust和WebAssembly?

  • 更底层的控制与高等级的工学设计
  • 更小的 .wasm 体积
  • 不需要重写任何东西
  • 良好的兼容性

更底层的控制与高等级的工学设计

JavaScript网络应用着力于获得更加可靠的性能和表现。但是JavaScript的动态类型和垃圾回收造成的卡顿会产生反面的影响。如果你不小心偏离了JIT的最佳路径,看似很小规模的代码的改动都可能造成性能的急剧下降。

更小的 .wasm 体积

代码大小很重要,因为对于许多JavaScript Web application,相关的文件都是通过网络下载的。并且Rust的运行时很小,因此 .wasm 文件也比较小。因为不需要垃圾收集器这种额外的机制。您只需要为实际使用的功能支付时间代价。

不需要重写任何东西

不需要丢弃现有的代码库。您可以首先将您对性能最敏感的 JavaScript 函数移植到 Rust,以获得直接的好处。

良好的兼容性

Rust 和 WebAssembly 与现有的 JavaScript 工具集成。它支持 ECMAScript 模块,您可以继续使用您喜欢的工具,例如 npm 和 Webpack。

相关背景概念

什么是 WebAssenbly

WebAssembly (wasm) 是一种简单的机器模型和可执行格式,具有广泛的规范。它旨在便携、紧凑,并以或接近原生速度执行。

作为一种编程语言,WebAssembly 由两种表示相同结构的格式组成,尽管方式不同:

  1. .wat 文本格式(称为wat for “WebAssembly Text”)使用 S-expression,并且与 Scheme 和 Clojure 等 Lisp 语言家族有一些相似之处。
  2. .wasm 二进制格式是更低级的,旨在提供wasm虚拟机直接使用。它在概念上类似于 ELF 和 Mach-o。

线性内存

WebAssembly 有着非常简单的内存模型。 wasm 模块可以访问单个“线性内存”,它本质上是一个扁平的字节数组。此内存可以增加页面大小 (64K) 的倍数。它不能缩小。

WASM 只能用于Web吗?

虽然它目前在 JavaScript 和 Web 社区中引起了广泛的关注,但 wasm 对其宿主环境没有任何假设。因此,推测 wasm 将成为一种“可移植的可执行”格式,在未来用于各种上下文是有道理的。然而,截至今天,wasm 主要与 JavaScript (JS) 相关,它有多种风格(包括 Web 和 Node.js)。

这篇关于Rust and WebAssembly 先导篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/758403

相关文章

Rust中的注释使用解读

《Rust中的注释使用解读》本文介绍了Rust中的行注释、块注释和文档注释的使用方法,通过示例展示了如何在实际代码中应用这些注释,以提高代码的可读性和可维护性... 目录Rust 中的注释使用指南1. 行注释示例:行注释2. 块注释示例:块注释3. 文档注释示例:文档注释4. 综合示例总结Rust 中的注释

Rust格式化输出方式总结

《Rust格式化输出方式总结》Rust提供了强大的格式化输出功能,通过std::fmt模块和相关的宏来实现,主要的输出宏包括println!和format!,它们支持多种格式化占位符,如{}、{:?}... 目录Rust格式化输出方式基本的格式化输出格式化占位符Format 特性总结Rust格式化输出方式

Rust中的Drop特性之解读自动化资源清理的魔法

《Rust中的Drop特性之解读自动化资源清理的魔法》Rust通过Drop特性实现了自动清理机制,确保资源在对象超出作用域时自动释放,避免了手动管理资源时可能出现的内存泄漏或双重释放问题,智能指针如B... 目录自动清理机制:Rust 的析构函数提前释放资源:std::mem::drop android的妙

Rust中的BoxT之堆上的数据与递归类型详解

《Rust中的BoxT之堆上的数据与递归类型详解》本文介绍了Rust中的BoxT类型,包括其在堆与栈之间的内存分配,性能优势,以及如何利用BoxT来实现递归类型和处理大小未知类型,通过BoxT,Rus... 目录1. Box<T> 的基础知识1.1 堆与栈的分工1.2 性能优势2.1 递归类型的问题2.2

在Rust中要用Struct和Enum组织数据的原因解析

《在Rust中要用Struct和Enum组织数据的原因解析》在Rust中,Struct和Enum是组织数据的核心工具,Struct用于将相关字段封装为单一实体,便于管理和扩展,Enum用于明确定义所有... 目录为什么在Rust中要用Struct和Enum组织数据?一、使用struct组织数据:将相关字段绑

浅析Rust多线程中如何安全的使用变量

《浅析Rust多线程中如何安全的使用变量》这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下... 目录1. 向线程传递变量2. 多线程共享变量引用3. 多线程中修改变量4. 总结在Rust语言中,一个既引人入胜又可

Rust 数据类型详解

《Rust数据类型详解》本文介绍了Rust编程语言中的标量类型和复合类型,标量类型包括整数、浮点数、布尔和字符,而复合类型则包括元组和数组,标量类型用于表示单个值,具有不同的表示和范围,本文介绍的非... 目录一、标量类型(Scalar Types)1. 整数类型(Integer Types)1.1 整数字

Rust中的Option枚举快速入门教程

《Rust中的Option枚举快速入门教程》Rust中的Option枚举用于表示可能不存在的值,提供了多种方法来处理这些值,避免了空指针异常,文章介绍了Option的定义、常见方法、使用场景以及注意事... 目录引言Option介绍Option的常见方法Option使用场景场景一:函数返回可能不存在的值场景

【Rust练习】12.枚举

练习题来自:https://practice-zh.course.rs/compound-types/enum.html 1 // 修复错误enum Number {Zero,One,Two,}enum Number1 {Zero = 0,One,Two,}// C语言风格的枚举定义enum Number2 {Zero = 0.0,One = 1.0,Two = 2.0,}fn m

linux中使用rust语言在不同进程之间通信

第一种:使用mmap映射相同文件 fn main() {let pid = std::process::id();println!(