Rust学习笔记001:HELLOW WORLD + Cargo

2024-01-01 07:04

本文主要是介绍Rust学习笔记001:HELLOW WORLD + Cargo,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Rust介绍

Rust(中文称为“锈”)是一种由Mozilla开发的系统编程语言,它着力于提供安全性、并发性和实用性。Rust的设计目标是消除程序出现的内存安全性问题,如空指针引用、数据竞争等。它通过在编译时进行严格的所有权和借用检查来实现这一目标,而不是依赖于垃圾回收机制。

以下是Rust的一些关键特点和概念:

  1. 所有权系统(Ownership): Rust引入了所有权的概念,通过所有权系统,确保在任何时刻只有一个部分的代码可以访问数据,从而避免了内存泄漏和悬挂指针等问题。

  2. 借用和生命周期: Rust允许通过借用(borrowing)来访问数据,而不是直接拥有它。借用有严格的生命周期(lifetimes)概念,确保引用的有效性。

  3. 模式匹配(Pattern Matching): Rust支持强大的模式匹配语法,这使得代码更加清晰和可读,同时也提高了代码的表达力。

  4. 零成本抽象(Zero-cost Abstractions): Rust提供了高度抽象的功能,如泛型、trait等,但同时它能够在不引入运行时开销的情况下实现这些抽象。

  5. 并发安全性: Rust在语言级别提供了并发安全性,避免了数据竞争和其他并发问题。它使用所有权和借用系统来保证多线程代码的安全性。

  6. 无空指针: Rust在语言层面上消除了空指针引用问题,确保不会出现野指针和悬挂指针。

  7. 高性能: Rust的设计注重性能,可以用于开发高性能的系统级应用和底层组件。

  8. 社区支持: Rust拥有一个活跃的社区,提供丰富的文档、库和工具,帮助开发者更容易地学习和使用这门语言。

由于这些特性,Rust在一些领域取得了广泛的应用,包括系统编程、嵌入式系统、网络服务和操作系统等。它的设计理念使其成为一种强大的编程语言,适用于需要高性能和内存安全的应用场景。

Rust 特别擅长的领域

  • 高性能 Web Service
  • WebAssembly
  • 命令行工具
  • 网络编程
  • 嵌入式设备
  • 系统编程

Rust 的用户和案例

  • Google:新操作系统 Fuschia,其中 Rust 代码量大约占30%
  • Amazon:基于Linux开发的直接可以在裸机、虚机上运行容器的操作系统System76:纯Rust 开发了下一代安全操作系统 Redox
  • 蚂蚁金服:库操作系统 Occlum
  • 斯坦福和密根大学:嵌入式实时操作系统,应用于 Google 的加密产品·微软:正在使用 Rust 重写 Windows 系统中的一些低级组件。
  • 微软:WinRT/Rust 项目
  • Dropbox、Yelp、Coursera、LINE、Cloudflare、Atlassian、npm、Ceph、百度、华为、Sentry、Deno…
  • Neural-Chat-7B-v3-1 是一个基于 Mistral-7B-v0.1 调整的模型,并在Open-Orca/SlimOrca开源数据集上进行了训练。该模型在2023年9月至10月间进行了训练。它融合了直接偏好优化(DPO)算法,凸显了其先进的微调和优化能力。
    我们将使用 Rust + Wasm 技术栈来开发和部署这个模型的应用程序。不需安装复杂的 Python 包或 C++ 工具链!
    如何在你自己的设备上运行 Neural-Chat-7B-v3-1如何为 Neural-Chat-7B-v3-1 创建与 OpenAI 兼容的 API 服务 具体教程见https://zhuanlan.zhihu.com/p/665968480

编译与运行 Rust 程序

。编译: rustc main.rs
。运行:

  • Windows:. main.exe
  • Linux/mac: ./main

编译和运行是单独的两步
。运行 Rust 程序之前必须先编译,命令为: rustc 源文件名-rustcmain.rs
。编译成功后,会生成一个二进制文件
-在Windows 上还会生成一个 .pdb 文件,里面包含调试信息。Rust 是 ahead-of-time 编译的语言

  • 可以先编译程序,然后把可执行文件交给别人运行(无需安装 Rust)rustc 只适合简单的 Rust 程序…

开发工具

base

Windows

在这里插入图片描述

linux

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

IDE

。Visual Studio Code

  • Rust 插件
    。Clion (Intelli ldea 系列)
  • Rust 插件

在这里插入图片描述

Hello World

在这里插入图片描述

Rust 程序解剖

  • 定义函数:fn main(){没有参数,没有返回
  • main 函数很特别:它是每个 Rust 可执行程序最先运行的代码
  • 打印文本; println!("Hello, world!");
  • Rust的缩进是4个空格而不是 tab
  • println! 是一个 Rust macro (宏)。如果是函数的话,就没有!
  • “Hello World”是字符串,它是 println!的参数
  • 这行代码以;结尾

Cargo创建构建项目

介绍

  • Cargo 是 Rust 的构建系统和包管理工具- 构建代码、下载依赖的库、构建这些库。安装 Rust 的时候会安装 Cargo,使用cargo --version查看。
    在这里插入图片描述

使用 Cargo 创建项目

  • 创建项目: cargo new hello_cargo
    在这里插入图片描述

src/main.rs

  • cargo 生成的 main.rs 在 src目录下
  • 而 Cargo.toml在项目顶层下
  • 源代码都应该在 src目录下
  • 顶层目录可以放置:README、许可信息、配置文件和其它与程序源码无关的文件·如果创建项目时没有使用 cargo,也可以把项目转化为使用 cargo:把源代码文件移动到 src 下创建 Cargo.toml并填写相应的配置

构建命令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

常见的数据类型

基本类型
类型描述
i8, i16, i32, i64, i128有符号整数
u8, u16, u32, u64, u128无符号整数
isize, usize与计算机架构相关的整数(通常用于索引和长度)
f32单精度浮点数
f64双精度浮点数
bool布尔类型(truefalse
char字符类型
复合类型
类型描述
struct结构体类型,用于创建自定义的数据结构
enum枚举类型,允许创建具有多个变体的类型
array具有固定大小的相同类型元素的数组 ,如果想让你的数据存放在 stack(栈)上而不是 heap(堆)上,或者想保证有固定数量的元素,这时使用数组更有好处。但是数组没有 Vector 灵活(以后再讲)。
tuple元组类型,将多个不同或相同类型的值组合在一起
slice数组切片类型,对数组的引用表示数组的一部分
&T引用类型,对类型 T 的不可变引用
&mut T引用类型,对类型 T 的可变引用
*const T不可变指针
*mut T可变指针
fn函数类型

数组访问不能越界

  • Rust数组访问不能越界(C和C++中如果使用如果你使用 operator[] 越界访问,程序会进入未定义行为的状态,可能导致程序崩溃或产生不可预测的结果。c++的vector的 at() 成员函数,提供边界检查。)
    在这里插入图片描述

这篇关于Rust学习笔记001:HELLOW WORLD + Cargo的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/558480

相关文章

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

在Rust中要用Struct和Enum组织数据的原因解析

《在Rust中要用Struct和Enum组织数据的原因解析》在Rust中,Struct和Enum是组织数据的核心工具,Struct用于将相关字段封装为单一实体,便于管理和扩展,Enum用于明确定义所有... 目录为什么在Rust中要用Struct和Enum组织数据?一、使用struct组织数据:将相关字段绑

浅析Rust多线程中如何安全的使用变量

《浅析Rust多线程中如何安全的使用变量》这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下... 目录1. 向线程传递变量2. 多线程共享变量引用3. 多线程中修改变量4. 总结在Rust语言中,一个既引人入胜又可

Rust 数据类型详解

《Rust数据类型详解》本文介绍了Rust编程语言中的标量类型和复合类型,标量类型包括整数、浮点数、布尔和字符,而复合类型则包括元组和数组,标量类型用于表示单个值,具有不同的表示和范围,本文介绍的非... 目录一、标量类型(Scalar Types)1. 整数类型(Integer Types)1.1 整数字

Rust中的Option枚举快速入门教程

《Rust中的Option枚举快速入门教程》Rust中的Option枚举用于表示可能不存在的值,提供了多种方法来处理这些值,避免了空指针异常,文章介绍了Option的定义、常见方法、使用场景以及注意事... 目录引言Option介绍Option的常见方法Option使用场景场景一:函数返回可能不存在的值场景

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]