Rust介绍
Rust(中文称为“锈”)是一种由Mozilla开发的系统编程语言,它着力于提供安全性、并发性和实用性。Rust的设计目标是消除程序出现的内存安全性问题,如空指针引用、数据竞争等。它通过在编译时进行严格的所有权和借用检查来实现这一目标,而不是依赖于垃圾回收机制。
以下是Rust的一些关键特点和概念:
-
所有权系统(Ownership): Rust引入了所有权的概念,通过所有权系统,确保在任何时刻只有一个部分的代码可以访问数据,从而避免了内存泄漏和悬挂指针等问题。
-
借用和生命周期: Rust允许通过借用(borrowing)来访问数据,而不是直接拥有它。借用有严格的生命周期(lifetimes)概念,确保引用的有效性。
-
模式匹配(Pattern Matching): Rust支持强大的模式匹配语法,这使得代码更加清晰和可读,同时也提高了代码的表达力。
-
零成本抽象(Zero-cost Abstractions): Rust提供了高度抽象的功能,如泛型、trait等,但同时它能够在不引入运行时开销的情况下实现这些抽象。
-
并发安全性: Rust在语言级别提供了并发安全性,避免了数据竞争和其他并发问题。它使用所有权和借用系统来保证多线程代码的安全性。
-
无空指针: Rust在语言层面上消除了空指针引用问题,确保不会出现野指针和悬挂指针。
-
高性能: Rust的设计注重性能,可以用于开发高性能的系统级应用和底层组件。
-
社区支持: 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 | 布尔类型(true 或 false ) |
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() 成员函数,提供边界检查。)