Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Rust 从入门到精通01-简介

Rust 从入门到精通01-简介

作者头像
IT可乐
发布于 2022-09-19 07:38:21
发布于 2022-09-19 07:38:21
8210
举报
文章被收录于专栏:IT可乐IT可乐

1、rust 从哪里来

Rust语言在2006年作为 Mozilla 员工 Graydon Hoare 的私人项目出现,而 Mozilla 于 2009 年开始赞助这个项目。第一个有版本号的 Rust 编译器于2012 年 1 月发布。Rust 1.0 是第一个稳定版本,于 2015年5月15日发布。

Graydon Hoare 是一个职业编程语言工程师,其日常工作就是给其他语言开发编译器和工具集,但是不会参与语言本身的设计,由于这种工作性质,他接触过很多编程语言,了解各种语言的优缺点。比如 c 和 c++,性能比较好,但是类型系统和内存都不太安全;一些拥有 GC 的语言,比如Java、golang、kotlin等,内存是安全的,但是性能却比较低。

于是 Graydon Hoare 萌生了自己开发一门语言的想法,这门语言就是 rust。

2、rust logo

Rust 的 logo 承载了创造者对该语言的期望:

①、Rust 这个单词是由 TrustRobust 组合而成,暗示了信任(Trust)和鲁棒性(或健壮性、Robust)。

②、Rust Logo 的形状与一种叫做锈菌的真菌相似,这种真菌生命力非常顽强,在其生命周期内可产生多达 5 种孢子类型,这 5 种生命形态还可以相互转化。也就是鲁棒性(健壮性)非常强。其 Logo 上面的 5 个小圆孔,与锈菌的 5 种生命形态相对应,也在暗示 Rust 语言超强的健壮性。

3、rust 是什么

在 rust 官网:https://www.rust-lang.org/ ,有这样一句醒目的话:

Rust 是一门赋予每个人构建可靠且高效软件能力的语言。

Rust 是一门系统级编程语言,有三大特点:

①、运行快

②、防止段错误

③、保证线程安全

4、rust 语言版本说明

rust 语言版本从三个不同的维度来讲,包括三个概念。

4.1 语义化版本

其格式为:主版本号.次版本号.修订号,依次用 句点 隔开。

简单说下语义版本号递增规则:

①、主版本号:当做了不兼容的 API 修改。

②、次版本号:当做了向下兼容的功能性新增。

③、修订号:当做了向下兼容的问题修正。

4.2 发行版本

https://github.com/rust-lang/rust/branches/all

①、master 分支:对于一个发行版本

②、beta 分支:对应 Beta 版本,也叫测试版本。

③、stable 分支:对应 Stable 发行版,也叫稳定版。

通常稳定版和测试版每 6 周 发布一次,一般来说,会先发布测试版,经过一段时间测试,在进行发行稳定版。

4.3 Edition 版次

可以看到每个通过 cargo工具(Cargo 是 Rust 的构建系统和包管理器,后面会详细介绍) 创建的 rust项目的 Cargo.toml文件。

版次的意义和语义化是正交的概念,方便rust自身的进化。目前rust有两个版次,分别是 rust2015 和 rust2018。

因为rust每6周发布一次新的语义化版本,版本更新迭代速度快,但是版次通常每 3 年发布一次,之所以存在版次和语义化两种概念,我们可以看这样一个例子:

例如添加可能与代码中的标识符冲突的新关键字,比如 ”async"和“await”,刚开始rust是没有异步的概念,后面我们要添加这两个关键词,但是旧代码可能会把这两个关键词当做变量名来使用,这时候如果只有语义化的概念,我们升级rust版本号,就会造成旧代码编译报错。但是增加了版次的概念就不同了,我们对于之前的代码编译方式选择之前的版次,新的代码编译方式选择新的版次,那么问题就解决了。

因此,如果你正在使用 Rust 2015,并且您的某个依赖项使用 Rust 2018,那么一切正常

开发者可以在 Rust 包管理配置文件 Cargo.toml 来配置 edition = "2018",表示依赖 2018 版次。

编译的时候可以通过:

Rustc --edition 2015|2018|2021

5、rust 能干什么

截止 2021 年,主流的互联网公司都把 Rust 纳入主力语言,比如开发操作系统 Redox/Fuchsia、高性能网络 Tokio、应用的高并发后端 TiKV,甚至客户端软件本身(飞书)。

Rust 除了在其传统的系统开发领域,如操作系统、设备驱动、嵌入式等方向高歌猛进之外,还在服务端高性能、高并发场景遍地开花。

图片截取《极客时间-陈天-rust编程第一课》

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Intel E810/ICE DPU RDMA 及MLX中断原理分析1(CE/AE)
一旦 E810 返回到 CEQE0,CEQE_Valid 位的极性就会切换,以避免软件需要为每个处理的 CEQE 返回并清除 CEQE_Valid 位(用极性位来提高处理效率)。
晓兵
2024/12/01
3950
Intel E810/ICE DPU RDMA 及MLX中断原理分析1(CE/AE)
Intel E810-iRDMA网卡-Linux内核驱动和用户态源码分析
用户空间直接访问 (UDA) 旨在以通用方式提供用户空间访问队列,但 E810 不支持此功能。 UDA 仅在内核中可用,并且仅限于 iWARP 连接设置和错误处理。 UDA 在用户空间中不可用
晓兵
2024/04/25
1.7K0
Intel E810-iRDMA网卡-Linux内核驱动和用户态源码分析
RDMA_verbs详解-修改队列对属性(ibv_modify_qp)-ceph-ucx-nccl-intel rdma驱动源码解析
QP上可变化的属性描述了QP的发送和接收属性。 在 UC 和 RC QP 中,这意味着将 QP 与远程 QP 连接。 在 Infiniband 中,应向子网管理员 (SA) 执行路径查询,以确定 QP 应配置哪些属性或作为最佳解决方案,使用通信管理器 (CM) 或通用 RDMA CM 代理 (CMA) 连接 QP。 然而,有些应用程序(如ceph)更喜欢自行连接 QP,并通过套接字交换数据来决定使用哪些 QP 属性。 在 RoCE 中,应在连接的 QP 的 QP 属性中配置 GRH,或在 UD QP 的地址句柄(Address Handle)中配置 GRH。 在 iWARP 中,应仅使用通用 RDMA CM 代理 (CMA) 连接 QP。 结构体: struct ibv_qp_attr 描述了队列对QP的属性:
晓兵
2024/02/24
9694
RDMA_verbs详解-修改队列对属性(ibv_modify_qp)-ceph-ucx-nccl-intel rdma驱动源码解析
RDMA的内存管理(IB内核管理用户态内存) - ib_umem
从内核模块暴露IB内存接口: ib_umem_get()/ib_umem_release() ,可让低级驱动程序控制何时调用 ib_umem_get() 来pin和 DMA 映射用户空间,该方案优于以前在调用 ib_uverbs_reg_mr 中的 reg_user_mr 前后的处理逻辑 。 还将这些函数移至 ib_core 模块而不是 ib_uverbs 中,以便使用它们的驱动程序模块不依赖于 ib_uverbs。 这具有许多优点:
晓兵
2024/11/17
4440
RDMA的内存管理(IB内核管理用户态内存) - ib_umem
RDMA - inline 内联提高小包性能-降低时延(减少两个 PCIe 往返延迟)
这篇文章描述了通过 PCI Express 结构在 CPU 和 NIC 之间发生的一系列协调事件,以通过 InfiniBand 互连传输消息并发出其完成信号。
晓兵
2024/06/16
1.1K0
RDMA - inline 内联提高小包性能-降低时延(减少两个 PCIe 往返延迟)
分布式存储_高性能RDMA网络_架构设计_性能调优参考_网卡排查命令_笔记
博客: https://logread.cn | https://blog.csdn.net/ssbandjl | https://cloud.tencent.com/developer/user/5060293/articles
晓兵
2023/11/03
4.9K0
分布式存储_高性能RDMA网络_架构设计_性能调优参考_网卡排查命令_笔记
RDMA - 通信库Libfabric的verbs实现(GDR概览)
Libfabric: https://github.com/ofiwg/libfabric.git
晓兵
2024/12/28
3190
RDMA - 通信库Libfabric的verbs实现(GDR概览)
Linux源码分析-RDMA的通信连接管理CM模块
RDMA CM 是一种通信管理器,用于设置可靠、连接和不可靠的数据报数据传输。 它提供用于建立连接的 RDMA 传输中立接口。 API 概念基于套接字,但适用于基于队列对 (QP) 的语义:通信必须通过特定的 RDMA 设备进行,并且数据传输基于消息。 RDMA CM 可以控制 RDMA API 的 QP 和通信管理(连接建立/拆除)部分,或者仅控制通信管理部分。 它与 libibverbs 库定义的 verbs API 结合使用。 libibverbs 库提供了发送和接收数据所需的底层接口。 RDMA CM 可以异步或同步操作。 用户通过在特定调用中使用 rdma_cm 事件通道参数来控制操作模式。 如果提供了事件通道,rdma_cm 标识符将报告该通道上的事件数据(例如连接结果)。 如果未提供通道,则所选 rdma_cm 标识符的所有 rdma_cm 操作将被阻止,直到完成。 RDMA CM 为不同的 libibverbs 提供商提供了一个选项来宣传和使用特定于该提供商的各种 QP 配置选项。 此功能称为 ECE(增强连接建立)
晓兵
2024/04/27
1.2K0
Linux源码分析-RDMA的通信连接管理CM模块
RDMA技术 - 请求事件SE(SOLICITED EVENT)-降低CPU开销
请求事件是一种机制,请求方发送消息,当响应方收到消息时,响应方会生成特殊(即请求的)事件。当工作完成添加到响应方(在接收队列中)的完成队列时,将为消息生成事件,因此它仅对发送(SEND)、立即发送(Send with immediate)和 RDMA 立即写入(Write with immediate)操作有效(因为只有这些操作会在响应方生成工作完成)
晓兵
2024/12/21
2460
RDMA技术 - 请求事件SE(SOLICITED EVENT)-降低CPU开销
Linux RDMA RXE/SoftRoCE 软件RoCE-内核驱动源码
rdma_rxe 内核模块提供 RoCEv2 协议的软件实现。 RoCEv2 协议是存在于 UDP/IPv4 或 UDP/IPv6 之上的 RDMA 传输协议。 InfiniBand (IB) 基本传输标头 (BTH) 封装在 UDP 数据包中。 创建 RXE 实例后,通过 RXE 进行通信与通过任何 OFED 兼容的 Infiniband HCA 进行通信相同,尽管在某些情况下会涉及寻址问题。 特别是,虽然 GRH 标头的使用在 IB 子网中是可选的,但对于 RoCE 来说是强制性的。 基于 IB 动词编写的动词应用程序应该可以无缝工作,但它们需要在创建地址向量时提供 GRH 信息。 修改库和驱动程序以提供硬件所需的从 GID 到 MAC 地址的映射
晓兵
2024/04/10
2.5K2
Linux RDMA RXE/SoftRoCE 软件RoCE-内核驱动源码
RDMA - GDR GPU Direct RDMA快速入门1
NVIDIA GPUDirect 是一系列技术, 用于增强 GPU间(P2P)或GPU与第三方设备(RDMA)间的数据移动和访问, 无论您是在探索海量数据、研究科学问题、训练神经网络还是为金融市场建模,您都需要一个具有最高数据吞吐量的计算平台。GPU 的数据处理速度比 CPU 快得多,随着 GPU 计算能力的提高,对 IO 带宽的需求也随之增加。NVIDIA GPUDirect®是Magnum IO的一部分,可增强 NVIDIA 数据中心 GPU 的数据移动和访问。使用 GPUDirect,网络适配器和存储驱动器可以直接读取和写入 GPU 内存,从而消除不必要的内存复制、减少 CPU 开销和延迟,从而显着提高性能。这些技术(包括 GPUDirect Storage(GDS)、GPUDirect RDMA(GDR)、GPUDirect 点对点 (P2P) 和 GPUDirect Video)通过一套全面的 API 呈现
晓兵
2025/03/30
9590
RDMA - GDR GPU Direct RDMA快速入门1
NCCL与RDMA和MPI基本框架源码分析
verbs:宽松排序内存区域,添加一个标志以允许创建宽松排序内存区域。 通过此类 MR 的访问可以通过允许系统对某些访问重新排序来提高性能。 由于宽松排序是一种优化,因此不支持它的驱动程序可以简单地忽略它。 可选的 MR 访问位范围是根据内核匹配部分定义的,其第一个条目将为 IBV_ACCESS_RELAXED_ORDERING。 如果应用程序使用可选范围中的一位,则库会将其屏蔽掉,以防内核不支持“MR 可选模式”, IBV_ACCESS_RELAXED_ORDERING 此设置允许 NIC 放宽在网络和目标内存区域之间传输数据的顺序。放宽排序允许网络发起的写入(例如传入消息发送或 RDMA 写入操作)以任意顺序到达内存。这可以提高某些应用程序的性能。但是,放宽排序具有以下影响:不再保证 RDMA 写入后写入消息的顺序。(发送消息仍将按顺序匹配已发布的接收缓冲区。)针对同一内存区域的背靠背网络写入使该区域处于未知状态。放宽排序不会改变完成语义,例如数据可见性。也就是说,完成仍然确保所有数据都是可见的,包括来自先前传输的数据。放宽排序的操作也不会绕过原子操作
晓兵
2025/02/06
4162
NCCL与RDMA和MPI基本框架源码分析
优化 RDMA 代码的建议和技巧-rdma性能优化技巧-避坑指南-RDMA资源
DMA 代表直接内存访问。这意味着应用程序可以在 CPU 干预的情况下直接访问(读/写)主机内存。如果您在主机之间执行此操作,它将成为远程直接内存访问 (RDMA)
晓兵
2023/12/19
2K2
优化 RDMA 代码的建议和技巧-rdma性能优化技巧-避坑指南-RDMA资源
RDMA技术 - Nvidia DPU_MLX5驱动手册 - 完成队列
HCA 实现完成队列,用于在工作请求完成后发布完成报告。本节讨论 CQ 的结构和操作。CQ 是一个包含以下实体的对象:
晓兵
2024/12/21
4040
RDMA技术 - Nvidia DPU_MLX5驱动手册 - 完成队列
RDMA - IB SPEC 错误检测和处理以及IntelE810异步事件源码分析
IBA 使用分层错误管理架构 (LEMA) 方法。每个级别负责检测和管理适合该层的错误,然后再将数据包或消息传递到堆栈中的下一层。因此,传输层会响应传输特有的错误,包括数据包头中的错误和无法正确传输消息。在传输层中检测到的错误会报告给传输的客户端。在本节中,传输层与其客户端之间的接口在概念上显示为发送或接收队列。对于 HCA,传输通过将完成代码写入完成队列 (CQ) 上的完成队列条目 (CQE) 来向其客户端指示错误。与往常一样,TCA 可以根据自己的需要自由报告错误(或不报告)。为了简化讨论,将分别讨论请求方和响应方的错误行为。这会导致以下部分中描述请求方和响应方错误的摘要表之间出现少量重复。具体而言,当响应方检测到错误并报告给请求方时,就会发生重叠。然而,这些重叠区域严格限于可靠的服务类别。请求者向其客户端报告的错误分为两类。
晓兵
2024/12/28
2772
RDMA - IB SPEC 错误检测和处理以及IntelE810异步事件源码分析
DAOS Mercury(HG) Libfabric(OFI) RDMA 分层verbs接口调用详解
参考之前的分享中, DAOS与RDMA分层关系如下图, DAOS引擎 -> CART(RPC/大块数据/集合RPC请求) -> Mercury(HG: RPC注册/回调/RPC操作/预期/非预期消息/大块消息/轮训/阻塞/网络抽象等) -> Libfabric(网络抽象层,对rxm,rdma verbs, socket, 共享内存等抽象) -> RDMA(verbs) -> rdma-core(用户态驱动) -> RDMA网卡硬件驱动(如:英伟达 mellanox迈络思), 今天咱们来探讨一下分层verbs接口调用详情
晓兵
2023/10/05
1.1K2
DAOS Mercury(HG) Libfabric(OFI) RDMA 分层verbs接口调用详解
RDMA - ODP按需分页设计原理-优点-源码浅析
HMM: 异构内存管理(Heterogeneous Memory Management)
晓兵
2024/06/14
7750
RDMA - ODP按需分页设计原理-优点-源码浅析
RDMA_verbs详解-ibv_reg_mr(注册内存)源码分析
博客: https://cloud.tencent.com/developer/user/5060293/articles | https://logread.cn | https://blog.csdn.net/ssbandjl | https://www.zhihu.com/people/ssbandjl/posts
晓兵
2024/03/23
1.5K2
RDMA_verbs详解-ibv_reg_mr(注册内存)源码分析
Intel E810网卡芯片架构简介及以太内核驱动初始化源码分析
E810 基于 100G 以太网控制器核心模块,该模块用于多种英特尔产品。图 1-1 说明了控制器核心逻辑与组成完整 E810 设备的 I/O 和支持功能之间的关系
晓兵
2024/12/14
5500
Intel E810网卡芯片架构简介及以太内核驱动初始化源码分析
RDMA 完成事件和异步事件_CE_AE
CE和AE一般与中断关联, 通过中断上报处理CE和AE, 这样可以降低CPU使用率(相对忙轮询(ibv_poll_cq)), 异步事件在非IO线程上处理事件, 正常情况下不影响IO路径
晓兵
2025/03/16
2110
RDMA 完成事件和异步事件_CE_AE
推荐阅读
相关推荐
Intel E810/ICE DPU RDMA 及MLX中断原理分析1(CE/AE)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档