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() 成员函数,提供边界检查。)
相关推荐
一棵开花的树,枝芽无限靠近你13 分钟前
【PPTist】添加PPT模版
前端·学习·编辑器·html
VertexGeek32 分钟前
Rust学习(八):异常处理和宏编程:
学习·算法·rust
二进制_博客1 小时前
Flink学习连载文章4-flink中的各种转换操作
大数据·学习·flink
codebolt2 小时前
ADS学习记录
学习
Komorebi.py3 小时前
【Linux】-学习笔记05
linux·笔记·学习
亦枫Leonlew3 小时前
微积分复习笔记 Calculus Volume 1 - 6.5 Physical Applications
笔记·数学·微积分
冰帝海岸8 小时前
01-spring security认证笔记
java·笔记·spring
小二·9 小时前
java基础面试题笔记(基础篇)
java·笔记·python
朝九晚五ฺ10 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习
wusong99912 小时前
mongoDB回顾笔记(一)
数据库·笔记·mongodb