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.tomlRust的清单文件,包含了项目的元数据和依赖库
  • src/main.rsRust源码文件

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)的主要内容,如果未能解决你的问题,请参考以下文章

[易学易懂系列|rustlang语言|零基础|快速入门|(29)|实战6:BDD工具cucumber_rust]

Rust开发快速入门

Rust开发快速入门

Rust开发快速入门

the rust book 的简单入门笔记

用欧拉计划学Rust语言(第17~21题)