Rust学习笔记 | 01 - Rust快速入门(为什么是Rust开发环境搭建Cargo的使用HelloWorldRust依赖包crates)
Posted Mculover666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rust学习笔记 | 01 - Rust快速入门(为什么是Rust开发环境搭建Cargo的使用HelloWorldRust依赖包crates)相关的知识,希望对你有一定的参考价值。
系列文章目录
一、允许我先扯一扯
在解释原因之前,先允许博主来介绍一下自己目前所掌握的编程语言。
C++是我接触的第一门编程语言,刚上大学那会上课所学,后来因为没有从事相关工作,现在还依稀记得一点基础知识,比如C++中的namespace,类和对象中的构造函数与析构函数、访问控制、重载,别的忘的一干二净了。
C是我接触的第二门编程语言,是因为自己喜欢玩嵌入式所以自学的,当初跟着郝斌老师的教程学的非常开心,第一次知道了程序运行的基本原理、变量的本质、指针的本质,后来学会了结构体、共用体、枚举这些复合数据类型,用指针+复合数据类型也能玩一些比较骚的操作,比如结构体无差异化遍历,函数指针实现抽象层使得设计与实现分离等。
C的灵魂在于指针,指针给了我们很大的编程自由,想指哪指哪,在这样极其自由的环境下,也造成编写的程序经常会存在一些玄学bug,这几年玩嵌入式也写了不少的C语言代码,如果出现玄学问题,那么可能的情况只有两种:指针的问题、malloc来的内存没有free掉造成内存泄漏。
Java是我接触的第三门编程语言,因为这是当时学校的一门课,当时C语言已经掌握了不错的基础知识,所以学Java的时候学的很舒服。一是Java语法比较常规,从C过渡到Java很容易(在学习理解层面没有太大差异);二是Java具备非常高的安全性,函数中的成员变量如果不赋初始值,编译器会直接报错,所以更别想写什么骚操作了,老老实实的按照Java语法写代码,这也就使得Java程序一旦编译通过,几乎不会在运行时崩溃掉;三是因为Java的可以使用package封装类,所以别人封起来的类库可以拿来调用玩,并且Java自身就提供了一些好玩的库,比如网络通信、界面库,所以学Java在很大程度上是学这些类库怎么使用。
Java的优势在于安全、常规、可以用包共享类库、编译器检查严格,所以Java的代码写起来是最舒服的,但是Java程序是跑在JVM之上的,所以去掉了指针,不给程序员直接访问内存空间的机会,这也导致了Java不会应用在嵌入式领域开发中直接应用。在动态内存管理方面,JVM提供了内存回收机制,虽然避免了内存泄漏问题,但也加大了Java程序运行的开销。
C#是我接触的第四门编程语言,是因为在嵌入式开发中需要编写一些上位机软件,比如串口助手之类的小工具,所以自学了这门语言。C#和Java非常类似,再配上VS这样强大的IDE,只要你有面向思想的思想,直接撸代码就OK,谁编程还不是靠自动提示呢~
Python是我接触的第五门编程语言,当时python正火,所以选了学校开设的一门公选课来学习。它的特性就是相比起C和Java,语法非常简洁,不用声明变量数据类型,内部提供了非常多的方法供你调用,外部有更多的python包供你调用,一些常规功能根本不用自己去动脑实现,先导入包,然后调用包里的方法,搞定。
Python的优势在于编写的代码简洁,但是Python是解释型语言,一方面导致执行慢且性能低,另一方面导致错误代码在运行时才会出错。目前在嵌入式开发中有MicroPython,供用户去使用python编写简单的代码,但我觉得都这东西没有什么意义,玩玩还行,做项目或者做产品,还是打扰了。
二、为什么是Rust?
如果你同样了解C/C++,推荐看这个视频:好玩儿的Rust语言。
当我第一次了解到Rust的优势时,就深深的被它吸引了。
Rust的设计没有去除指针,可以直接访问内存地址,所以可以应用到嵌入式开发中。
Rust的所有权设计使的程序在编译阶段进行严格的代码审查,不会造成内存泄漏(内存安全)。
Rust的设计将所有安全相关的开销放在了编译阶段,不会影响程序执行的效率,这也正是Rust所吸引我这个嵌入式老玩家的魅力所在。
Rust拥有cargo这样非常好用的构建系统和包管理系统,可以非常方便的使用其他开发者贡献的包。
三、搭建Rust开发环境
参考官方教程:Install Rust。
Windows环境
1. 下载安装工具rustup
Rust开发环境由工具rustup安装和管理,在官网下载该工具。
下载之后运行开始安装。
2. Rust安装需求
Rust需要VS中Microsoft C++ build工具的支持,VS2013版本或者更新的版本都可以:
① 确保安装了VS2013或者之后版本;
② 确保安装了C++工具链:
3. Rust安装
选择继续安装:
安装完成:
4. 检查环境变量是否正常
Rust开发环境会将所有工具都安装在用户目录/.cargo/bin
目录中,包括rustc、cargo、rustup在内的rust工具链。
安装过程中rustup工具会将该路径自动添加到环境变量中,可以在命令行中运行该命令查看版本,如图:
rustc --version
如果不能查看,则需要手动添加该路径到环境变量中。
5. 升级rust开发环境
rustup update
6. 卸载rust开发环境
rustup self uninstall
Linux环境
使用下面这行命令安装即可:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
因为rust安装过程中修改了环境变量,所以需要使环境变量生效:
source ~/.cargo/env
检查是否可以查看版本:
四、Cargo的使用
cargo是Rust的构建工具和包管理器,常用的cargo命令如下。
1. 查看cargo版本
通过查看版本可以检查cargo是否可以正常使用:
cargo --version
2. 构建项目
cargo build
3. 运行项目
cargo run
4. 测试项目
cargo test
5. 为项目构建文档
cargo doc
6. 发布库
将库发布到crates.io:
cargo publish
五、HelloWorld
接下来所有操作都在powershell命令行中完成。
1. 使用cargo创建新项目
使用cargo创建hello-rust项目:
cargo new hello-rust
这会生成一个名为hello-rust
的新项目,其中包含以下文件:
hello-rust
|- .git
|- .gitignore
|- Cargo.toml
|- src
|- main.rs
.git
:git存储仓库.gitignore
:git忽略文件Cargo.toml
:Rust的清单文件,包含了项目的元数据和依赖库src/main.rs
:Rust源码文件
2. Rust源码
Rust源码为.rs
格式,main.rs内容如下:
3. 编译工程
进入刚刚生成的rust工程,然后执行cargo编译命令:
cd .\\hello-rust
cargo build
4. 运行工程
若没有编译,该命令在运行前也会先进行编译。
cargo run
5. rustc和cargo的关系
这里需要注意,cargo是rust的构建工具和包管理工具,而rustc才是rust的编译器。
同样在C语言中,gcc是编译器,而make是在gcc之上的构建工具。
这里我们当然可以直接用rustc来编译,直接在main.rs文件所在位置打开编译器,使用rustc编译:
rustc .\\main.rs
六、Rust依赖包crates
1. 什么是crates
Rust中的包称为crates,可以在Rust包的仓库中找到所有类别的库: crates.io。
2. 如何安装crates包及其依赖
接下来通过 ferris-says 库学习如何安装crates包。
首先在crates.io上找到该包的说明,有非常详细的使用说明。
添加该包到项目的Cargo.toml
文件中:
运行编译命令,Cargo会自动安装该包及其依赖包:
cargo build
安装之后,Cargo会创建一个新文件 Cargo.lock,该文件记录了本地所用依赖库的精确版本。
3. 如何使用crates包
导入依赖包:
extern crate ferris_says;
使用依赖包的say函数:
use ferris_says::say;
使用示例:
extern crate ferris_says;
use ferris_says::say;
use std::io::{ stdout, BufWriter };
fn main() {
let out = b"Hello fellow Rustaceans!";
let width = 24;
let mut writer = BufWriter::new(stdout());
say(out, width, &mut writer).unwrap();
}
运行该项目:
cargo run
Ferris 是 Rust 社区的非官方吉祥物,很多 Rust 程序员自称“Rustaceans”:
七、使用VScode开发Rust
VScode只需要安装rust扩展即可愉快的进行Rust开发了:
当我们再次使用VScode打开之前的HelloWorld项目时,VScode Rust扩展会自动启动,并安装一些额外的组件。
安装完成后,就可以在VScode中愉快的编写Rust代码啦!
以上是关于Rust学习笔记 | 01 - Rust快速入门(为什么是Rust开发环境搭建Cargo的使用HelloWorldRust依赖包crates)的主要内容,如果未能解决你的问题,请参考以下文章