rust:cargo 和rustc 以及一点 小技巧

在正式学习 Rust 语言以前,我们需要先学会怎样输出一段文字到命令行,这几乎是学习每一门语言之前必备的技能,因为输出到命令行几乎是语言学习阶段程序表达结果的唯一方式。

在之前的 Hello, World 程序中大概已经告诉了大家输出字符串的方式,但并不全面,大家可能很疑惑为什么 println!( “Hello World”) 中的 println 后面还有一个 ! 符号,难道 Rust 函数之后都要加一个感叹号?显然并不是这样。println 不是一个函数,而是一个宏规则。这里不需要更深刻的挖掘宏规则是什么,后面的章节中会专门介绍,并不影响接下来的一段学习。

Rust 输出文字的方式主要有两种:println!() 和 print!()。这两个"函数"都是向命令行输出字符串的方法,区别仅在于前者会在输出的最后附加输出一个换行符。当用这两个"函数"输出信息的时候,第一个参数是格式字符串,后面是一串可变参数,对应着格式字符串中的"占位符",这一点与 C 语言中的 printf 函数很相似。但是,Rust 中格式字符串中的占位符不是 “% + 字母” 的形式,而是一对 {}

实例:runoob.rs 文件

fn main() {

    let name  = String::from("Zry") ;

    println!("Hello, {}’s world!",name);

}

使用 rustc 命令编译 runoob.rs 文件:

$ rustc runoob.rs # 编译 runoob.rs 文件

编译后会生成 runoob 可执行文件:

$ ./runoob # 执行 runoob

以上程序的输出结果是:

Hello, Zry’s world!

如果我想把 zry 输出两遍,那岂不是要写成:

println!("Hello{}, {}’s world!",name,name);

其实有更好的写法:

println!("Hello{0}, {0}’s world!",name);

在 {} 之间可以放一个数字,它将把之后的可变参数当作一个数组来访问,下标从 0 开始。
rust:cargo 和rustc 以及一点 小技巧_第1张图片

如果要输出 {} 怎么办呢?格式字符串中通过 {{}} 分别转义代表 { 和 }。但是其他常用转义字符与 C 语言里的转义字符一样,都是反斜杠开头的形式。

fn main() { 
    println!("{{}}"); 
} 

以上程序的输出结果是:

{}

自己的实操

首先使用 cargo 构建:

rust:cargo 和rustc 以及一点 小技巧_第2张图片

接下来使用 rustc 构建

rust:cargo 和rustc 以及一点 小技巧_第3张图片

思考内容

cargo 和rustc 的区别

cargo和rustc都是Rust编程语言的工具,但是它们的功能不同。

rustc是Rust编译器,用于将Rust源代码编译成可执行文件或库。它可以直接使用命令行来编译和运行Rust程序,也可以与其他构建工具(如Cargo)一起使用。

Cargo是Rust的构建系统和包管理器,它可以自动化构建、测试和发布Rust程序。它可以管理项目依赖关系、自动生成构建脚本、自动下载和编译依赖项等。使用Cargo可以更加方便地管理和构建Rust项目,特别是对于大型项目来说,使用Cargo可以大大简化构建过程。

因此,rustc主要用于编译Rust程序,而Cargo则用于管理和构建Rust项目。

结合实际再次深化区分

更详细的说明如下:

rustc是Rust编译器,它可以将Rust源代码编译成可执行文件或库。使用rustc可以直接在命令行中编译和运行Rust程序,例如:

rustc main.rs
./main

这里的main.rs是Rust源代码文件,使用rustc命令将其编译成可执行文件main,然后使用./main命令来运行该程序。

Cargo是Rust的构建系统和包管理器,它可以自动化构建、测试和发布Rust程序。使用Cargo可以更加方便地管理和构建Rust项目,例如:

cargo new my_project
cd my_project
cargo build
cargo run

这里的my_project是项目名称,使用cargo new命令创建一个新的Rust项目,然后使用cd命令进入该项目目录,使用cargo build命令编译项目,使用cargo run命令运行项目。

因此,rustc主要用于编译Rust程序,而Cargo则用于管理和构建Rust项目。

示例代码如下:

使用rustc编译和运行Rust程序:

// main.rs
fn main() {
    println!("Hello, world!");
}

使用rustc命令编译该程序:

rustc main.rs

使用./main命令运行该程序:

./main

使用Cargo创建和构建Rust项目:

cargo new my_project
cd my_project

编辑src/main.rs文件,添加以下代码:

fn main() {
    println!("Hello, world!");
}

使用cargo build命令编译项目:

cargo build

使用cargo run命令运行项目:

cargo run

总结:

cargo 以下称之为前者,rustc 以下称之为后者。
前者的实际是一个从工程化的角度提供支撑,类似于一个没有界面的Pycharm。
后者是一个最基础的编译器,类似于clang和gcc 。

从实际使用的展示中也可以体会到,cargo 可以通过 new 命令来创建一个完整的代码工程空间,你不单得到了一个主程序,还有与之相关的编译生成配置文件,测试路径,调试路径,以及其他相关的工程化内容。

而使用rustc 你只能对一个现有的代码文件操作,生成一个执行程序。

所以,在做一些小测试的时候,为了方便(我是指,测完就删的这种方便)。可以使用rustc 这样不必拘泥于项目构建等待那么久的时间。

但是如果你想做点小工程的话,还是cargo 更适合你。

你可能感兴趣的:(rust,开发语言,后端)