首页 > 其他分享 >探索 Rust:从 ‘Hello, World!’ 到 Cargo 工程

探索 Rust:从 ‘Hello, World!’ 到 Cargo 工程

时间:2023-09-03 22:06:27浏览次数:40  
标签:cargo Cargo 项目 编译 World main Hello Rust

假设你已经成功安装了 Rust,那么现在我们来开始你的 Rust 编程之旅的第一步,从一个传统的 "Hello, World!" 示例开始正式的 Rust 学习。

首先,我们需要创建一个目录,来整体存放我们的示例代码。我这边的工作目录就是 ~/lanyulei/project/rust ,你可以根据你自己的需求创建对应的目录,来存储你练习的代码文件。

rustc

rustc 是 Rust 编程语言的官方编译器,它负责将你编写的 Rust 代码转换成可执行的计算机程序。

它是你将 Rust 代码转化为计算机能够理解和运行的机器码的关键工具,是你与计算机交流的翻译器,确保你的 Rust 代码能够在各种操作系统上正确运行。

编写 Rust 程序

demo1/main.rs 中写入如下内容。

fn main() {
    println!("Hello, world!"); // 用于输出文本到控制台
}
  1. fn main() { ... }: 这是 Rust 程序的入口点,也就是程序的主函数。在 Rust 中,每个可执行程序都必须有一个名为 main 的函数,它是程序的起点。fn 是 Rust 中定义函数的关键字,main 是函数的名称,() 中的括号表示函数参数,这里的 main 函数没有参数。
  2. { ... }: 这是一对大括号,用于定义一个代码块(block)。在 Rust 中,大括号用来包含一组语句,这些语句在程序执行时按顺序执行。在这个示例中,大括号包含了程序的主体部分。
  3. println!("Hello, World!");: 这是一个 println! 宏的调用。println! 宏用于在控制台输出文本,其中 ! 表示这是一个宏而不是常规函数。括号 () 中包含了要输出的文本消息,这里是 "Hello, World!"。

编译执行

执行一下命令编译并验证编译结果。

➜ rustc main.rs
➜ ./main
Hello, world!

假如一切顺利,那么恭喜你!你已经完成了第一个 Rust 程序。

Cargo

前面介绍了如何使用 rustc 来编译我们写的程序,但在 Rust 开发中,通常不直接使用 rustc 命令来编译和构建项目,因为 Rust 社区提供了更高级、更便捷的构建工具,主要是 Cargo

Cargo 是 Rust 的官方包管理工具,它不仅简化了依赖管理、构建和发布过程,还提供了项目的结构和约定,使得项目更具一致性和可维护性。

Cargo 还能够自动下载和管理依赖库,确保版本兼容性,并通过一个简单的命令集成了构建、测试、文档生成等多个工程化任务,从而提高了开发效率,减少了潜在的错误。它还支持 Rust 的工程目录结构,使得代码组织更加清晰。因此,使用 Cargo 能够让 Rust 开发更加流畅、高效和可靠。而 rustc 通常用于更底层的编译任务或特殊需求。

接下来我们使用 Cargo 来演示下 "Hello, world!" 这个示例。

创建 Rust 项目

在你的工作目录,执行 cargo new hello_world 来创建一个新的 Rust 项目:

➜ cargo new hello_world
     Created binary (application) `hello_world` package

这将创建一个名为 hello_world 的新目录,其中包含了一个基本的 Rust 项目结构。

.
├── Cargo.toml
└── src
    └── main.rs
  1. Cargo.toml:这是 Rust 项目的配置文件,其中包含项目的元数据信息、依赖项列表以及其他配置选项。你可以将项目的名称、作者、版本号等信息以及需要的 Rust 依赖项列在这个文件中。
  2. src 目录:这是包含项目源代码的目录。通常,Rust 项目的源代码文件都位于这个目录中。
  • main.rs:这是 Rust 项目的主入口文件。在一个 Rust 程序中,通常会有一个 main 函数,它是程序的起点。你的程序的执行将从这个文件开始。

简单了解下 Cargo.toml 初始内容有哪些。

[package]
name = "hello_world"
version = "0.1.0"
edition = "2021"

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

[dependencies]
  1. [package]:这个部分包含了有关 Rust 项目的元数据信息。
  • name:项目的名称。在这个示例中,项目的名称是 "hello_world"。
  • version:项目的版本号。在这个示例中,版本号是 "0.1.0"。
  • edition:Rust 的版本号。在这个示例中,使用了 Rust 2021 Edition。
  1. [dependencies]:这个部分用于列出项目的依赖项。在这个示例中,没有列出任何依赖项,因此该部分是空的。你可以在这里添加项目所需的外部库和依赖项,以便 Cargo 可以自动管理它们的下载和安装。

编写代码

编辑这个项目中 src/main.rs 文件,将以下代码添加到 main.rs 中:

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

当你创建一个新的 Rust 项目时,src/main.rs 文件默认包含一个示例代码,用于在程序运行时打印 "Hello, world!" 到屏幕上。这是一个入门级的示例,目的是让你熟悉如何创建和运行 Rust 项目。

为了让这个示例变得有趣和个性化,你可以将代码中的 "Hello, world!" 部分改成你喜欢的任何内容,比如我这里修改成了 "Hello, lanyulei!"。这样,你就可以在运行你的程序时看到你自己定制的消息。

这个修改示例代码的过程旨在让你动手练习,同时也为了让你感觉到你可以自由地在项目中实现你自己的想法和逻辑。

运行程序

现在,你可以运行你的 "Hello, world!" 程序了。在终端中执行 cargo run

➜ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s
     Running `target/debug/hello_world`
Hello, world!

cargo run 是 Rust 项目中一个非常常用的命令,用于构建和运行你的 Rust 程序。执行 cargo run 会触发以下操作:

  1. 编译项目:执行与 cargo build 相同的编译步骤,将代码编译成可执行文件或者库文件,参见下面的《编译项目》。
  2. 运行可执行文件:立即运行刚刚编译的可执行文件。这意味着你可以一次性使用 cargo run 编译并运行你的项目,而不需要分开执行 cargo build./target/debug/your_project(或 ./target/release/your_project)。默认情况下,cargo run 会运行 debug 版本的可执行文件,但你也可以使用 --release 选项来运行 release 版本。

编译项目

若是你仅想要构建你的项目,不想要立即执行的话,那么可以在终端中执行 cargo build

➜ cargo build
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s

cargo build 是 Rust 项目中的一个常用命令,用于构建(编译)项目的源代码。执行这个命令将触发以下一系列操作:

  1. 编译源代码:Cargo 会编译整个 Rust 项目,包括源代码文件(通常位于 src 目录中)和所有的依赖项。编译后的输出会存储在项目目录下的 target 文件夹中。
  2. 解析和下载依赖项:如果项目的 Cargo.toml 文件中包含了依赖项的声明(在 [dependencies] 部分),Cargo 会解析这些依赖项,并下载或编译它们。这确保了项目的依赖项也会被构建和链接到最终的可执行文件中。
  3. 生成可执行文件或库:如果项目中有 main 函数,Cargo 会生成一个可执行文件,通常位于 target/debug/ 目录中。如果项目是一个库(crate),Cargo 将生成库文件,通常位于 target/debug/lib<crate_name>.so(或 .dll.dylib,具体取决于平台)。
  4. 构建输出信息:Cargo 会将构建过程的输出信息显示在终端上,包括编译进度、警告和错误信息。这有助于你了解编译过程中是否出现了问题。

需要注意的是,默认情况下,cargo build 会生成一个开发版本的可执行文件或库。如果你希望生成发布版本,可以使用 --release 选项,如 cargo build --release。发布版本通常会进行优化,以提高性能,但构建时间可能会更长。

清理项目

如果你想删除构建的临时文件和可执行文件,可以运行 cargo clean

它将会删除 target/ 目录。

至此,你已经成功通过使用 Cargo 创建和运行了你的 Rust 程序,你可以轻松管理项目的依赖、构建、运行和清理,使 Rust 开发变得更加便捷。

结束语

恭喜你成功迈出了 Rust 编程的第一步!通过使用 Cargo,你已经学会了如何创建一个新的 Rust 项目、编写代码、构建项目以及运行你的程序。这是你踏上 Rust 编程之旅的第一个关键步骤,同时也为你提供了一个高效、可管理的开发环境。

不论你是刚踏入编程世界的初学者,还是已经积累了丰富经验的开发者,让我们共同期待在 Rust 中发现令人兴奋且富有益处的项目。愿你不断探索,并从中汲取编程的乐趣!

标签:cargo,Cargo,项目,编译,World,main,Hello,Rust
From: https://blog.51cto.com/u_11293981/7343484

相关文章

  • AtCoder Beginner Contest 201 D - Game in Momotetsu World
    D-GameinMomotetsuWorld原题链接题意有一个H×W的方格,每个方格里写着'+'或'-'有一个初始在(1,1),(也就是左上角)的棋子,Takahashi和Aoki轮流向右或向下移动(Takahashi先手)。移动到写着'+'的方格上后,进行该步移动的玩家分数+1。否则该玩家分数−1,走到右下......
  • 解决VR中UGUI world space UI会被其他物体遮挡的问题
    问题:在制作VR内容时,通常使用的都是UGUI,一般会将Canvas的rendermode设置为worldspace,但是这样设置过后,因为UI是直接放在了场景里面,很容易被其他物体挡住。解决方法:Unity官方的一个VR例子中给出了一个shader的解决方案。将如下的shader文件挂在材质上将这个材质赋予需要总......
  • 第二篇:程序员第一个代码Hello,World!
    第一个程序:Hello,World!新建一个文件夹,命名为code,用来存放代码。新建一个.java后缀的文件Hello.java用写代码软件打开Hello.java,编写代码如下:注意java必需分清大小写publicclassHello{ publicstaticvoidmain(String[]arge){ System.out.print("Hello,World!......
  • CF1862F Magic Will Save the World
    思路假设总共耗时是\(s\)秒,那么最多可以消灭的总生命值是\(s\times(w+f)\)。所以我们可以先求出所有怪物的生命值之和\(sum\),那么,至少需要时间\(t=\lfloor\frac{sum}{w+f}\rfloor\)。然后我们可以算出用这些时间最多可以用水魔法消灭的生命值为\(w\timest\)。那么,我......
  • Hello Cuda(三)——VSCODE&LibTorch
    CMAKEListscmake_minimum_required(VERSION3.0FATAL_ERROR)project(example)set(CMAKE_PREFIX_PATH/home/xuliangyu/libtorch)set(Torch_DIR/home/shiyanshi/libtorch/share/cmake/)#修改这里为自己的libtorchcmake路径,也可以用pytorch安装时编译的pkg里的cmakefind......
  • 编程真好玩Python_2.1你的第一个程序HelloWorld
    一、作业效果。(1)程序首先显示信息:“你好,世界!”(2)询问你的名字(3)输入后,屏幕显示“你好,×××!”二、完成(1)新建文件夹,保存-命名(2)运行代码print("Hello,World!")person=input("Whatisyourname?\n")print("Hello,",person)(3)在编辑窗口中,选择Run-RunModule,运行程序......
  • Hello Cuda(二)——向量加法
    #include<stdio.h>#include<stdlib.h>#include<cuda.h>#include<math.h>#include<cuda_runtime.h>#include<device_launch_parameters.h>typedeffloatFLOAT;doubleget_time();voidwarm_up();voidvec_add_host(FLOA......
  • Hello Cuda(一)——GPU设备检测
    #include"device_launch_parameters.h"#include<iostream>intmain(intargc,char*argv[]){intdeviceCount;//设备数目cudaGetDeviceCount(&deviceCount);for(inti=0;i<deviceCount;i++){cudaDeviceProp......
  • 1001:Hello,World!
    1001:Hello,World!时间限制:1000ms      内存限制:65536KB提交数:345055   通过数:168663【题目描述】编写一个能够输出“Hello,World!”的程序,这个程序常常作为一个初学者接触一门新的编程语言所写的第一个程序,也经常用来测试开发、编译环境是否能够正常......
  • Hello, SpringMVC
    springMVC的执行流程 具体流程(1)当用户通过浏览器发起一个HTTP请求,请求直接到前端控制器DispatcherServlet;(2)前端控制器接收到请求以后调用处理器映射器HandlerMapping,处理器映射器根据请求的URL找到具体的Handler,并将它返回给前端控制器;(3)前端控制器调用处理器适配器Handle......