在网络安全的学习中越来越发现没有编程基础寸步难行,同时我也想要学习相关的程序开发,因为Rust功能强大,并且是系统语言,或许算比较适合我的语言?(但愿吧)
后记:家人们,不要学习Rust,这是我第
二三四五六次入门Rust
我主要是从以下的文章中学习Rust,但是发现每个教程都有不太面向初学者的部分,因此我做一下梳理,也方便我后面查缺补漏。
Rust输出
我们将以菜鸟教程上的顺序来进行。
第一步,经典的Hello,world
Hello,World!
创建项目目录
这一步是每个Rust程序的开端,每一个伟大的项目都起源于此。
我们使用cargo来创建一个名为Hello_World的项目:
cargo new Hello_World
然后我们需要进入到我们新创建的Hello_World目录下,这将是我们经常用到的,
cd Hello_World
有时候发现程序无法编译?先看看是否进入了正确的项目目录下。
我们来看看这个项目的项目结构:
|
|
其中,Cargo.toml 是 cargo 特有的项目数据描述文件。它存储了项目的所有元配置信息,如果 Rust 开发者希望 Rust 项目能够按照期望的方式进行构建、测试和运行,那么,必须按照合理的方式构建 Cargo.toml 。我们可以理解为这里存储了这个项目中所有我们需要的依赖库,我们在这里告诉程序我们要导入哪些库。
_Cargo.toml_一般是这个样子:
|
|
main函数
接下来我们来看看 main.rs ,此文件是当前 Rust 工程的入口文件,每一个新建的Rust项目都会有这个文件。
我们来看看这个文件:
|
|
这几行定义了一个名叫 main 的函数。main 函数是一个特殊的函数:在可执行的 Rust 程序中,它总是最先运行的代码。第一行代码声明了一个叫做 main 的函数,它没有参数也没有返回值。如果有参数的话,它们的名称应该出现在小括号 () 中。
函数体被包裹在 {} 中。Rust 要求所有函数体都要用花括号包裹起来。一般来说,将左花括号与函数声明置于同一行并以空格分隔,是良好的代码风格。
很简单吧,fn 是定义函数,main是函数名,被{}包裹起来的是函数体。
在函数体中,我们看到使用println!("Hello World!");输出了 Hello World!
这里有几个点需要注意一下,在Rust中 println! 调用了一个 Rust 宏(macro)。如果是调用函数,则应输入 println(没有!) 关于宏,我们后面再说,现在你只需记住,当看到符号 ! 的时候,就意味着调用的是宏而不是普通函数,并且宏并不总是遵循与函数相同的规则。
另外,这个语句以;结尾,Rust中的大多数语句都以 ; 结尾,但 ; 并不是简单的行与行之间的分割符,而是标致着一个语句的结束。在语句未结束时使用 ; 是错误的。
例如:
|
|
这里会返回一个 i32 的值,但如果加了 ; 它会返回()
这里简单的提一嘴,并不是我们现在要讨论的核心,但这个小知识点还是要记住的。
现在我们让它跑起来:
在终端中,我们输入:
cargo run
就会得到Hello World!
编译与运行
通过上面那个例子,我们不难发现Rust的编译和运行是分开的,我们可以直接让它快速执行编译,也可以先编译然后再运行,不过总之都是要编译的,这也是系统语言和脚本语言的一大不同点。
我们使用:
cargo build
来编译我们我们的程序
然后使用:
cargo run
来让项目跑起来。
Cargo 还提供了一个名为 cargo check 的命令。该命令快速检查代码确保其可以编译,但并不产生可执行文件:
cargo check
cargo check 是我们在代码开发过程中最常用的命令,它的作用很简单:快速的检查一下代码能否编译通过。因此该命令速度会非常快,能节省大量的编译时间。
BTW, 以上的编译和运行都是在debug模式下进行的,在这种模式下,代码的编译速度会非常快,可是福兮祸所伏,运行速度就慢了. 原因是,在 debug 模式下,Rust 编译器不会做任何的优化,只为了尽快的编译完成,让你的开发流程更加顺畅。
如果想要高性能的代码,我们可以在命令后面加上 --release :
cargo run –release cargo build –release
[!NOTE]
rust自身是使用rustc进行编译的, rustc,rustup和cargo之间的关系可以理解为rustc是编译器,rustup是更新器,cargo是包管理器
Rust 基础语法
变量,基本类型,函数,注释和控制流,这些几乎是每种编程语言都具有的编程概念。
这些基础概念将存在于每个 Rust 程序中,及早学习它们将使你以最快的速度学习 Rust 的使用。
变量
首先必须说明,Rust 是强类型语言,但具有自动判断变量类型的能力。这很容易让人与弱类型语言产生混淆。
默认情况下,Rust 中的变量是不可变的,除非使用 mut 关键字声明为可变变量。
|
|
如果要声明变量,需要使用 let 关键字。例如:
|
|