Rust 也许是JavaScript 基建的未来

简介: 本文适合对JavaScript基建感兴趣的小伙伴阅读。

一、RUST简介


本文基于开源项目:

https://www.rust-lang.org/learn/get-started

   RUST是一种快速、可靠且内存高效的编程语言。Facebook、Apple、Amazon、Microsoft和Google使用RUST于系统基础架构、加密、虚拟化和更多低级编程。


   Rust 帮助开发人员编写内存高效的快速软件。它是 C++ 或 C 等语言的现代替代品,专注于代码安全和简洁的语法。


   Rust 与 JavaScript 完全不同。JavaScript 尝试查找未使用的变量或对象并自动从内存中清除它们。这称为垃圾收集。该语言使开发人员无需考虑手动内存管理。


使用 Rust,开发人员可以更好地控制内存分配,而不会像 C++ 那样痛苦。

 

 下面我们来慢慢进入RUST的学习~


二、JS生态系统简介


   在过去的十几年里,许多前辈围绕 JavaScript 共同构建了一个庞大的生态系统:

  • Webpack: 最主要是将多个 JavaScript 文件捆绑成一个。
  • Babel: 最主要是支持旧浏览器的同时编写现代 JavaScript。
  • Terser:最主要生成尽可能小的文件大小。
  • Prettier:最主要是一个有效的、赏心悦目的代码格式化程序。
  • ESLint: 最主要是在部署之前发现他们的代码存在的问题。


目前业界的前端基建工具基本都是用 JavaScript 或 TypeScript 编写的。可以看出我们用 JS 达到了优化的峰值。这就激发了一类新的工具,旨在提高 Web 构建的性能。


SWC

SWC创建于 2017 年,是一个基于 Rust 的可扩展平台,用于下一代快速开发者工具。Next.js、Parcel 和 Deno 等工具以及 Vercel、ByteDance、腾讯、Shopify 等公司都在使用它。


SWC 可用于编译、缩小、捆绑等 - 并且旨在扩展。我们可以调用它来执行代码转换(内置或自定义)。运行这些转换是通过 Next.js 等更高级别的工具进行的。


Deno

Deno创建于 2018 年,是一个简单、现代且安全的 JavaScript 和 TypeScript 运行时,它使用V8并使用 Rust 构建。它试图取代 Node.js,由 Node.js 的原始创建者编写。虽然它是在 2018 年创建的,但直到 2020 年 5 月才达到v1.0。


Deno 的 linter、代码格式化程序和文档生成器是使用 SWC 构建的。


esbuild

esbuild创建于 2020 年 1 月,是一个用 Go 编写的 JavaScript 打包器和压缩器,比现有工具快 10-100 倍。


Rome

Rome创建于 2020 年 8 月,是一个用于 JavaScript、TypeScript、HTML、JSON、Markdown 和 CSS 的 linter、编译器、捆绑器、测试运行器等。他们旨在替换和统一整个前端开发工具链。它是由Sebastian创建的,他也创建了 Babel。


NAPI

napi-rs允许我们使用 Rust 构建预编译的 Node.js 附加组件。它提供了交叉编译和发布本地的二进制文件NPM一个彻头彻尾的现成的解决方案,而无需node-gyp或postinstall脚本。


我们可以构建一个可以直接从 Node.js 调用的 Rust 模块,而无需创建像 esbuild 这样的子进程。


WASM

WebAssembly  ( WASM ) 是一种可移植的低级语言,Rust 可以编译成它。它在浏览器中运行,可与 JavaScript 互操作,并且在所有主要的现代浏览器中都受支持。

虽然 WASM 还不是完美的解决方案,但它可以帮助开发人员创建极快的 Web 体验。Rust 团队致力于高质量和前沿的 WASM 实现。对于开发人员来说,这意味着我们可以在仍然为 Web 编译(使用 WASM)的同时拥有 Rust(与 Go 相比)的性能优势。


这个领域的一些早期库和框架

  • Yew
  • Percy
  • Seed
  • Sycamore
  • Stork


这些编译为 WASM 的基于 Rust 的 Web 框架并没有试图取代 JavaScript,而是与它一起工作。Rust 在追赶 Web:使现有的 JavaScript 工具更快, 以及 编译为 WASM 的未来想法。


可以看出Rust很有可能成为JavaScript基建的未来。


广东靓仔认为要成为JavaScript的未来,Rust有一些路要走,不过Rust已经具备了可扩展性、性能更好、Rust 对 WASM 的支持、社区很受欢迎。


接下里我们一起来敲响Rust的大门


三、Rust入门--安装


试用传送门:https://play.rust-lang.org/


Rustup

Rustup是安装 Rust 的主要工具,既是一个 Rust 安装器也是一个版本管理工具。

macOS、Linux 或其它类 Unix 系统安装:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh


window安装参考:

https://forge.rust-lang.org/infra/other-installation-methods.html


卸载命令:

rustup self uninstall


Cargo

在安装 Rustup 时,我们也会安装 Rust 构建工具和包管理器的最新稳定版,也就是 Cargo。

  • cargo build:用来构建项目
  • cargo run:可以运行项目
  • cargo test:用来测试项目
  • cargo doc:可以为项目构建文档
  • cargo publish:用来将库发布到 crates.io


检查我们是否安装了 Rust 和 Cargo,命令如下:

cargo --version


Rust 支持多种编辑器:

image.png


四、Rust入门--编写Demo


首先用 Cargo 创建一个新项目。我们在终端中执行如下命令:

cargo new hello-rust


然后我们会看到这样的目录:

hello-rust       
|- Cargo.toml    // Rust 的清单文件。其中包含了项目的元数据和依赖库
|- src
  |- main.rs     // 编写应用代码文件


运行

cargo run

结果

image.png


添加依赖

Rust仓库链接:https://crates.io/


在 Rust 中,习惯把包称作“crates”,接下来给我们的demo安装依赖:


Cargo.toml加入如下内容:


[dependencies]
ferris-says = "0.2"


执行cargo build命令,Cargo会开始安装这个依赖,然后会生成Cargo.lock:记录了本地所用依赖库的精确版本。


main.rs使用ferris_says,内容如下:

use ferris_says::say;

我们已经可以使用 ferris-says crate 中导出的 say 函数了。


Demo

main.rs

use ferris_says::say; // from the previous step
use std::io::{stdout, BufWriter};
fn main() {
    let stdout = stdout();
    let message = String::from("Hello 广东靓仔");
    let width = message.chars().count();
    let mut writer = BufWriter::new(stdout.lock());
    say(message.as_bytes(), width, &mut writer).unwrap();
}


运行

cargo run


可以看到如下结果:

----------------------------
< Hello 广东靓仔 >
----------------------------
              \
               \
                 _~^~^~_
             \) /  o o  \ (/
               '_   -   _'
               / '-----' \


到此我们已经算是敲响了Rust的大门,接下来有兴趣可以进一步去学习


五、总结


   推荐进一步学习:https://www.rust-lang.org/learn

相关文章
|
4月前
|
Rust 前端开发 JavaScript
Rust与JavaScript的跨语言交互:探索与实践
本文旨在探讨Rust与JavaScript之间的跨语言交互方法。我们将深入了解WebAssembly(Wasm)的角色,以及它如何使得Rust与JavaScript能够在Web应用中和谐共处。此外,我们还将介绍Rust与JavaScript的集成方式,包括Rust编译到Wasm、使用wasm-bindgen进行Rust与JavaScript的绑定,并通过实际案例展示如何实现两者之间的交互。
|
4月前
|
Web App开发 Rust JavaScript
Rust 笔记:WebAssembly 的 JavaScript API
Rust 笔记:WebAssembly 的 JavaScript API
142 0
|
Rust JavaScript 前端开发
用 Rust 构建你自己的 JavaScript 运行时(2)
这是用 Rust 构建自定义 JavaScript 运行时系列文章的第二篇,我们在前一篇文章的基础上在实现了 fetch API,读取一个文件路径作为命令行参数,支持 TypeScript 和 TS。
272 0
|
Rust JavaScript 前端开发
用 Rust 构建你自己的 JavaScript 运行时(1)
在这篇文章中我们将创建一个自定义的 JavaScript 运行时,它能够执行本地 JavaScript 文件,与文件系统交互,并且有一个简化版的 console API。
433 0
|
Rust JavaScript 前端开发
开发者调查报告:JavaScript 和 Python 仍占主导地位,Rust 持续猛增 4 倍
开发者调查报告:JavaScript 和 Python 仍占主导地位,Rust 持续猛增 4 倍
129 0
|
存储 Rust JavaScript
我的 JavaScript,比你的 Rust 更快
Josh Urbane 是一位从业多年的软件架构师,很喜欢在社交媒体分享技术观点。近日,他写了一篇文章,记录了自己凭借经验赢了与新人开发者打赌的故事,而“我的 JavaScript 比你的 Rust 更快”的结论也是来自这个打赌。他的故事或许可以说明运行策略在研发实践中的重要性。
143 0
|
JavaScript 前端开发 Dart
JavaScript新发展 CoffeeScript Dart Rust Node.js
CoffeeScript http://coffeescript.org/ CoffeeScript (GitHub repo) 是一个使用纯Ruby编写的新编程语言,创建者 Jeremy Ashkenas戏称它是- JavaScript的不那么铺张(买弄)的小兄弟。
1043 0
|
20天前
|
Rust 安全 Go
揭秘Rust语言:为何它能让你在编程江湖中,既安全驰骋又高效超车,颠覆你的编程世界观!
【8月更文挑战第31天】Rust 是一门新兴的系统级编程语言,以其卓越的安全性、高性能和强大的并发能力著称。它通过独特的所有权和借用检查机制解决了内存安全问题,使开发者既能享受 C/C++ 的性能,又能避免常见的内存错误。Rust 支持零成本抽象,确保高级抽象不牺牲性能,同时提供模块化和并发编程支持,适用于系统应用、嵌入式设备及网络服务等多种场景。从简单的 “Hello World” 程序到复杂的系统开发,Rust 正逐渐成为现代软件开发的热门选择。
37 1
|
1月前
|
Rust 安全 编译器
初探 Rust 语言与环境搭建
Rust 是一门始于2006年的系统编程语言,由Mozilla研究员Graydon Hoare发起,旨在确保内存安全而不牺牲性能。通过所有权、借用和生命周期机制,Rust避免了空指针和数据竞争等问题,简化了并发编程。相较于C/C++,Rust在编译时预防内存错误,提供类似C++的语法和更高的安全性。Rust适用于系统编程、WebAssembly、嵌入式系统和工具开发等领域。其生态系统包括Cargo包管理器和活跃社区。学习资源如&quot;The Book&quot;和&quot;Rust by Example&quot;帮助新手入门。安装Rust可通过Rustup进行,支持跨平台操作。
102 2
初探 Rust 语言与环境搭建
|
20天前
|
Rust 安全 程序员
Rust 语言的防错机制太惊人了!安全编码从此不再是难题,快来一探究竟!
【8月更文挑战第31天】《安全编码原则:Rust 语言中的防错机制》探讨了代码安全的重要性,并详细介绍了Rust语言如何通过内存安全模型、所有权与借用规则等特性,在编译阶段检测并阻止潜在错误,如缓冲区溢出和悬空指针。文章还讨论了类型安全、边界检查等其他安全特性,并提出了遵循不可变引用、避免裸指针及充分测试等实用编码原则,以进一步提升代码质量和安全性。随着Rust在软件开发中的应用日益广泛,掌握其安全编码原则变得尤为重要。
31 0