【Rust进阶】通过测试驱动开发学习:01_介绍

微软开源 windows-drivers-rs,用 Rust 开发 Windows 驱动程序 Microsoft Azure 首席技术官兼著名 Windows 软件开发人员 Mark Russinovich 在社交平台上宣布,启动了一个名为 windows-drivers-rs 的新开源项目。 阅读详情

1. Rust简介

1.1 什么是Rust

Rust是一种系统编程语言,注重安全性、并发性和性能。它具有内存安全性和零成本抽象的特性,使得编写高性能且可靠的软件变得更加容易。

1.2 Rust的特性

  • 内存安全性: Rust通过所有权系统和借用检查器,确保在编译时就能够避免内存安全问题。
  • 并发性: Rust通过所有权和线程安全的设计,支持轻松实现并发编程。
  • 零成本抽象: Rust允许高级抽象,但不会导致运行时开销。

2. 测试驱动开发(TDD)简介

2.1 什么是测试驱动开发

测试驱动开发是一种开发方法,要求在编写实际代码之前先编写测试。这有助于确保代码质量、提高设计灵活性,并促使开发者更早地考虑边缘情况。

2.2 TDD的步骤

  1. 编写测试: 针对要实现的功能编写测试用例,确保测试能够捕获所需的行为。
  2. 运行测试: 运行测试,确认当前没有实现的功能测试会失败。
  3. 编写代码: 实现足够的代码以使测试通过。
  4. 重构: 优化和重构代码,确保代码质量。

3. 实战

3.1 前置条件

在实战前,先要学会Rust的基础,可以通过官方提供的学习资源进行学习,资源在下面列出。

  1. 基本语法和数据类型: 熟悉Rust的基本语法、数据类型(如整数、浮点数、布尔值等)和基本操作符。

  2. 所有权系统: Rust的所有权系统是其独特之处,了解并熟练使用所有权、借用和生命周期是至关重要的。

  3. 模式匹配: 模式匹配是Rust中强大的功能,可以用于解构和匹配复杂的数据结构,理解和使用模式匹配对于写出清晰的、可维护的代码非常重要。

不需要很深入的了解,了解其概念,写法。我们会在实战的时候,加深你对这些概念的理解和使用,以及对Rust更深入的一些学习,如并发、泛型、生命周期、trait、Web开发。

3.2 为什么要实战

关于Rust的学习资源,官方已经提供了比较全面的,那为什么还要写一个关于实战的教程呢?

实战学习相较于传统的理论学习有许多优势,特别是对于编程语言和软件开发这类实践性强的领域:

  1. 直观理解概念: 实际动手操作能够帮助学习者更直观地理解和记忆概念。通过实战,你能够在实际项目中应用所学知识,更深入地理解语法和技术。

  2. 培养解决问题的能力: 实战中难免会遇到各种问题和挑战。解决这些问题的过程不仅是学习的一部分,同时也培养了解决问题和debug的技能。

  3. 更好的记忆: 通过实际项目,你会在解决实际问题的过程中反复使用所学的知识,这有助于加深记忆。

  4. 实时反馈: 实战学习中,你会得到实时的反馈,能够立即看到自己的代码是否正确运行,从而更迅速地纠正错误。

  5. 综合性学习: 实际项目可能涉及多个领域的知识,让你在综合性的项目中学到更多的东西,而不仅仅是语言的语法。

  6. 建立自信: 成功完成一个实际项目会增强你的自信心,鼓励你继续学习和挑战更复杂的问题。

  7. 准备职业发展: 实际项目经验是求职时的一大优势。雇主更倾向于雇佣有实际项目经验的候选人,因为他们能够更快上手并对实际工作有更深刻的理解。

3.3 项目说明

  1. 实战的项目数量不定,会持续添加一些日常用过的一些项目进去。
  2. 项目会从简到难,从小型到大型进行过渡。
3.4 项目列表(持续更新)
  1. 一个简单的链表库的实现

4. 测试

测试类型

在Rust中,单元测试和集成测试是两种不同类型的测试,用于验证代码的不同方面。以下是它们的主要区别:

单元测试(Unit Tests)
  1. 作用范围: 单元测试关注代码的最小单元,通常是一个函数、方法或模块。

  2. 测试对象: 单元测试独立地测试代码的各个部分,不涉及模块之间的交互。

  3. 位置: 单元测试通常与被测试的代码位于相同的文件中,与被测试代码处于相同的模块下。

  4. 使用场景: 单元测试旨在检查每个组成部分的行为是否符合预期,同时保持测试的快速执行。

  5. 命名规范: 单元测试通常使用 #[cfg(test)] 注解标记,并采用 #[test] 标记测试函数。

集成测试(Integration Tests)
  1. 作用范围: 集成测试关注多个模块或整个程序的交互,验证它们在一起能否正确工作。

  2. 测试对象: 集成测试通常涉及多个模块、甚至整个应用程序。

  3. 位置: 集成测试通常位于项目的 tests 目录下,与被测试的代码不同模块的代码处于不同的文件中。

  4. 使用场景: 集成测试旨在测试不同组件之间的集成和交互,确保整个系统的功能正确性。

  5. 命名规范: 集成测试不需要使用 #[cfg(test)] 注解,测试函数通常不用 #[test] 标记,而是通过测试文件的名称来识别。

总结
  • 单元测试注重测试代码的最小构建块,确保每个部分的功能正确。
  • 集成测试注重测试组件之间的协作,以验证它们在整个系统中的集成是否正确。

5. 学习资源

本文很多知识点的内容都是通过AI帮我组织创建生成的,在知识点的解释,文字的描述方面,我确实做的没有它好。

有一些项目也是基于网上的一些公开资源,如果涉及到了,我会标注出来,也感谢乐于把项目开源的大神们,正是他们,我们才能更好的学习Rust。

希望通过测试驱动开发学习Rust将帮助你建立对Rust语言的深刻理解,同时培养良好的编程实践。祝你学习愉快!

NVIDIA Nova内核驱动:用Rust重写GPU驱动的开源实践与编译指南 在Linux图形栈中,GPU内核驱动长期以C语言闭源二进制模块为主,开发者难以参与底层维护。随着内核基础设施的成熟,Rust语言凭借内存安全特性,为硬件驱动开发带来了新的工程范式。NVIDIA开源的Nova项目正是这一趋势的代表:它用Rust重写GPU内核驱动,面向Linux 7.x内核迭代,目标取代传统闭源nvidia模块与过渡性的nvidia-open模块。理解Nova的定位与编译流程,不仅有助于跟踪开源驱动的技术演进,也能帮助开发者在最新内核上自主验证GPU能力。本文从Nova在NVIDIA驱动生态中 阅读详情

相关推荐

AI对嵌入式的冲击分三波,大多数人只看到了第一波

摘要:AI对嵌入式行业的冲击将分三波递进:第一波(已发生)是代码生成,AI能完成底层驱动配置;第二波(1-2年内)是架构设计,AI将参与系统方案制定;第三波(2-3年)是需求验证,AI能穷举测试用例但无法替代安全决策。每波冲击都将重新定义工程师的价值标准,经验型工程师若不能将隐性知识转化为显性规则将面临淘汰。作者指出,完全不用AI的人第一波就会被淘汰,而仅满足于第一波应用的人将在后续冲击中落后。

u010898524的博客 961

11. Linux驱动 - Rust编写Linux驱动

Linux 中设备通常被分为三类,每个驱动模块通常实现为这三类中的其中一种: 字符设备。通常是指可以当作一个字节流来存取的设备(比如文件)。 块设备。通常是可以驻有文件系统的设备(比如磁盘),和字符设备类似,但块设备有一个请求缓冲区,因此它们可以选择响应请求的最佳顺序。 网络设备。通常是指能与其他主机交换数据的设备。 我们以编写一个简单的字符设备驱动为例,展示如何用 Rust 来编写内核驱动。 R4L 开发环境准备 为了方便,我们把 Rust for Linux 简称为 R4L。 首先,下载 Rust

笨笨D幸福 - 后花园 4551

从零构建机械臂规划栈:Pinocchio、OMPL与Ruckig的工程化融合实践

本文详细介绍了如何从零构建机械臂规划栈,通过融合Pinocchio、OMPL和Ruckig三大核心组件,实现高性能的机械臂运动规划与轨迹生成。文章深入探讨了技术选型、工程架构设计及实战优化技巧,特别针对逆解、路径规划和轨迹平滑等关键环节提供了实用解决方案,适用于工业场景中的高实时性需求。

weixin_29072299的博客 433

MogDB企业应用 之 Rust驱动

Rust是一门系统编程语言,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言。Rust在语法上和类似C++,但是设计者想要在保证性能的同时提供更好的内存安全。Rust已经逐步开始进入企业应用和操作系统的内核开发,之前听过几次openEuler SIG组的双周会,一些内核模块已经或即将使用Rust进行开发,虽然一些现代的开发语言现在还很难撼动传统的C/C++ 地位。但是像go和Rust已经开始在一些领域里面崭露头角。go的目标是取代C,而Rust则号称是C++ 的最佳接班人。

夏洛的克 855

增益调度控制 —— 理论、案例与交互式 GUI 实现

本文详细介绍了增益调度控制的基本原理、数学模型及公式推导,探讨了该方法在适应非线性系统和大范围工作条件下的优势与局限。通过航空飞行控制、发动机推力控制以及化工过程控制三个典型案例,我们展示了如何利用调度变量动态调整控制增益,从而使得控制系统在各个工作点均能达到优良性能。为帮助工程师和研究者更直观地理解并验证增益调度控制的实际效果,本文提供了一套基于 Python 与 PyQt6 的交互式 GUI 控制系统代码。用户不仅可以实时查看仿真数据,还能通过在线调节参数直观体验调度控制的优势。

闲人编程的博客 1480

PCL 逐点插入法构建Delaunay三角网(C++详细过程版)

点云构建Delaunay三角网的逐点插入法基于PCL点云库的C++详细过程版实现

点云侠的博客 2991

【Rust类型驱动开发 Type Driven Development】

type-diven development,即将开发者需要的逻辑约束条件编码到类型系统中,举个例子,一般业务逻辑下开发者通常需要检查输入的正确性,一般情况下开发者的思维惯性会在调用function的内部做一些逻辑判断,比如字符串长度是否符合条件,格式是否符合如人名,邮箱地址等等。类型驱动开发是将此类检查放在形成某一种类型的时候完成,即如果逻辑不通则不会形成需要的类型,同样的,类型驱动开发也具备一定的封装性,保证开发者不会因为误用而破坏流程的安全性和产生一些垃圾数据。

m0_37719524的博客 934

点云处理实操(四) -PCL中的点云三角化

点云处理实操(四) -PCL中的点云三角化

cangqiongxiaoye的博客 939

树莓派基于rust编写linux驱动模块

​ 最近一直在折腾rust编写linux驱动,这个是官方仓库。官方仓库提供了基本入门文档,也可以参考我之前的文章。网上也有一些,但是基本都是基于X86的。我这里提供一份基于嵌入式Linux的rust驱动编译模块模板:https://github.com/ZechariahZheng/rpi-linux-module-rust ​ 具体编译过程可以看项目中的README。 ​ 更多的例程在官方仓库中的sample/rust/目录下找到。 ​ 用rust写驱动的过程给我的感觉是,官方的例子不多,到头还是在重用C

ZechariahZheng 2100

SIMULINK开发项目实例 1000 例专栏之第802例--基于电机驱动系统的场景实例:永磁同步电机(PMSM)在电动汽车中的矢量控制仿真

随着全球对环境保护的关注增加,电动汽车(Electric Vehicle, EV)因其环保特性而受到广泛关注。永磁同步电机(Permanent Magnet Synchronous Motor, PMSM)由于其高效率、高功率密度和良好的动态响应性能,在电动汽车驱动系统中得到了广泛应用。矢量控制(Field-Oriented Control, FOC)是实现PMSM高性能控制的关键技术之一,它能够实现对电机转矩和磁场的独立控制,从而达到类似直流电机的控制效果。本文将详细介绍如何使用来构建一个。

xiaoheshang_123的博客 268

基于YOLOv8的野生菌菇检测、识别与分类系统

YOLOv8是YOLO系列模型的最新版本,继承了YOLO系列高效、精确的特点。YOLOv8采用了新的网络架构,并优化了推理速度和检测精度。与传统的目标检测算法(如Faster R-CNN)不同,YOLO模型通过一次前向传播同时完成目标定位与分类,因而具有非常高的计算效率。

YOLO 1284

终极Rust学习工具指南:如何高效完成100个Rust练习

想要学习Rust但不知道从何开始?100-exercises-to-learn-rust项目为你提供了一个完美的起点。这个循序渐进的自学课程通过100个精心设计的练习,帮助开发者从零基础掌握Rust编程。然而,选择合适的开发工具能让你事半功倍,本文将为你推荐最佳的Rust开发环境配置,让你在完成这些练习时更加高效顺畅。 ## 为什么需要专业的Rust开发工具? Rust作为一门系统级编程语言,

gitblog_00441的博客 923

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Command-Line Rust测试驱动开发:完整测试套件编写指南

Command-Line Rust是一个专注于使用Rust语言开发命令行工具的开源项目,通过测试驱动开发(TDD)方法构建可靠、高效的命令行应用。本文将详细介绍如何为Rust命令行工具构建完整的测试套件,帮助开发者掌握TDD流程和最佳实践。 ## 为什么选择测试驱动开发(TDD)? 测试驱动开发是一种先编写测试用例,再实现功能代码的开发方法。对于命令行工具而言,TDD带来三大核心优势: -

gitblog_00720的博客 926

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

100个练习掌握Rust编程:从零到精通的完整学习指南

想要学习Rust编程语言但不知从何开始?100-exercises-to-learn-rust项目为你提供了一条清晰的学习路径,通过100个循序渐进的练习,让你从Rust新手成长为能够独立编写程序的开发者。这个开源项目采用"边做边学"的教学方法,每个练习都精心设计,帮助你逐步掌握Rust的核心概念和实用技能。 ## 🚀 为什么选择这个Rust学习项目? **100-exercises-to-

gitblog_00766的博客 429

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

如何从零开始掌握Rust编程:100个实战练习的完整学习指南

想学习Rust编程但不知道从何开始?面对复杂的所有权系统和类型系统感到困惑?100-exercises-to-learn-rust项目为你提供了从零基础到中级水平的完整学习路径,通过100个精心设计的练习,让你在动手实践中真正掌握Rust编程的核心技能。 ## 🚀 从理论到实践的转变:为什么传统学习方法失败 很多Rust初学者都会遇到这样的困境:看懂了概念,但写不出代码;理解了语法,却无法解

gitblog_00496的博客 714

100个Rust练习终极指南:从零基础到精通的完整学习路径

想要系统学习Rust编程却不知从何开始?**100-exercises-to-learn-rust** 提供了一个循序渐进的学习路径,通过100个精心设计的练习帮助开发者从零基础到掌握Rust核心概念。这个开源项目采用"边学边练"的教学理念,让学习Rust变得简单而高效。 ## 📚 项目概览:结构化学习体验 **100-exercises-to-learn-rust** 是一个完整的Rust

gitblog_00269的博客 480

为什么选择Command-Line Rust:5个理由让你爱上Rust命令行开发

Command-Line Rust是一个基于项目的Rust命令行开发入门指南,通过构建实际工具帮助开发者掌握Rust编程。作为近年来Stack Overflow年度开发者调查中连续被评为"最受喜爱的编程语言",Rust不仅用于游戏引擎和操作系统开发,在命令行工具领域也展现出独特优势。 [![Rust编程语言标志](https://raw.gitcode.com/gh_mirrors/co/com

gitblog_00777的博客 715

如何通过100个练习快速掌握Rust编程:新手友好的实战指南

**100-exercises-to-learn-rust** 是一个精心设计的Rust学习项目,通过100个循序渐进的练习帮助开发者从零开始掌握Rust编程。无论你是刚接触系统编程的新手,还是希望系统学习Rust的开发者,这个项目都能为你提供一条清晰的学习路径。 ## 🚀 为什么选择"练习驱动"的学习方式? 传统的编程教程往往偏重理论讲解,而实际编码能力才是开发者最需要的技能。**100-

gitblog_01024的博客 634

100个Rust练习终极指南:从零到精通的完整学习路径

**100-exercises-to-learn-rust** 是一个革命性的Rust学习项目,通过100个循序渐进的练习帮助开发者从零基础快速掌握Rust编程。这个项目采用"边做边学"的教学方法,让你在实际编码中理解Rust的核心概念,无需任何Rust基础即可开始你的系统编程之旅。 ## 🚀 为什么选择100个练习学习Rust? 传统的编程教程往往理论过多而实践不足,导致学习效果大打折扣。

gitblog_00066的博客 426

终极Rust编程学习指南:如何通过100个练习快速掌握系统级编程

**100-exercises-to-learn-rust** 是一个精心设计的Rust编程学习项目,通过100个循序渐进的练习帮助开发者从零基础到熟练运用Rust进行系统级编程。这个项目采用"边学边练"的教学理念,让学习者在实践中逐步掌握Rust的核心概念和最佳实践。 ## 🎯 核心理念:从实践中掌握Rust编程 传统的编程学习往往停留在理论层面,而**100-exercises-to-l

gitblog_00584的博客 486

8个模块吃透Rust:100个练习的分阶段学习法

100-exercises-to-learn-rust 是一门自定进度的 Rust 学习课程:8 个模块共 100 个练习,每个练习都是带测试的独立 Cargo 项目。你不需要任何 Rust 基础,从语法基础一步步走到并发与异步,靠写代码而不是读长篇理论学会语言。适合从 Python、JS、C++ 转过来、想用最短路径系统上手 Rust 的开发者。 ## ⚙️ 跑起来之前的准备 你只需要 Ru

gitblog_01133的博客 150

Rust开发工具终极指南:3款IDE对比帮你轻松入门100个Rust练习

开始学习Rust编程时,你是否曾被琳琅满目的开发工具搞得眼花缭乱?作为一个Rust新手,选择合适的IDE和编辑器是成功完成"100-exercises-to-learn-rust"项目的关键第一步。在Rust开发工具的选择上,不同的IDE提供了截然不同的体验,从轻量级编辑器到功能完备的集成开发环境,每种工具都有其独特的优势。本文将为你详细对比三款主流的Rust开发工具,帮助你根据自身需求找到最适合

gitblog_00026的博客 644

如何通过100个Rust练习从零基础到项目实战:终极学习指南

**100-exercises-to-learn-rust** 是一个精心设计的Rust编程学习项目,通过100个循序渐进的练习帮助开发者系统掌握Rust语言。这个项目采用"边做边学"的方法,让学习者在实践中掌握Rust的核心概念和编程技巧。 ## 🎯 为什么选择这个项目学习Rust? Rust作为一门现代系统编程语言,以其**内存安全**、**高性能**和**并发安全**等特性受到广泛关注

gitblog_00650的博客 338

100个Rust练习终极指南:从零开始掌握系统编程的完整教程

**100-exercises-to-learn-rust** 是一个精心设计的Rust学习项目,通过100个循序渐进的实际练习,帮助开发者从零基础到掌握Rust编程语言。这个免费开源课程采用"边做边学"的教学理念,让每个学习者都能通过动手实践掌握Rust的核心概念和实用技能。 ## 🚀 为什么选择这个Rust学习项目? ### 结构化学习路径 与传统的教程不同,100-exercises-

gitblog_00069的博客 803

NPU部署指南:如何在神经处理单元上一步步跑通SmolLM2_rai_1.9.0_m_1.0.1_npu推理加速

本文带你用一套清晰的步骤,把 **SmolLM2_rai_1.9.0_m_1.0.1_npu** 这个小语言模型部署到 NPU(神经处理单元)上,实现大模型推理加速。全程不依赖 GPU,零基础也能跟着走完整个流程。 ## 📌 这个模型是什么? **SmolLM2** 是 Hugging Face 推出的超小型语言模型,参数量仅约 1.7B,体积小、跑得快,非常适合端侧和边缘设备部署。 而这

gitblog_00574的博客 850
下一篇: 【Rust进阶】通过测试驱动开发学习:02_项目搭建
SunsJay
博客等级 码龄6年 95粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值