Rust语言教程

内容

  • 介绍
  • 特性总结
  • rust 语言的特性(零开销的抽象移动语义
  • 结论

介绍

Rust是一门关注与安全,速度与并发的编程语言。它的设计理念就是比C或者C++开发更安全,比Python或者Ruby速度更快。Rust语言的绝大部分的安全检查与内存管理都是在程序的编译期完成,因此的程序的运行时开销不会很大。这个特性使得Rust在以下用例(1. 程序需要可预测的资源申请, 2.嵌入式设备,3.底层代码类似设备驱动)下比java之类的语言更安全。Rust也可以被用来开发Web后端Server。

特性总结

Rust成功解决的一些问题。

  • 问题:由于虚函数(运行时动态确定)调用的高成本,更倾向于将重复代码抽象

  • 解决:零成本抽象(本人不理解。。。)零抽象应该说的是,只用只需要用的,不用不需要的,也就是说,不调用不多余的东西,它并不说由编译器生成的代码,肯定是最好的选择,不会出现性能损耗。

  • 问题: 内存释放后使用,两次释放同一内存,悬空指针

  • 解决: 通过智能指针以及引用的使用避免这些问题以及通过编译时期限制原始指针的使用

  • 问题:Null指针解引用的错误

  • 解决:Rust中提出Option类型作为null指针的替代品

  • 问题: 数据竞争

  • 解决: Rust在编译期通过内置的静态分析工具来检测和预防可能的数据竞争

  • 问题: 未初始化的变量

  • 解决: 编译器要求所有的变量在使用前都都必须初始化。

  • 问题: 标准库中大量使用的实用程序类型的遗留设计(不了解)

  • 解决: 内置,可组合,结构化的类型: 元组,结构,枚举类型。模式匹配可以方便的使用结构化的类型,一些标准库全面拥抱模式匹配。

  • 问题: 嵌入式设备对程序的运行时开销要求高

  • 解决: Rust的运行时开销很低

  • 问题: 调用C语言或者其他语言的库

  • 解决: 看不懂(Only header declarations are needed to call C functions from Rust, or vice versa。No overhead in calling C functions from Rust or calling Rust functions from C)

Rust语言的特点

零成本抽象

抽象是 Rust 开发人员用来处理复杂代码的一个很好的工具。 一般来说,抽象带有运行时成本,因为抽象代码比特定代码更低效。 然而,通过好的语言设计和编译器优化,一些抽象可以使运行时成本有效地为零。 这些优化的通常来源是静态多态性(模板)和内联函数,两者都被Rust完全包含。 迭代器是通常使用的抽象(因而是大量优化)抽象的一个例子。Rust的迭代器提供了许多内置的组合器来操作数据序列,使程序的表达更加简洁。

    let data1 = &[3, 1, 4, 1, 5, 9, 2, 6];
    let data2 = &[2, 7, 1, 8, 2, 8, 1, 8];
    let numbers = data1.iter() // {3, 1, 4...}
                 .zip(data2.iter()) // {(3, 2), (1, 7)...}
                 .map(|(a, b)| a * b) // {6, 7, ...}
                 .filter(|n| *n > 5) // {6, 7....}
                 .take(4) // 总共取4个
                 .collect::Vec<_>();
    println!("{:?}", numbers);
复制代码

函数组合器(map, zip,filter之类)使用了闭包和匿名函数,如果compile natively(本地编译,是啥?)会有明显的运行开销,但是由于LLVM的优化,使用这个代码执行效率和手编版的一样。

    use std::cmp::min;
    let mut numbers = Vec::new();
    for i in 0...min(data1.len(), data2.len()) {
        let n = data1[i] * data2[i];
        if n > 5 {
            numbers.push(n);
        }
        if numbers.len() == 4 {
            break;
        }
    }
复制代码

转载于:https://juejin.im/post/5bc067a6e51d450e7b176f51

### Rust 编程语言学习教程完整指南 #### 什么是RustRust 是一种系统级编程语言,专注于安全性、并发性和性能。它通过所有权模型提供内存安全保证,在不使用垃圾回收器的情况下管理资源生命周期[^1]。 #### 安装Rust 要安装Rust,可以访问官方文档页面并按照说明操作。通常情况下,可以通过运行以下命令来完成安装: ```bash curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh ``` 这将下载并执行 `rustup` 脚本,它是用于管理和更新Rust工具链的主要工具[^2]。 #### 编写第一个Rust程序 创建一个新的文件名为 `main.rs` 并输入如下代码: ```rust fn main() { println!("Hello, world!"); } ``` 保存该文件并通过终端编译和运行这个简单的程序: ```bash rustc main.rs ./main ``` #### 变量和数据类型 在Rust中定义变量时,默认是不可变的。如果希望修改其值,则需显式声明为可变 (mutable) 使用关键字 `mut`。下面是一个例子展示如何声明不同类型的变量以及它们的作用范围: ```rust fn main() { let x = 5; // 不可变绑定 let mut y = 7; // 可变绑定 println!("The value of x is: {}", x); y += 1; println!("The new value of y is: {}", y); let z:i32 = 90_000; // 显式指定类型i32 println!("z has type i32 and its value is {}.", z); } ``` #### 函数 函数是一段被命名的代码块,可以在整个应用程序中的任何地方调用多次。这里有一个基本的例子展示了无参返回整数型数值的一个简单加法运算功能: ```rust fn add_two(a: i32) -> i32 { a + 2 } fn main(){ let num = 8; println!("{} plus two equals {}",num ,add_two(num)); } ``` #### 控制流 控制结构允许我们基于条件表达式的真假决定应该采取哪条路径继续执行下去。比如if语句就是最常用的分支逻辑之一: ```rust let number = 6; if number % 4 == 0 { println!("number is divisible by 4"); } else if number % 3 == 0 { println!("number is divisible by 3"); } else if number % 2 == 0 { println!("number is divisible by 2"); } else { println!("number is not divisible by 4, 3, or 2"); } ``` #### 所有权与借用机制 这是理解Rust核心概念的关键部分——即“所有权”。每一个值都有一个被称为其所有者的变量;当所有者超出作用域时,该值就会自动销毁释放所占用的空间。而为了共享同一个对象给多个使用者或者临时借出去供其他方法读取而不改变原始状态,“借用”便应运而生了. ```rust fn takes_ownership(some_string: String){ println!("{}", some_string); }// 这里some_string离开作用域并且drop掉内容 fn makes_copy(integer: i32 ){ println!("{}", integer ); }// 整形在这里复制而不是移动 fn main (){ let s=String::from ("hello "); takes_ownership (s ); let x=5 ; makes_copy(x ) ; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值