胖胖的枫叶
主页
博客
知识图谱
产品设计
数据分析
企业架构
项目管理
效率工具
全栈开发
后端
前端
测试
运维
数据
面试
  • openJdk-docs
  • spring-projects-docs
  • mysql-docs
  • redis-commands
  • redis-projects
  • apache-rocketmq
  • docker-docs
  • mybatis-docs
  • netty-docs
  • journaldev
  • geeksforgeeks
  • 浮生若梦
  • 后端进阶
  • 并发编程网
  • 英语肌肉记忆锻炼软件
  • 墨菲安全
  • Redisson-docs
  • jmh-Visual
  • 美团技术
  • MavenSearch
主页
博客
知识图谱
产品设计
数据分析
企业架构
项目管理
效率工具
全栈开发
后端
前端
测试
运维
数据
面试
  • openJdk-docs
  • spring-projects-docs
  • mysql-docs
  • redis-commands
  • redis-projects
  • apache-rocketmq
  • docker-docs
  • mybatis-docs
  • netty-docs
  • journaldev
  • geeksforgeeks
  • 浮生若梦
  • 后端进阶
  • 并发编程网
  • 英语肌肉记忆锻炼软件
  • 墨菲安全
  • Redisson-docs
  • jmh-Visual
  • 美团技术
  • MavenSearch
  • 博客

    • 博客迁移说明
    • 2024年
    • 2023年
    • 2022年
    • 2021年
    • 2020年
    • 2019年
    • 2018年

学习下Rust

为什么学习Rust

在知乎上看到一个人对Rust的评论。

首先,Rust 是有点反人类,否则不会一直都不火。然后,Rust 之所以反人类,是因为人类这玩意既愚蠢,又自大,破事还贼多。 你看 C++ 就很相信人类,它要求人类自己把自己 new 出来的东西给 delete 掉。 C++:“这点小事我相信你可以的!” 人类:“没问题!包在我身上!” 然后呢,内存泄漏、double free、野指针满世界飘…… C++:“……”

Java 选择不相信人类,但替人类把事办好。 Java:“别动,让我来,我有gc!” 人类:“你怎么做事这么慢呀?你怎么还 stop the world 了呀?你是不是不爱我了呀?” Java:“……”

Rust 发现唯一的办法就是既不相信人类,也不惯着人类。 Rust:“按老子说的做,不做就不编译!” 人类:“你反人类!” Rust:“滚!”

  • C/C++ 完全相信而且惯着程序员,让大家自行管理内存,所以可以编写很自由的代码,但一个不小心就会造成内存泄漏等问题导致程序崩溃。
  • Java/Golang 完全不相信程序员,但也惯着程序员。所有的内存生命周期都由 JVM 运行时统一管理。 在绝大部分场景下,你可以非常自由的写代码,而且不用关心内存到底是什么情况。 内存使用有问题的时候,我们可以通过 JVM 来信息相关的分析诊断和调整。
  • Rust 语言选择既不相信程序员,也不惯着程序员。 让你在写代码的时候,必须清楚明白的用 Rust 的规则管理好你的变量,好让机器能明白高效地分析和管理内存。 但是这样会导致代码不利于人的理解,写代码很不自由,学习成本也很高。

安装Rust开发环境

安装Rust

Rust在Mac系统上非常的友好

curl https://sh.rustup.rs -sSf | sh
  • 脚本会检测你的操作系统,然后提示你是否安装

  • 默认选择1就好了

  • 这样就安装好了
source $HOME/.cargo/env
# 设置下Rust的环境变量
rustc --version 
# 如果正常显示版本说明安装成功了

创建测试项目

mkdir learning
cd learning
cargo new learning-01
cd learning-01
cargo run

Hello, world!
# 如果变成成功并输出消息则表示测试项目通过了。

Rust

Rust 是一个系统级编程语言,被 Mozilla 员工 "Graydon Hoare" 于 2006 年 开发。他形容 Rust 是一种线程安全的支持并发的实用型的编程语言,支持函数式编程与命令式编程。

Cargo

Cargo是Rust的构建系统和包管理工具,和Java中maven类似的功能。

// 查看版本
cargo --version 
  • 创建一个项目
cargo new new_project
cd new _project
➜  new_project git:(master) ✗ tree 
.
├── Cargo.toml
└── src
    └── main.rs

1 directory, 2 files
  • 这里的Cargo.toml就是配置文件 TOML (Tom's Obvious, Minimal Language) 格式,这是 Cargo 配置文件的格式。
[package]
name = "new_project"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
  • 构建并运行
cargo build
➜  new_project git:(master) ✗ cargo build
   Compiling new_project v0.1.0 (/Users/z201/word/rust/learning-rust/new_project)
    Building [                             ] 0/1: new_project(bin)                                                                                                                                                                
    Finished dev [unoptimized + debuginfo] target(s) in 11.12s
    
➜  new_project git:(master) ✗ ./target/debug/new_project 
Hello, world!
  • 也可以直接编译加运行
cargo run
  • 快速检查是否可以编译
cargo check

使用VS Code作为开发工具

这里主要安装一些社区推荐的插件

  1. rust-analyzer:它会实时编译和分析你的 Rust 代码,提示代码中的错误,并对类型进行标注。你也可以使用官方的 rust 插件取代。
  2. rust syntax:为代码提供语法高亮。
  3. crates:帮助你分析当前项目的依赖是否是最新的版本。
  4. better toml:Rust 使用 toml 做项目的配置管理。可以帮你语法高亮,并展示 toml 文件中的错误。
  5. rust test lens:可以帮你快速运行某个 Rust 测试。
  6. Tabnine:基于 AI 的自动补全,可以帮助你更快地撰写代码。

使用国内的Rust镜像

# 切换到cargo
cd ~/.cargo/.
# 创建一个config文件
➜  .cargo touch config
➜  .cargo vim config 
➜  .cargo chmod u+x config 
  • 往config写入内容
[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"
# 根据情况来切换
replace-with = 'ustc'
# 清华大学
[source.tuna]
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"

# 中国科学技术大学
[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"

# 上海交通大学
[source.sjtu]
registry = "https://mirrors.sjtug.sjtu.edu.cn/git/crates.io-index"

# rustcc社区
[source.rustcc]
registry = "git://crates.rustcc.cn/crates.io-index"

# 字节跳动
[source.rsproxy]
registry = "https://rsproxy.cn/crates.io-index"
Last Updated:
Contributors: 庆峰