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 可以创建项目与运行项目。

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

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

相关文章

分布式文件系统 SpringBoot+FastDFS+Vue.js【三】

分布式文件系统 SpringBootFastDFSVue.js【三】 七、创建后台--分角色管理7.1.创建后台数据库表7.2.创建实体类7.2.1.Admin7.2.2.Menu7.2.3.MenuBean7.2.4.Role7.2.5.RoleMenu 7.3.编辑配置文件application.yml7.4.编写工具类7.4.1.AuthContextHolder7.4.2.HttpUtils7.4.3.Stri…

Ubuntu 20.04 安装RVM

RVM是管理Ruby版本的工具,使用RVM可以在单机上方便地管理多个Ruby版本。 下载安装脚本 首先使下载安装脚本 wget https://raw.githubusercontent.com/rvm/rvm/master/binscripts/rvm-installer 如果出现了 Connection refused 的情况, 可以考虑执行以下命令修改dns,再执…

【论文极速读】Flamingo:一种交织图文的视觉语言大模型方法

【论文极速读】Flamingo:一种交织图文的视觉语言大模型方法 FesianXu 20240215 at Baidu Search Team 前言 Flamingo算是DeepMind的多模态融合LLM的一个较老的工作了(2022年),之前粗略读过没来得及及时总结,本次过年笔…

GPU独显下ubuntu屏幕亮度不能调节解决方法

GPU独显下屏幕亮度不能调节(假设你已经安装了合适的nvidia显卡驱动),我试过修改 /etc/default/grub 的 GRUB_CMDLINE_LINUX_DEFAULT"quiet splash acpi_backlightvendor" ,没用。修改和xorg.conf相关的文件,…

OpenCV 4基础篇| OpenCV简介

目录 1. 什么是OpenCV2. OpenCV的发展历程3. 为什么用OpenCV4. OpenCV应用领域5. OpenCV的功能模块5.1 基本模块5.2 扩展模块5.3 常用函数目录 1. 什么是OpenCV OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它…

2024PMP考试新考纲-近年PMP真题练一练和很详细解析(3)

今天华研荟继续为您分享和解析PMP真题,一方面让大家感受实际的PMP考试和出题形式,另一方面是通过较详细的解题思路和知识讲解帮助大家最后一个多月有效备考,一次性3A通过2024年PMP考试。 2024年PMP考试新考纲-近年真题随机练一练 (注&#x…

排序算法---桶排序

原创不易,转载请注明出处。欢迎点赞收藏~ 桶排序(Bucket Sort)是一种排序算法,它将待排序的数据分到几个有序的桶中,每个桶再分别进行排序,最后将各个桶中的数据按照顺序依次取出,即可得到有序序…

C语言—指针

碎碎念:做指针题的时候我仿佛回到了原点&#xff0c;总觉得目的是为了把框架搭建起来&#xff0c;我胡说的哈31 1.利用指针变量将一个数组中的数据反向输出。 /*1.利用指针变量将一个数组中的数据反向输出。*/#include <stdio.h> #include <time.h> #include <…

BulingBuling - 《研究巴菲特》 [ Buffettology ]

研究巴菲特 使沃伦-巴菲特成为世界上最著名的投资者的那些以前未曾解释过的技术 作者&#xff1a;玛丽-巴菲特 Buffettology The Previously Unexplained Techniques That Have Made Warren Buffett The Worlds Most Famous Investor By Mary Buffett 内容提要 《Buffetto…

JavaWeb-JDBC-API详解

一、JDBC介绍 二、JDBC 快速入门 package com.itheima.jdbc;import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement;public class JDCBDemo {public static void main(String[] args) throws Exception {//1、注册驱动Class.forName("co…

[OPEN SQL] 新增数据

INSERT语句用于数据的新增操作 本次操作使用的数据库表为SCUSTOM&#xff0c;其字段内容如下所示 航班用户(SCUSTOM) 该数据库表中的部分值如下所示 1.插入单条数据 语法格式 INSERT <dbtab> FROM <wa>. INSERT INTO <dbtab> VALUES <wa>. INSERT &…

链式结构实现队列

链式结构实现队列 1.队列1.1队列的概念及结构1.2队列的实现 2. 队列的各种函数实现3. 队列的全部代码实现 1.队列 1.1队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出 FIFO(Fi…

TiDB 在医疗保障信息平台的应用实践

文章介绍了 TiDB 在医疗保障信息平台中的应用。东软医保云应用管理平台通过与 TiDB 联合&#xff0c;成功满足了医疗保障业务中高并发、实时性和复杂查询的要求。在某地市医疗保障信息平台的实践中&#xff0c;TiDB 分布式数据库有效实现了在线交易和实时分析服务&#xff0c;日…

HTML5 Canvas与JavaScript携手绘制动态星空背景

目录 一、程序代码 二、代码原理 三、运行效果 一、程序代码 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>星空背景</title> </head> <body style"overflow-x:hidden;"><canvas …

网络原理-TCP_IP(6)

网络层 在复杂的网络环境中确定一个合适的路径. IP协议 与TCP协议并列,都是网络体系中最核心的协议. 基本概念 主机:配有IP地址,但是不进行路由控制的设备; 路由器:即配有IP地址,又能进行路由控制; 节点:主机和路由器的统称; 协议头格式 4位版本号(version):指定IP协议的版…

【JavaEE】spring boot快速上手

SpringBoot快速上手 文章目录 SpringBoot快速上手Maven会出现的一个官方bug创建完项目之后常用的的三个功能依赖管理Maven仓库中央仓库本地仓库国内源配置私服 springboot项目创建什么是springspring boot项目的创建Hello Worldweb服务器 SpringMVC什么是SpringWebMVC什么是MVC…

mpack简明教程

文章目录 摘要MessagePack简介MPACK的简单使用在定长的buffer存储不定长的数据读取截断的数据 摘要 本文先简单介绍MessagePack的基本概念。 然后&#xff0c;介绍一个MessagePack C API - MPack的通常使用。 接着尝试对MPack截断数据的读取。 注&#xff1a;本文完整代码见…

Android 13.0 SystemUI下拉状态栏定制二 锁屏页面横竖屏解锁图标置顶显示功能实现

1.前言 在13.0的系统rom定制化开发中,在关于systemui的锁屏页面功能定制中,由于在平板横屏锁屏功能中,时钟显示的很大,并且是在左旁边居中显示的, 由于需要和竖屏显示一样,所以就需要用到小时钟显示,然后同样需要居中,所以就来分析下相关的源码,来实现具体的功能 如图…

【MySQL】:DQL查询

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; MySQL从入门到进阶 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一. DQL1.1 基本语法1.2 基础查询1.3 条件查询1.3 聚合函数 &#x1f324;️ 全篇…

如何解决缓存和数据库的数据不一致问题

数据不一致问题是操作数据库和操作缓存值的过程中&#xff0c;其中一个操作失败的情况。实际上&#xff0c;即使这两个操作第一次执行时都没有失败&#xff0c;当有大量并发请求时&#xff0c;应用还是有可能读到不一致的数据。 如何更新缓存 更新缓存的步骤就两步&#xff0…