Rust语言基础:从Hello World开始

大家好,我是[lincyang]。

我们将一起探索Rust语言的基础,从最经典的程序入手——“Hello, World!”。

Rust简介

Rust是一种系统编程语言,由Mozilla赞助开发,旨在提供内存安全、并发性和实用性。它的设计思想强调安全性和性能,是系统级编程的现代替代品。

安装Rust

开始之前,我们需要安装Rust编译器和它的包管理工具Cargo。Rust提供了一个方便的安装脚本,可以通过以下命令在Unix-like系统上安装:

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

在Windows上,你可以下载并运行rustup-init.exe来安装。

安装完成后,重启你的终端,运行rustc --version来验证安装。

编写第一个Rust程序

打开你的文本编辑器,创建一个新文件,命名为main.rs,并输入以下代码:

fn main() {

println!("Hello, World!");

}

这段代码定义了一个名为main的函数,这是每个可执行Rust程序的入口点。println!是一个宏,用于将文本输出到控制台。

编译和运行

保存文件后,打开终端,切换到文件所在目录,运行以下命令来编译:

rustc main.rs

这将生成一个可执行文件。在Unix-like系统上,你可以通过./main来运行它,在Windows上则直接运行main.exe。你应该会看到控制台输出了Hello, World!。

探索Cargo

Cargo是Rust的构建系统和包管理器,它可以帮助我们管理依赖、编译项目和发布代码。让我们使用Cargo来创建一个新的项目:

cargo new hello_world

cd hello_world

这会创建一个新的目录hello_world,其中包含一个Cargo.toml文件和一个src目录,src目录中有一个main.rs文件,文件内容已经包含了Hello, World!的代码。

在项目目录中,运行cargo build,Cargo会编译项目并生成可执行文件在target/debug目录下。使用cargo run可以直接编译并运行程序。

理解Rust的基本概念

变量和可变性

默认情况下,Rust中的变量是不可变的。这意味着一旦一个值被绑定到一个变量名上,你就不能改变这个值。要使变量可变,可以使用mut关键字。

let mut x = 5;

println!("The value of x is: {}", x);

x = 6;

println!("The value of x is: {}", x);

数据类型

Rust是一种静态类型语言,这意味着所有变量的类型都必须在编译时已知。Rust有多种数据类型,这里我们介绍两个基础的:标量和复合。

  1. 标量类型:代表一个单一的值,如整数、浮点数、布尔值和字符。
  2. 复合类型:可以将多个值组合成一个类型,比如元组(tuple)和数组(array)。

所有权

所有权是Rust最独特的特性之一,它使得Rust无需垃圾回收就能保证内存安全。所有权规则如下:

  1. 每个值都有一个被称为其所有者的变量。
  2. 值在任何时候只能有一个所有者。
  3. 当所有者离开作用域,这个值将被丢弃。

结语

今天,我们介绍了Rust的安装过程、编写和运行Hello World程序、Cargo的基本使用,以及Rust的一些基本概念。Rust的学习曲线可能比较陡峭,但它的安全保证和强大的性能是值得的。希望这篇文章能为你的Rust学习之旅提供一个良好的起点。

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

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

相关文章

CSS怎么选择除了第一个子元素外的其余同级子元素

使用 CSS 的:not()伪类选择器和:nth-child()伪类选择器 要通过CSS的代码选择某一个元素的除了第一个子元素外的其余的跟第一个子元素同级的子元素,可以结合使用CSS的:not()伪类选择器和:nth-child()伪类选择器进行选择。大致的语法如下: .parent > …

【EI会议征稿】第七届结构工程与工业建筑国际学术会议(ICSEIA 2024)

第七届结构工程与工业建筑国际学术会议(ICSEIA 2024) 2024 7th International Conference on Structural Engineering and Industrial Architecture 随着城市化进程的不断深入,建筑领域的需求也在优化、调整。结构工程的发展依旧受到重视&am…

c语言-数据结构-链表分割

链表分割实际上是给定一个值,遍历链表把链表中小于该值的节点与大于该值的节点分开,一般是将小于该值的节点放到链表的前面部分,大于该值的节点放在链表的后面部分。 链表分割示意图如下: 思路: 首先创建两条带哨兵位节…

CSDN每日一题学习训练——Java版(字符串相乘、子集、删除链表的倒数第 N 个结点)

版本说明 当前版本号[20231112]。 版本修改说明20231112初版 目录 文章目录 版本说明目录字符串相乘题目解题思路代码思路补充说明参考代码 子集题目解题思路代码思路参考代码 删除链表的倒数第 N 个结点题目解题思路代码思路参考代码 字符串相乘 题目 给定两个以字符串形…

【Linux】第十六站:进程地址空间

文章目录 一、程序地址空间1.内存的分布2.static修饰后为什么不会被释放3.一个奇怪的现象 二、进程地址空间1.前面现象的原因2.地址空间究竟是什么?3.为什么要有进程地址空间4.页表5.什么叫进程?6.进程具有独立性。为什么?怎么做到呢&#xf…

问题复盘|MySQL 数据记录中明明有值,使用 concat() 后得到的却一直是 null

背景 MySQL 的数据数据记录中明明有值,在使用 concat() 查询时却一直得到 null SELECT CONCAT(first_name, , last_name) FROM users;排查后发现 MySQL 的 concat 函数拼接规则是 当多个拼接的字段的字段值中存在 null 时,返回的一定是 null 解决方…

【算法】算法题-20231114

这里写目录标题 一、LCR 181. 字符串中的单词反转二、557. 反转字符串中的单词 III三、344. 反转字符串四、给定一个已按照升序排列的有序数组,找到两个数使得它们相加之和等于目标数。五、力扣第49题:字母异位词分组 一、LCR 181. 字符串中的单词反转 …

解决 Django 开发中的环境配置问题:Windows 系统下的实战指南20231113

简介: 在本文中,我想分享一下我最近在 Windows 环境下进行 Django 开发时遇到的一系列环境配置问题,以及我是如何一步步解决这些问题的。我的目标是为那些可能遇到类似困难的 Django 开发者提供一些指导和帮助。 问题描述: 最近…

2023.11.14-hive之表操作练习和文件导入练习

目录 需求1.数据库基本操作 需求2. 默认分隔符案例 需求1.数据库基本操作 -- 1.创建数据库test_sql,cs1,cs2,cs3 create database test_sql; create database cs1; create database cs2; create database cs3; -- 2.1删除数据库cs2 drop database cs2; -- 2.2在cs3库中创建…

optee4.0.0 qemu_v8环境搭建(支持Hafnium)

安全之安全(security)博客目录导读 目录 一、前提条件 二、拉取代码 三、下载工具链 四、编译 五、运行

了解防抖和节流:提升前端交互体验的实用策略

了解防抖和节流:提升前端交互体验的实用策略 前言什么是防抖?什么是节流?应用实例防抖实例节流实例 前言 本文将重点介绍前端性能优化方法之一的防抖和节流。首先解释了它们的概念和原理,然后探讨了它们在前端开发中的应用场景&a…

Spark数据倾斜优化

1 数据倾斜现象 1、现象 绝大多数task任务运行速度很快,但是就是有那么几个task任务运行极其缓慢,慢慢的可能就接着报内存溢出的问题。 2、原因 数据倾斜一般是发生在shuffle类的算子,比如distinct、groupByKey、reduceByKey、aggregateByKey…

链表相关部分OJ题

💓作者简介👏:在校大二迷茫大学生 💖个人主页🎉:小李很执着 💗系列专栏:Leetcode经典题 每日分享:人总是在离开一个地方后开始原谅它❣️❣️❣️———————————…

pgsql_全文检索_使用空间换时间的方法支持中文搜索

pgsql_全文检索_使用空间换时间的方法支持中文搜索 一、环境 PostgreSQL 14.2, compiled by Visual C build 1914, 64-bit 二、引言 提到全文检索首先想到的就是ES(ElasticSearch)和Lucene,专业且强大。对于一些小众场景对于搜索要求不高,数据量也不…

10 Go的映射

概述 在上一节的内容中,我们介绍了Go的结构体,包括:定义结构体、声明结构体变量、使用结构体、结构体关联函数、new、组合等。在本节中,我们将介绍Go的映射。Go语言中的映射(Map)是一种无序的键值对集合&am…

【Hadoop】MapReduce详解

🦄 个人主页——🎐开着拖拉机回家_大数据运维-CSDN博客 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 🪁🍁🪁&#x1f…

nodejs+vue+python+PHP+微信小程序-安卓-房产中介管理信息系统的设计与实现-计算机毕业设计

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

华为笔记本电脑原装win10/win11系统恢复安装教程方法

华为电脑matebook 14原装Win11系统带F10智能还原 安装恢复教程: 1.安装方法有两种,一种是用PE安装,一种是华为工厂包安装(安装完成自带F10智能还原) 若没有原装系统文件,请在这里获取:https:…

EasyDarwin开源流媒体服务器

文章目录 前言一、EasyDarwin 简介二、EasyDarwin 主要功能特点三、安装部署四、推拉流测试1、进入控制页面2、推流测试3、拉流测试 前言 本文介绍一个十分实用的高性能开源 RTSP 流媒体服务器:EasyDarwin。 一、EasyDarwin 简介 EasyDarwin 是基于 go 语言研发&a…

海康Visionmaster-通讯管理:使用 Modbus TCP 通讯 协议与流程交互

使用 Modbus TCP 通讯协议与视觉通讯,当地址为 0000 的保持型寄存器(4x 寄存器)变为 1 时,触发视觉流程执行一次,同时视觉将地址为 0000 的寄存器复位(也即写为 0),视觉流程执行完成后,将结果数…