2024年JavaScript开发人员必读:为何需要了解Rust?

发表时间: 2024-06-15 22:38

二十多年来,JavaScript一直是网络开发的主导语言。然而,最近,Rust作为网络开发的语言越来越受欢迎。主要原因是Rust比JavaScript更快、更安全。

Rust不适合前端开发,但它是后端开发的绝佳选择。

Rust是一种编译语言,以其速度、性能和内存安全性而闻名。它也是一种相对较新的语言,但它已经在编程社区中广受欢迎。

为什么是生锈?

JavaScript开发人员切换到Rust有几个原因:

  • 性能:Rust是一种编译语言,这意味着它在运行之前被翻译成机器代码。这使得Rust代码比在运行时解释的JavaScript代码快得多。
  • 内存安全:Rust有一个独特的所有权系统,可以防止内存泄漏和其他内存相关错误。这使得Rust代码比JavaScript代码更可靠、更安全。
  • 并发性:Rust内置了对并发性的支持,这使得编写可以同时运行多个任务的程序变得容易。
  • 现代语言:Rust是一种现代语言,从头开始设计安全、高效和富有表现力。

Rust比JavaScript的额外好处:

  • 没有运行时:Rust不需要运行时环境,这可以使其比JavaScript更轻量级、更高效。
  • 元编程功能:Rust支持元编程,允许您编写生成其他代码的代码。这可用于各种任务,例如构建自定义语言工具。
  • 不断增长的社区和生态系统:Rust社区正在迅速发展,Rust的图书馆和工具生态系统正在不断增长。

JavaScript开发人员的关键概念

如果您是对学习Rust感兴趣的JavaScript开发人员,您需要了解一些关键概念:

所有权

在Rust中,每个值都有一个所有者。当不再需要该值时,所有者负责分配内存。

一开始,这可能有点挑战性,但对于了解Rust如何防止内存泄漏至关重要。

fn main() {    let s1 = String::from("hello"); // s1拥有字符串"hello"    let s2 = s1; // "hello"的所有权移至s2    // println!("{}, world!", s1); // 错误:s1不再有效    println!("{}, world!", s2); // 这很有效!s2现在拥有字符串}
  • 我们创建一个字符串s1,它拥有“你好”数据。
  • 当我们分配s2 = s1时,“hello”的所有权将s2
  • s1不再有效,尝试使用它会导致错误。

借贷

Rust允许您借用对值的引用,而不是复制它们。这可能比复制更有效,但正确使用引用以避免内存错误很重要。

fn calculate_length(s: &String) -> usize {s.len()}fn main() {    let s1 = String::from("hello");    let len = calculate_length(&s1); // 我们借用s1    println!("'{}'的长度是{}.", s1, len); // s1仍然有效}
  • calculate_length引用(&String)到一个字符串。它不承担所有权。
  • 我们创建s1,然后借用它使用&s1calculate_length
  • s1函数调用后仍然可用,因为我们只是暂时借用了它。

范围

fn main() {{        let s = String::from("hello"); // s 在这里创建        println!("{}", s);} // s的范围结束,所以它会自动删除(内存已分配)}
  • s在代码块{}中创建。
  • 在街区的尽头,s超出了范围。Rust会自动重新分配s拥有的内存。

类型

Rust是一种静态类型语言,这意味着每个值的类型必须在编译时知道。这有助于在开发过程的早期发现错误。

fn main() {    // 基本整数    让x:i32 = 42;    // 浮点数(默认为f64)    让y:f64 = 3.14;    // 布尔    let is_active: bool = true;    // 字符(单引号)    让my_char:char = 'A';    // 字符串(拥有,可以更改)    let mut hello = String::from("Hello");hello.push_str(", world!");    println!("{}", hello);    // 字符串引用(字符串的不可变视图)    让问候:&str =“嘿!”;}
  • 您声明变量,后跟变量名、冒号(:)和类型。
  • Rust提供i32(32位整数)、f64(64位浮点数)、bool等原语。
  • String表示一个动态的、可增长的字符串,而&str是字符串切片;对字符串部分的引用。

错误处理

Rust有一个非常严格的错误处理系统。所有错误都必须通过返回错误值或恐慌来明确处理。这有助于使Rust代码更可靠和可预测。

使用std::io;使用std::num::ParseIntError;fn read_number() -> 结果<i32, ParseIntError> {    let mut input = String::new();io::stdin().read_line(&mut input)?;    让编号:i32 = input.trim().parse()?;    好的(数字)}fn main() {    匹配 read_number() {        Ok(num) => println!("您输入了:{}",num),        Err(err) => println!("错误:{}",错误),}}

开始使用Rust

让我们用Rust写一个Hello World程序吧

1.安装Rust

如果您还没有,请按照Rust官方网站上的说明安装Rust:https://www.rust-lang.org/tools/install

如果您使用macOS或Linux,您可以通过在终端中运行以下命令来安装Rust:

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

编写代码

  1. 创建一个文件:打开文本编辑器或代码编辑器,并创建一个名为hello.rs的新文件(Rust文件使用.rs扩展名)。
  2. 编写代码:将以下代码粘贴到您的hello.rs文件中:
fn main() {    println!("你好,世界!”);}
  • fn main():这定义了main函数,这是您的Rust程序的入口点。
  • println!:这是一个宏(不是常规函数),可以将文本打印到控制台。

编译和运行

  1. 打开终端或命令提示符:导航到您保存hello.rs文件的目录。

2.编译:键入以下命令来编译您的Rust代码:

rustc hello.rs

3.运行:通过键入运行可执行文件:

./你好

(在Windows上,使用.\hello.exe

你应该看到“你好,世界!”打印到您的控制台!

恭喜!您已经成功编写并执行了第一个Rust程序。

学习材料:

如果您对学习Rust感兴趣,有几个资源可以帮助您入门:

在线资源(免费):

  • 锈书:你学习基础知识的最好的朋友(网络—https://doc.rust-lang.org/book/
  • 欢迎来到Rust-101:https://www.ralfj.de/projects/rust-101/main.html
  • Rust Playground:在网页浏览器(https://play.rust-lang.org/)中编写和测试Rust代码。
  • Rust by Example集合:这是麻省理工学院的示例集合,演示了如何使用Rust执行各种任务。
  • 学习Rust编程课程——Replit上的交互式Rust语言教程——https://www.freecodecamp.org/news/rust-in-replit/

平装书:

  • Steve Klabnik和Carol Nichols的Rust编程语言
  • 蒂姆·麦克纳马拉的《Rust in Action》
  • 零生产在生锈中:Luca Palmieri的后端开发简介
  • 编程生锈:Jim Blandy的快速、安全的系统开发
  • 锈原子和锁:Mara Bos在实践中的低电平并发
  • 命令行Rust:Ken Youens-Clark编写Rust CLI的基于项目的入门