【Rust开发】Rust快速入门,开发出Rust的第一个Hello World

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,Golang开发,Rust开发,云原生开发,PyQt5和Tkinter桌面开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生K8S,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:Rust语言通关之路
景天的主页:景天科技苑

在这里插入图片描述

文章目录

  • Rust开发入门
    • 1、rust简介
    • 2、安装rust
    • 3、第一个HelloWorld
      • 3.1 创建项目目录
      • 3.2 编写并运行 Rust 程序
      • 3.3 分析 Rust 程序
    • 4、cargo
      • 4.1 使用 Cargo 创建项目
      • 4.2 构建并运行 Cargo 项目
      • 4.3 发布(release)构建
      • 4.4 把 Cargo 当作习惯
    • 5、总结

Rust开发入门

1、rust简介

官网:https://www.rust-lang.org/
在这里插入图片描述

Rust于2015年发布第一个稳定版本
连续四年stackoverflow的最受欢迎的语言
特点:
高性能,媲美C/C++,可以做嵌入式开发
没有GC,同时也不需要手工管理内存(所有权机制)
没有野指针,当多个指针指向同一个对象,当通过其中一个指针见将对象删除时,剩余指向该对象的指针就成了野指针。就访问不到对象了,再访问就会报空指针错误
并发安全
集所有语言之大成者

2、安装rust

直接官网下载
Windows版的,直接下载exe文件,双击按提示安装
在这里插入图片描述

linux版本的,直接执行一条命令安装

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

这个命令下载一个脚本并开始 rustup 工具的安装,这会安装最新稳定版 Rust。过程中可能会提示你输入密码。如果安
装成功,将会出现如下内容:
Rust is installed now. Great!
在这里插入图片描述

当然,如果你不信任采用 curl URL | sh 来安装软件,请随意下载、检查和运行这个脚本。
此安装脚本自动将 Rust 加入系统 PATH 环境变量中,在下一次登陆时生效。如果你希望立刻就开始使用 Rust 而不重启
终端,在 shell 中运行如下命令手动将 Rust 加入系统 PATH 变量:

source $HOME/.cargo/env

检查是否安装成功

rustc --version

在这里插入图片描述

另外,你需要一个某种类型的连接器(linker)。可能他们已经安装了,不过当尝试编译 Rust 程序并得到表明连接器无
法执行的错误时,你需要自行安装一个。可以安装一个 C 编译器,因为它通常带有正确的连接器。查看对应平台的文档
了解如何安装 C 编译器。一些常见的 Rust 包会依赖 C 代码并因此也会需要 C 编译器,所以目前无论如何安装它都是值
得的。

卸载 Rust
在任何时候如果您想卸载 Rust,您可以运行 rustup self uninstall。

3、第一个HelloWorld

现在安装好了 Rust,让我们来编写第一个 Rust 程序。当学习一门新语言的时候,使用该语言在屏幕上打印 “Hello,world!” 是一项传统,这里我们将遵循这个传统!
创建项目目录
首先以创建一个存放 Rust 代码的目录开始。Rust 并不关心代码的位置,不过对于本书的练习和项目来说,我们建议你在
home 目录中创建一个 projects 目录,并将你的所有项目置于此处。

3.1 创建项目目录

打开终端并输入如下命令创建一个 projects 目录并在 projects 目录中为 “Hello, world!” 创建一个目录。
对于 Linux 和 macOS,输入:

cd ~
mkdir projects
cd ~/projects
mkdir hello_world
cd hello_world

3.2 编写并运行 Rust 程序

接下来,新建一个叫做 main.rs 的源文件。Rust 源代码总是以 .rs 后缀结尾。如果文件名包含多个单词,使用下划线分隔它们。
例如 my_program.rs,而不是 myprogram.rs。
现在打开刚创建的 main.rs 文件,输入如下代码。
文件名: main.rs

fn main(){println!("hello, world!")
}

保存文件,并回到终端窗口。在 Linux 或 macOS 上,输入如下命令编译并运行文件:
rustc main.rs
如果报一下错误,就需要安装gcc
在这里插入图片描述

yum install gcc -y

安装完成后编译,生成可执行文件
在这里插入图片描述

运行程序

[root@jingtian01 hello_world ]#./main

在这里插入图片描述

不管使用何种系统,字符串 Hello, world! 应该打印到终端。如果没有看到这些输出,回到 “故障排除” 部分查找寻求帮助的方式。
如果 Hello, world! 出现了,恭喜你!你已经正式编写了一个 Rust 程序。现在你成为了一名 Rust 程序员!欢迎!

3.3 分析 Rust 程序

现在,让我们回过头来仔细看看 “Hello, world!” 程序中到底发生了什么。这是拼图的第一片:

fn main() {
}

这几行定义了一个 Rust 函数。 main 函数是特殊的:它是每个可执行的 Rust 程序所首先执行的代码。
第一行代码声明了一个叫做 main 的函数,它没有参数也没有返回值。如果有参数的话,它们的名称应该出现在括号中,位于 ( 和 ) 之间。
还须注意函数体被包裹在花括号中, { 和 } 之间。Rust 要求所有函数体都要用花括号包裹起来(有些语言,当函数体只有一行时可以省略花括号,但在 Rust 中是不行的)。
一般来说,将左花括号与函数声明置于同一行并以空格分隔,是良好的代码风格。
如果你希望在 Rust 项目中保持一种标准风格, rustfmt 会将代码格式化为特定的风格。
rustfmt main.rs
在这里插入图片描述

在 main() 函数中是如下代码:
println!(“Hello, world!”);

这行代码完成这个简单程序的所有工作:在屏幕上打印文本。这里有四个重要的细节需要注意。
首先 Rust 使用 4 个空格的缩进风格,而不是 1 个制表符(tab)。
第二, println! 调用了一个 Rust 宏(macro)。如果是调用函数,则应输入 println (没有 ! )。你只需记住,当看到符号 ! 的时候,就意味着调用的是宏而不是普通函数。
第三, “Hello, world!” 是一个 字符串。我们把这个字符串作为一个参数传递给 println! ,字符串将被打印到屏幕上。
第四,该行以分号结尾( ; ),这代表一个表达式的结束和下一个表达式的开始。大部分 Rust 代码行以 ; 结尾。

4、cargo

仅仅使用 rustc 编译简单程序是没问题的,不过随着项目的增长,你可能需要控制你项目的方方面面,并且更容易地将
代码分享给其它人或项目。接下来,我们要介绍一个叫做 Cargo 的工具,它会帮助你编写真实世界中的 Rust 程序。

Cargo 是 Rust 的构建系统和包管理器。大部分 Rustacean 们使用 Cargo 来管理他们的 Rust 项目,因为它可以为你处理很多任务,比如构建代码、下载依赖库并编译这些库。(我们把代码所需要的库叫做 依赖(dependencies)。
最简单的 Rust 程序,比如我们刚刚编写的,并没有任何依赖。所以如果使用 Cargo 来构建 “Hello, world!” 项目,将只会
用到 Cargo 构建代码那部分的功能。随着编写的程序更加复杂,你会添加依赖,如果你一开始就使用 Cargo 的话,添加依赖将会变得简单许多。
由于绝大部分 Rust 项目使用 Cargo,接下来的部分将假设你也使用 Cargo。如果使用 “安装” 部分介绍的官方安装包
的话,则自带了 Cargo。如果通过其他方式安装的话,可以在终端输入如下命令检查是否安装了 Cargo:
cargo --version
在这里插入图片描述

4.1 使用 Cargo 创建项目

让我们使用 Cargo 来创建一个新项目,然后看看与上面的 hello_world 项目有什么不同。
回到 projects 目录(或者任何你放置代码的目录)。接着并在任何操作系统下运行:

cargo new hello_cargo --bin
cd hello_cargo

在这里插入图片描述

第一行命令新建了名为 hello_cargo 的二进制可执行程序。传递给 cargo new 的 --bin 参数生成一个可执行程序(通常就叫做 二进制文件,binary),而不是一个库。
项目的名称被定为 hello_cargo ,同时 Cargo 在一个同名目录中创建项目文件。
在这里插入图片描述

进入 hello_cargo 目录并列出文件。将会看到 Cargo 生成了两个文件和一个目录:一个 Cargo.toml 文件和一个 src 目
录,main.rs 文件位于 src 目录中。它也在 hello_cargo 目录初始化了一个 git 仓库,以及一个 .gitignore 文件。
在这里插入图片描述

请随意使用任何文本编辑器打开 Cargo.toml 文件。

[root@jingtian01 hello_cargo ]#cat Cargo.toml 
[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2024"[dependencies]

这个文件使用 TOML (Tom’s Obvious, Minimal Language) 格式,这是 Cargo 的配置文件的格式。
第一行, [package] ,是一个部分标题,表明下面的语句用来配置一个包。随着我们在这个文件增加更多的信息,还将增加其他部分。
接下来的三行设置了 Cargo 编译程序所需的配置:项目的名称、版本,它们告诉 Cargo 需要编译这个项目。
Cargo 从环境中获取你的名称和 email 信息,所以如果这些信息不正确,请修改并保存此文件。
最后一行, [dependencies] ,是项目依赖列表(我们称呼 Rust 代码包为 crate)部分的开始。
在 Rust 中,代码包被称为
crates。这个项目并不需要任何其他的 crate,现在打开 src/main.rs 看看:

[root@jingtian01 src ]#cat main.rs 
fn main() {println!("Hello, world!");
}

Cargo 为你生成了一个 “Hello World!” 程序,正如我们之前示例中编写的那个!目前为止,之前项目与 Cargo 生成项目的区别是 Cargo 将代码放在 src 目录,
同时项目根目录包含一个 Cargo.toml 配置文件
Cargo 期望源文件位于 src 目录。项目根目录只留给 README、license 信息、配置文件和其他跟代码无关的文件。使用Cargo 帮助你保持项目干净整洁,一切井井有条。
如果没有用 Cargo 开始项目,比如 hello_world 目录中的项目,可以将其转化为一个 Cargo 项目。将代码放入 src 目录,并创建一个合适的 Cargo.toml 文件。

4.2 构建并运行 Cargo 项目

现在让我们看看通过 Cargo 构建和运行 “Hello, world!” 程序有什么不同。在 hello_cargo,输入下面的命令来构建项目:

[root@jingtian01 hello_cargo ]#cargo buildCompiling hello_cargo v0.1.0 (/root/projects/hello_cargo)Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.19s

在这里插入图片描述

这个命令会创建 target/debug/hello_cargo(或者在 Windows 上是 target\debug\hello_cargo.exe)可执行文件,而不是在目前目录。
可以通过这个命令运行可执行文件:

[root@jingtian01 hello_cargo ]#./target/debug/hello_cargo 
Hello, world!

如果一切顺利, Hello, world! 应该打印在终端上。首次运行 cargo build 时也会使 Cargo 在项目根目录创建一个新文件:Cargo.lock。
这个文件记录项目依赖的实际版本。这个项目并没有依赖,所以其内容比较少。你自己永远也不需要碰这个文件,让 Cargo 处理它就行了。
我们刚刚使用 cargo build 构建了项目并使用 ./target/debug/hello_cargo 运行了程序,也可以使用 cargo run 在一个命令中同时编译并运行生成的可执行文件:

[root@jingtian01 hello_cargo ]#cargo runFinished `dev` profile [unoptimized + debuginfo] target(s) in 0.00sRunning `target/debug/hello_cargo`
Hello, world!

在这里插入图片描述

注意这一次并没有出现表明 Cargo 正在编译 hello_cargo 的输出。Cargo 发现文件并没有被改变,就直接运行了二进制文
件。如果修改了源文件的话,Cargo 会在运行之前重新构建项目。

Cargo 还提供了一个叫 cargo check 的命令。该命令快速检查代码确保其可以编译但并不产生可执行文件:
[root@jingtian01 hello_cargo ]#cargo check
在这里插入图片描述

为什么你会不需要可执行文件呢?通常 cargo check 要比 cargo build 快得多,因为它省略了生成可执行文件的步骤。
如果编写代码时持续的进行检查, cargo check 会加速开发!为此很多 Rustaceans 编写代码时运行 cargo check 定期运行
cargo check 确保它们可以编译。当准备好使用可执行文件时运行 cargo build 。

作为目前所学的关于 Cargo 内容的回顾:
可以使用 cargo build 或 cargo check 构建项目。
可以使用 cargo run 一步构建并运行项目。
有别于将构建结果放在与源码相同的目录,Cargo 会将其放到 target/debug 目录。
Cargo 的一个额外的优点是不管你使用什么操作系统其命令都是一样的。所以从此以后本书将不再为 Linux 和 macOS 以及 Windows 提供相应的命令。

4.3 发布(release)构建

当项目最终准备好发布了,可以使用 cargo build --release 来优化编译项目。
这会在 target/release 而不是 target/debug 下生成可执行文件。
这些优化可以让 Rust 代码运行的更快,不过启用这些优化也需要消耗更长的编译时间。
这也就是为什么会有两种不同的配置:一种为了开发,你需要经常快速重新构建;
另一种为了构建给用户最终程序,它们不会经常重新构建,并且希望程序运行得越快越好。
如果你在测试代码的运行时间,请确保运行 cargo build --release 并使用target/release 下的可执行文件进行测试。

4.4 把 Cargo 当作习惯

对于简单项目, Cargo 并不比 rustc 提供了更多的优势,不过随着开发的深入终将证明其价值。
对于拥有多个 crate 的复杂项目,让 Cargo 来协调构建将简单的多。
即便 hello_cargo 项目十分简单,它现在也使用了很多你之后的 Rust 生涯将会用得上的实用工具。其实对于任何你想要
从事的项目,可以使用如下命令通过 Git 检出代码,移动到该项目目录并构建:

5、总结

你已经准备好迎来 Rust 之旅的伟大开始!在本文中,你学习了如何:
使用 rustup 安装最新稳定版的 Rust
跟新到新版的 Rust
打开本地安装的文档
直接通过 rustc 编写并运行 “Hello, world!” 程序
使用 Cargo 风格创建并运行新项目
现在是一个通过构建更大的项目来熟悉读写 Rust 代码的好时机。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/76429.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Google Chrome下载受限制的解决方案【方法指南】

在国内使用网络时,部分用户在尝试访问Google Chrome官网下载谷歌浏览器时,常常遇到网页无法打开或文件下载失败的情况。这种下载受限制的问题多由网络访问政策或DNS解析异常导致。为了正常获取Google Chrome的最新版安装程序,用户需要通过一些…

使用 new EventSource 实现前端实时通信

示例: eventSource单向通信 1. 什么是 EventSource? EventSource 是浏览器提供的一种实现服务器推送(Server-Sent Events,简称 SSE)功能的 API。它是基于 HTTP 协议的单向通信机制,可以通过服务器将实时数…

Android Input——查找并添加目标窗口(七)

在 Android 输入系统中,InputDispatcher 的核心职责之一是将输入事件正确地传递到目标窗口。上一篇文章我们介绍到 InputDispatcher 事件分发调用到 findFocusedWindowTargetsLocked() 函数查找焦点窗口,并将焦点窗口添加到目标窗口,这里我们继续往下看。 一、获取焦点窗口…

Spring Boot中Spring MVC相关配置的详细描述及表格总结

以下是Spring Boot中Spring MVC相关配置的详细描述及表格总结: Spring MVC 配置项详解 1. 异步请求配置 spring.mvc.async.request-timeout 描述:设置异步请求的超时时间(单位:毫秒)。默认值:未设置&…

HTTP GET 和 POST 请求有什么区别

HTTP 的 GET 和 POST 请求是两种常见的 HTTP 请求方法,它们有不同的特点和应用场景。以下是它们的主要区别: 1. 用途 GET:用于从服务器获取数据或资源。GET 请求会附带查询参数在 URL 中,通常用于请求数据,如加载网页…

从入门到精通【MySQL】 联合查询

文章目录 📕摘要📕1. 多表联合查询时MySQL内部原理✏️1.1 实例:一个完整的联合查询过程 📕2. 内连接📕3. 外连接📕4. 自连接📕5. 子查询✏️5.1 单行子查询✏️5.2 多行子查询✏️5.3 多列子查…

高可用之战:Redis Sentinal(哨兵模式)

参考:Redis系列24:Redis使用规范 - Hello-Brand - 博客园 1 背景 在我们的《Redis高可用之战:主从架构》篇章中,介绍了Redis的主从架构模式,可以有效的提升Redis服务的可用性,减少甚至避免Redis服务发生完…

加密≠安全:文件夹密码遗忘背后的数据丢失风险与应对

在数字化时代,保护个人隐私和数据安全变得尤为重要。许多人选择对重要文件夹进行加密,以防止未经授权的访问。然而,一个常见且令人头疼的问题也随之而来——文件夹加密密码遗忘。当你突然发现自己无法访问那些加密的文件夹时,那种…

WPS宏开发手册——附录

目录 系列文章7、附录 系列文章 使用、工程、模块介绍 JSA语法 JSA语法练习题 Excel常用Api Excel实战 常见问题 附录 7、附录 颜色序列:在excel中设置颜色,只能设置颜色序号,不能直接设置rgb颜色 1、黑色 (Black)…

C++基础精讲-02

文章目录 1.C/C申请、释放堆空间的方式对比1.1C语言申请、释放堆空间1.2C申请、释放堆空间1.2.1 new表达式申请数组空间 1.3回收空间时的注意事项1.4malloc/free 和 new/delete 的区别 2.引用2.1 引用的概念2.2 引用的本质2.3 引用与指针的联系与区别2.4 引用的使用场景2.4.1 引…

Spring Boot MongoDB 分页工具类封装 (新手指南)

Spring Boot MongoDB 分页工具类封装 (新手指南) 目录 引言&#xff1a;为何需要分页工具类&#xff1f;工具类一&#xff1a;PaginationUtils - 简化 Pageable 创建 设计目标代码实现 (PaginationUtils.java)如何使用 PaginationUtils 工具类二&#xff1a;PageResponse<…

MyBatis的缓存、逆向工程、使用PageHelper、使用PageHelper

一、MyBatis的缓存 缓存&#xff1a;cache 缓存的作用&#xff1a;通过减少IO的方式&#xff0c;来提高程序的执行效率。 mybatis的缓存&#xff1a;将select语句的查询结果放到缓存&#xff08;内存&#xff09;当中&#xff0c;下一次还是这条select语句的话&#xff0c;直…

java中的JNI调用c库

1. 简单demo 如果是在某个项目中有包名就需要自己找ai问问去改写下cmd命令去编译执行等 java文件&#xff08;HelloJNI.java&#xff09; public class HelloJNI {// 声明 native 方法public native void sayHello();// 加载本地库static {System.loadLibrary("hello&quo…

人工智能:GPT技术应用与未来展望

GPT(Generative Pre-trained Transformer)作为自然语言处理领域的代表性技术,近年来在各行业的实际应用中展现出广泛潜力。结合其技术特性与行业需求,以下是GPT的主要应用场景、案例分析及未来挑战的总结: 一、核心应用领域与案例 文本生成与内容创作 自动化内容生产:GPT…

前端笔记-ECMAScript语法概览

更多详细可以查看1.1 ES6 教程 | 菜鸟教程 这里我将大概记录ES与JS大概不一样的部分&#xff0c;方便联合记忆。 历史与关系 ECMAScript&#xff1a;是一种由 Ecma 国际组织制定的脚本语言规范&#xff0c;它是 JavaScript 的标准化版本。ECMAScript 为 JavaScript 提供了语…

操作主机的管理

1.在AD林范围内&#xff0c;有哪几个操作主机角色 架构主机&#xff08;Schema Master&#xff09; 功能&#xff1a;负责整个AD林中所有对象和属性的定义&#xff0c;是唯一可以更新目录架构的DC。架构更新会从架构主机复制到目录林中的所有其他域控制器。 作用范围&#xf…

【Linux】网络编程

目录 端口号 网络字节序 socket编程 接口 sockaddr结构 udp网络程序 创建套接字 绑定 接收 发送 客户端需要绑定吗&#xff1f; 客户端执行方法 本地环回地址 终端文件 代码 tcp网络程序 SOCK_STREAM 监听 查询网络信息 获取新连接 地址转换函数 客户端绑…

Go 语言中的select是做什么的

Go 语言中的 select 是做什么的 在 Go 语言中&#xff0c;select 语句是用于处理多个通道&#xff08;channel&#xff09;操作的一种控制结构。它类似于 switch 语句&#xff0c;但专门用于并发编程&#xff0c;允许 Goroutine 在多个通道上等待操作&#xff08;发送或接收&a…

智慧班牌系统解决方案,SaaS智慧电子班牌云平台

智慧班牌系统解决方案 系统概述 智慧班牌是智慧校园建设不断发展的产物&#xff0c;是教育信息化改革的载体。通过智慧班牌可以高效便捷传递各种知识信息和通知信息、及时反馈课堂信息、实现班级的透明化管理。智慧班牌将学生平安考勤、异常出勤情况及时反馈至家长、老师&…

利用大模型和聚类算法找出 Excel 文件中重复或相似度高的数据,并使用 FastAPI 进行封装的详细方案

以下是一个利用大模型和聚类算法找出 Excel 文件中重复或相似度高的数据,并使用 FastAPI 进行封装的详细方案: 方案流程 数据读取:从 Excel 文件中读取数据。文本向量化:使用大模型将文本数据转换为向量表示。聚类分析:运用聚类算法对向量进行分组,将相似度高的数据归为…