当前位置: 首页 > news >正文

Rust简介

Rust融合了多种编程范式。 Rust最初被设计为系统编程语言,但随着发展,它已经成为了一门更加通用的编程语言,包括系统软件、网络服务、桌面应用程序、嵌入式等。

Rust的 借用检查器(borrow_ checker) 是它区别与其他基于C的语言的关键。它通过强制单一所有权原则促进安全编码。


函数式编程

函数式编程指的是以函数为基础构建块,在函数式编程中,函数被视为一等公民,你可以在任何通常使用变量的地方使用函数。

函数式编程的好处:

  • 更加灵活
  • 更加透明
  • 不变性,它通过消除函数内的常见副作用,使程序更容易维护

面向表达式编程

Rust也是一种支持表达式编程的语言,在表达式编程中,大多数操作是能返回一个值的表达式,而不是什么都不返回的语句。

  • 表达式 就是一个返回值且只产生很小副作用或没有的一个或多个操作
  • 语句 语句不返回值,但它们可以改变程序状态,

面向表达式编程的好处是:

  • 没有副作用,程序更容易维护
  • 更加透明,表达式的值完全由其接口定义
  • 易于测试,因为表达式是基于接口的
  • 更容易编写文档,在没有副作用的情况下,表达式甚至可以替代文档
  • 更易于组合

面向模式编程

专业的Rust编程通常涉及大量的模式,Rust使用match进行模式匹配。与C++/Java中的switch语句不同(字符串和整型表达式的单维度模式匹配),在Rust中模式匹配进一步扩展到用户自定义类型和序列的实例。

面向模式匹配编程有几个好处:

  • 表达力强,能够将复杂代码简化为更简单的表达式
  • 更全面,面向模式是对面向表达式编程的补充
  • 更可靠,支持穷举模式匹配,这样更可靠且不容易出错。

特性

一、安全性

  • 不可变性是默认行为,以防止意外更改
  • 强制检查生命周期的正确性,以防类型悬挂引用等反模式
  • 以引用的方式安全使用指针
  • 对于大小动态变化的资源,使用资源获取即初始化(RAII)策略进行可靠内存管理

二、所有权

所有权通过单一所有者原则保证安全的内存访问。这一个原则将变量指派给单一所有者,而且拥有不会有超过一个所有者。

三、生命周期

生命周期是Rust的一个重要特性,用于避免程序对已失效的数据进行访问,在Rust中,引用本质上也是指针。如果不加约束可以通过悬挂引用访问当已经被释放的内存区域,从而导致程序崩溃。Rust通过生命周期解决了这个问题。
借用检查器用来对生命周期的正确性进行检查,如果有错误的生命周期,则会编译错误,而生命周期标注是当生命周期存在歧义时开发者需要显式标柱的。

四、无畏并发

当程序从顺序过渡到并发时,通常会进行一个称为强化的过程,以确保多线程代码有安全运行环境,其中一个标准步骤是移除作为共享数据的全局变量,有了无畏并发后就不需要这个强化过程了。

五、零成本抽象

这是Rust中的一个重要特性,是Rust中各个特性都遵循的原则,即无必要就应避免在运行时带来性能上的损失。

Rust术语

  • crate,在rust中,crate是最基本的编译单元,常见分类有
    • 可执行crate: 一个独立于其他create运行的可执行二进制文件
    • 库crate: 一个库,包含一组功能,用于其他create使用,不能独立运行
    • 外部crate: 一个外部依赖项。比如crate A引用crate B,但B和A不在同一个包内,那么crate B就是外部crate。或者说依赖。
  • 包 一个包由多个crate(包括可执行和库)构成
  • 模块 类似于其他语言的命名空间,可以使用模块在一个crate中创建层次化的程序结构,mod也有助于避免名称冲突
  • Cargo 在Rust中有几个Cargo相关部分
    • Cargo.toml 描述了包,包括依赖项,版本,作者,描述,等等
    • Cargo.lock 描述了包依赖项和特定版本,Cargo会自动生成这个文件
  • .rs Rust源文件的扩展名

Rust工具

  • Rustup Rust安装程序,按照Rust以及整个工具链
  • cargo 多功能工具,主要功能是包管理,辅助功能是编译代码、格式化源代码和创建新的crate等
cargo new --lib mylib
  • rustc Rust语言编译器,可以将Rust源文件(.rs)编译成可执行文件或库
rustc source.rs
  • rustdoc 文档生成器,将Rust源文件中的文档注释编译成帮助文档,并将其输出为HTML格式
  • Clippy 综合测试工具
  • Rustfmt 将源代码转化为符合Rust风格指南的格式
  • rust-analyzer Rust语言服务器,提供智能提示、错误检查、代码补全等功能
http://www.dtcms.com/a/395794.html

相关文章:

  • golang和rust内存分配策略
  • 简历项目之无人机图像目标识别
  • pantherx2 armbian librga-rockchip librga.so 编译安装方法
  • 【精品资料鉴赏】189页工程车辆集团数字化转型SAP解决方案
  • 算法 --- 多源 BFS
  • 15.Linux 硬盘分区管理
  • 2.UE-准备环境(二)-下载虚幻引擎源码和搞成vs项目并使用vs打开
  • G-Star公益行获评CCF优秀技术公益案例,用开源技术传递善意
  • 文化赋能・创意西宁 西宁传媒行业创业发展沙龙成功举办 探索本土企业升级新路径
  • TDengine 与 MYSQL 的差异总结
  • Mysql杂志(二十一)——Hash索引和二叉搜索树、AVL树
  • 什么是类的实例化
  • 西门子 S7-200 SMART PLC 实操案例:中断程序的灵活应用定时中断实现模拟量滤波(下)
  • STM32FreeRtos入门(二)——创建第一个多任务程序
  • Qt QML and Qt Quick 简述及例程
  • Linux 系统移植
  • 小杰机器学习(six)——概率论——1.均匀分布2.正态分布3.数学期望4.方差5.标准差6.多维随机变量及其分布
  • 【Linux】Ext系列文件系统(上)
  • 【ROS2】Beginner: Client libraries - 发布者、订阅者例子 C++ Python
  • AI设计功能性病毒:从DNA语言模型到精准杀菌实战
  • Qt 共享指针QSharedPointer与std::shared_ptr
  • Java课程 第02周 预习、实验与作业:Java基础语法2:面向对象入门
  • 词性标注技术漫谈:为词语赋予语法灵魂的旅程
  • K230基础-MicroPython
  • 网站访问问题:无法访问此网站、404
  • Redis 与Memcached 的对比
  • PyTorch 神经网络工具箱:核心原理与实践指南
  • 广义矩估计错误指定时的一个推导【续5】
  • 【STM32】ADC数模转换器
  • Tensorboard学习记录