Rust 学习笔记 - Hello world

前言

本文将讲解如何完成一个 Rust 项目的开发流程,从编写 “Hello, World!” 开始,到使用 Cargo 管理和运行项目。

编写 Hello world

开始一个新项目很简单,首先,创建一个包含 main.rs 文件的 hello_world 文件夹,并在 main.rs 文件中添加如下代码:

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

简单说明一下代码:

  1. fn main() { ... }:
    • fn 关键字用于声明一个新的函数,这里声明了一个名为 main 的函数。
    • main 函数是项目的入口函数,每个可执行的 Rust 程序都必须包含一个 main 函数。
    • 大括号 {} 包围着函数的主体内容。
  2. println!("Hello, world!");:
    • 这行代码调用了 Rust 的 println! 宏。
    • 宏是 Rust 中一种特殊的、可用于生成代码的工具。
    • 在这个场景中,println! 宏用于向程序的标准输出打印一行字符串。
    • 字符串 "Hello, world!" 被包括在双引号中,并在终端或命令行界面打印出来。
    • 注意宏的末尾有一个感叹号 !,这是 Rust 用于区分函数和宏的方法。

编译代码

通过 rustc 编译单个文件:

rustc main.rs

编译成功后,会生成一个同名的可执行文件:

通过 ./main 运行可执行文件,将在控制台看到 “Hello, world!”。

Cargo 项目

使用 rustc 直接编译是手动过程,主要用于编译单个 Rust 源文件,仅当项目很小且没有复杂依赖时适用。cargo 是 Rust 官方推荐的项目管理工具,它可以自动处理复杂的编译任务,包括依赖管理、编译、测试等,适用于任何规模的项目,并且提供了一致的项目结构和构建过程,所以,我们通常使用 Cargo 管理项目。

初始化项目

用以下命令创建一个标准的 Rust 项目结构:

cargo new hello_world

项目目录

hello_world/
.
├── .git
├── .gitignore
├── Cargo.toml       # 描述项目的配置文件,包括项目信息和依赖信息
└── src
    └── main.rs      # 项目代码的入口文件

编写代码

在 Rust 项目中,通常 main.rs 是的主入口文件。当创建一个可执行的 Rust 项目(也称为 binary crate)时,Cargo 默认会设置 main.rs 作为项目入口。main.rs 通常包含 main 函数,它是程序执行的入口。

我们打开 src/main.rs 文件,默认会有一段 “Hello world” 代码:

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

编译代码

当通过命令行运行 cargo build 命令来编译 Rust 项目时,Cargo 会执行一系列操作来编译你的代码,并生成编译结果。

cargo build

编译结束后,Cargo 会提供反馈,告知编译是否成功,以及相关信息。

编译成功

如果编译成功,通常会看到类似这样的输出:

这表示项目成功编译,没有出现错误。编译后的会生成可执行文件, 通常位于项目目录下的 target/debug/ 目录中。例如本项目名称是 hello_world,编译后的文件就叫做 hello_world(在 Windows 上是 hello_world.exe)。

target
├── CACHEDIR.TAG
└── debug
    ├── build
    ├── deps
    ├── examples
    ├── hello_world        # 类 Unix 操作系统可执行文件
    ├── hello_world.d
    └── incremental

运行编译文件

  • 在类 Unix 系统中,直接通过命令行运行即可
  • 在 windows 系统中,双击 hello_world.exe 运行即可

编译错误

如果源码有错误,cargo build 会中止编译过程,并显示错误信息。错误信息会标明出错的文件和行号,以及错误的类型和可能的解释。

在这个例子中,Rust 编译器告诉你 main.rs 文件的第 2 行有一个类型不匹配的错误。

编译警告

如果代码中存在一些潜在的隐患问题,编译器会输出警告信息,但不会中止编译。

这个警告告诉你有一个未使用的变量 x

运行代码

通过 cargo run 命令可以立即执行编译后的可执行文件,简化了 cargo build 与运行可执行文件这一流程。

结语

至此,一个简单的 ”Hello World“ 的示例已经讲解完成,本篇主要需要掌握的就是通过 Cargo 可以创建项目与运行项目。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

持久化:Linux利用SUID、任务计划、vim进行权限维持

目录 利用Linux SUID进行权限维持 利用Linux计划任务进行权限维持 利用Vim创建后门 利用CVE-2019-12735进行权限维持 使用Vim运行Python后门程序 利用Linux SUID进行权限维持 在前面我们使用Linux的SUID权限进行了权限提升,然后SUID还可以用来进行持久化 利用…

什么是自编码器Auto-Encoder?

来源:https://www.bilibili.com/video/BV1Vx411j78H/?spm_id_from333.1007.0.0&vd_sourcef66cebc7ed6819c67fca9b4fa3785d39 为什么要压缩呢? 让神经网络直接从上千万个神经元中学习是一件很吃力的事情,因此通过压缩提取出原图片中最具代…

LabVIEW卫星电视接收仿真系统

LabVIEW卫星电视接收仿真系统 随着卫星电视数字化的加速,传统模拟信号接收系统已无法满足需求。设计一套船载数字卫星电视接收系统,通过LabVIEW环境进行仿真实验,验证系统设计的可行性与有效性,满足数字信号接收的高精度要求&…

mysql 2-15

书写规范 #单行注释 */多行注释 -- 单行注释 mysql导入数据 基本SELECT语句 列的别名 三种方式 查询去除重复行 空值参与运算 着重号,取消关键字 查询常数,向前面添加常数 显示表结构 过滤数据 不分大小写,SQL不严谨 数值运算符 号区别 …

7.JS里表达式,if条件判断,三元运算符,switch语句,断点调试

表达式和语句的区别 表达式就是可以被求值的代码比如什么a 1 语句就是一段可以执行的代码比如什么if else 直接给B站的黑马程序员的老师引流一波总结的真好 分支语句 就是基本上所有的语言都会有的if else 语句就是满足不同的条件执行不同的代码,让计算机有条件…

使用倒模耳机壳UV村脂胶液制作舞台监听耳返入耳式耳机壳有哪些优点?

使用倒模耳机壳UV树脂胶液制作舞台监听耳返入耳式耳机壳有很多优点,具体如下: 高音质表现:通过倒模工艺制作的耳机壳能够更好地贴合耳朵,减少声音散射和反射,提高声音的清晰度和质感。这对于舞台监听来说非常重要&…

智能传感器阅读笔记-物联网用智能传感器技术的发展重点

物联网用智能传感器技术的发展重点包含边缘计算算法优化、身份认证算法优化和能量采集技术。 图1 物联网用智能传感器技术的发展重点 边缘计算算法优化 边缘计算是指在靠近物或数据源头的一侧(传感器侧),采用集检测、计算、存储、通信功能…

C语言从零实现贪吃蛇小游戏

制作不易,点赞关注一下呗!!! 文章目录 前言一. 技术要点二、WIN32API介绍三、贪吃蛇游戏设计与分析 1.游戏开始前的初始化 2.游戏运行的逻辑 总结 前言 当我们掌握链表这样的数据结构之后,我们就可以用它来…

第12集《佛说四十二章经》

请大家打开讲议第十五面,第三十一章、心寂欲除。 这几章都是佛陀指导我们如何修出离心。前面的经文讲到修出离心,这有对外境与对内心的出离。对外境的出离是指一位初学者,选择一个如法清净的道场安住,这非常重要。唯识学对这个概…

紫微斗数双星组合:天机天梁在辰戌

文章目录 前言内容总结 前言 紫微斗数双星组合:天机天梁在辰戌 内容 紫微斗数双星组合:天机天梁在辰戌 性格分析 在紫微斗数命盘中,天梁星是一颗“荫星”,能够遇难呈祥,化解凶危,主寿,主贵。…

四、JMS规范

JMS规范 一、JMS是什么二、MQ中间件对比三、JMS组成1.JMS Provider2.JMS Producer3.JMS Consumer4.JSM Message4.1 消息头4.2 消息体4.2.1 生产者4.2.2 消费者 4.3 消息属性 四、JMS可靠性1.PERSISTENT - 持久化1.1 参数设置1.2 Queue持久化1.3 Topic持久化1.3.1 持久的发布主题…

开关式稳压电源的工作原理

随着全球对能源问题的重视,电子产品的耗能问题将愈来愈突出,如何降低其待机功耗,提高供电效率成为一个急待解决的问题。传统的线性稳压电源虽然电路结构简单、工作可靠,但它存在着效率低(只有40% -50%&…

通过写代码学习AWS DynamoDB (3)- 一致性hash

简介 在本文中,我们将简单介绍一致性hash(consistent hash)的概念,以及一致性hash可以解决的问题。然后我们将在模拟的DDB实现中实现一个简单版本的基于一致性harsh实现的partition。 问题 在《通过写代码学习AWS DynamoDB &am…

.NET Core MongoDB数据仓储和工作单元模式实操

前言 上一章节我们主要讲解了MongoDB数据仓储和工作单元模式的封装,这一章节主要讲的是MongoDB用户管理相关操作实操。如:获取所有用户信息、获取用户分页数据、通过用户ID获取对应用户信息、添加用户信息、事务添加用户信息、用户信息修改、用户信息删除…

适合新手注册google谷歌账号详细步骤截图演示,记录解决 “此电话号码无法用于进行验证” 问题

目录 手机号码验证问题解决方法具体注册步骤演示1、谷歌浏览器改语言2、点击注册3、选择个人用途4、输入姓名5、输入年月日6、创建登录账号7、设置登录密码8、手机号码验证(重点)9、手机号码验证成功界面10、关联邮箱备用登录账号设置 手机号码验证问题 …

Java与JavaScript同源不同性

Java是目前编程领域使用非常广泛的编程语言,相较于JavaScript,Java更被人们熟知。很多Java程序员想学门脚本语言,一看JavaScript和Java这么像,很有亲切感,那干脆就学它了,这也间接的帮助了JavaScript的发展…

2.1.1 摄像头

摄像头 更多内容,请关注: github:https://github.com/gotonote/Autopilot-Notes.git 摄像头是目前自动驾驶车中应用和研究最广泛的传感器,其采集图像的过程最接近人类视觉系统。基于图像的物体检测和识别技术已经相当成熟&#…

wayland(xdg_wm_base) + egl + opengles——dma_buf 作为纹理数据源(五)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、EGL dma_buf import 相关的数据结构和函数1. EGLImageKHR2. eglCreateImageKHR()3. glEGLImageTargetTexture2DOES()二、egl 中 import dma_buf 作为纹理的代码实例1. egl_wayland_dmabuf_…

Crypto-RSA2

题目:(BUUCTF在线评测 (buuoj.cn)) 已知e,n,dp/(dq),c求明文: 首先有如下公式: dp ≡ d mod (p-1) ,ed ≡ 1 mod φ(n) ,npq ,φ(n)(p-1)(q-1) python代码实现如下: import libnu…

[UI5 常用控件] 09.IconTabBar,IconTabHeader,TabContainer

文章目录 前言1. IconTabBar1.1 简介1.2 基本结构1.3 用法1.3.1 颜色,拖放,溢出1.3.2 Icons Only , Inner Contents1.3.3 showAll,Count,key,IconTabSeparator 1.3.4 Only Text1.3.5 headerMode-Inline1.3.6 design,IconTabSeparator-icon1.3.7 DensityM…