- 博客(68)
- 收藏
- 关注
原创 Rust 编译优化选项
这样你可以在性能测试时仍保留符号信息,便于使用perf或flamegraph分析性能瓶颈。在大型工程中,自定义 Profile 能显著简化构建流程,使得性能优化与调试更加灵活。Rust 的编译优化选项,是连接“安全”与“性能”的桥梁。计算密集型应用嵌入式或体积敏感场景通用服务器端应用同时,Rust 的优化体系是渐进式的:你可以先通过 PGO(Profile-Guided Optimization)采样运行数据,再结合 LTO 与硬件特性调优,以实现“全流程优化闭环”。一句话总结。
2025-10-30 16:13:43
951
原创 Rust Profile-Guided Optimization 实践
PGO 是 Rust 性能优化中一项“低频但高效”的武器。长生命周期、性能关键的后端服务;数据规模和访问模式稳定的计算任务;对启动时间或 CPU 占用率有严格要求的程序。采样阶段的运行场景要尽量接近真实负载,否则优化方向可能偏离;对快速迭代的项目,PGO 的维护成本较高;并非所有程序都能从 PGO 中获益,I/O 密集型应用效果有限。一句话总结:PGO 让编译器“用数据指导优化”,是 Rust 性能调优中真正让“编译器变聪明”的一步。
2025-10-30 16:12:56
751
原创 Rust SIMD指令优化
Rust 通过std::arch和std::simd为 SIMD 编程提供了强大的底层控制与安全封装能力。与 C/C++ 的内联汇编不同,Rust 的 SIMD 编程仍保持了类型安全与内存安全的特性。在性能敏感场景(如科学计算、图像处理、深度学习推理、加密算法等),合理利用 SIMD 能带来数量级的性能提升。但同时,开发者也需权衡复杂度、可读性与跨平台兼容性。一句话总结:Rust 的 SIMD 编程,不只是性能的加速器,更是对系统性能与安全边界的精准掌控。
2025-10-30 16:11:20
897
原创 Rust 内存对齐与缓存友好设计
内存对齐和缓存友好设计是 Rust 高性能编程的基石。通过深入理解硬件特性,合理使用 Rust 的类型系统和内存管理能力,我们可以编写出既安全又高效的代码。关键在于根据实际访问模式选择合适的数据布局,在内存占用和访问效率之间找到平衡点。这需要测量、分析和持续迭代,但回报是实实在在的性能提升。
2025-10-30 16:09:20
814
原创 Rust 中的枚举与结构体
结构体和枚举是 Rust 类型系统的基石,它们各自表达不同的数据语义——结构体表达"并且",枚举表达"或者"。通过合理使用这两种类型,我们可以在编译时精确表达业务逻辑,让类型系统帮助我们捕获错误。掌握结构体和枚举的深层机制,理解它们与模式匹配、所有权系统的结合,是编写高质量 Rust 代码的必经之路。
2025-10-30 15:56:52
550
原创 Rust 中的方法与关联函数
方法和关联函数是 Rust 提供面向对象风格编程的核心机制。通过self参数的不同形式,方法精确表达了对实例的访问语义;通过关联函数,类型获得了命名空间和多样的构造方式。这些特性与 Rust 的所有权系统、trait 系统深度整合,提供了既安全又灵活的抽象能力。掌握方法和关联函数的设计模式,是编写符合 Rust 习惯的代码的重要一步。
2025-10-30 15:55:27
1022
原创 Rust 中的 trait 定义与实现
trait 是 Rust 类型系统的核心抽象机制,它通过定义行为而非继承关系实现多态和代码复用。通过默认实现、trait 约束、关联类型等特性,trait 提供了强大而灵活的抽象能力。理解 trait 的设计哲学和实现机制,是掌握 Rust 泛型编程、理解标准库、设计优雅 API 的基础。
2025-10-30 15:54:10
899
原创 Rust 泛型参数的实践与思考
Rust 的泛型系统是一个精心设计的整体,它通过零成本抽象、trait bounds、生命周期参数和型变规则的配合,实现了类型安全与性能的完美平衡。掌握泛型需要理解编译器的单态化过程、借用检查器的工作原理,以及类型系统的各种约束机制。在实践中,好的泛型设计应该遵循"让不正确的代码无法编译"的原则。通过精确的 trait bounds 和生命周期标注,我们可以在编译期捕获大量潜在错误。同时,要避免过度泛型化——并非所有代码都需要泛型,保持简单性和可读性同样重要。
2025-10-30 15:53:05
998
原创 Rust 闭包:定义、捕获(深入理解)
闭包是一种匿名函数,可以捕获其定义时上下文中的变量。println!// 输出 5与普通函数不同,闭包可以隐式推导参数与返回值类型,这种灵活性让它在迭代器链、并发任务或回调函数中更自然。编译器会为每一个闭包自动生成一个结构体类型,用来存储它捕获的变量。不捕获任何变量的闭包实现Fn;可变捕获的闭包实现FnMut;通过移动捕获的闭包实现FnOnce。Rust 的闭包不仅仅是“匿名函数”,它体现了 Rust 在所有权安全、类型推断与性能控制之间的精妙平衡。
2025-10-30 15:51:47
716
原创 Rust 中的注释与文档注释实践指南
注释与文档注释,是 Rust 代码质量的外在体现。普通注释记录“思考过程”,文档注释展示“设计结构”,两者共同构成了项目的知识基石。Rust 用工具化、系统化的方式,让注释不再是开发者的“良心工程”,而是一种被语言强制执行的质量保证。当我们在写下一行///时,不仅是在记录代码的功能,更是在为未来的自己与他人搭建理解的桥梁。
2025-10-30 15:50:33
778
原创 Rust 依赖管理与版本控制
Rust 的依赖管理体系是现代软件工程理念的一个缩影。它不仅解决了版本混乱、依赖地狱等老问题,更通过语义化版本控制、可重现构建与模块化特性管理,实现了“安全升级”与“可预测演进”的理想状态。在 Rust 世界中,依赖管理不只是技术细节,而是一种工程信任机制。它让每一个都是一种契约——对代码质量、版本稳定与协作精神的共同承诺。
2025-10-30 15:46:45
1005
原创 Rust 深入理解 cargo build 的编译流程
看似一个简单命令,却是 Rust 工程化能力的缩影。它隐藏了复杂的依赖解析、类型系统与 LLVM 优化细节,让开发者专注于逻辑本身。理解其内部流程,不仅能帮助我们更好地优化编译性能,也能深入体会 Rust “安全、确定、高效”的设计理念。每一次执行,其实都是一次从语义到机器的完整旅程。
2025-10-30 15:45:15
960
原创 Rust cargo run与cargo test命令
cargo run与cargo test并不仅仅是运行与测试的命令,更是 Rust 工程化体系的两大支柱。前者确保代码高效执行,后者保证逻辑可靠性。理解它们的工作机制,不只是掌握工具使用,更是理解 Rust 如何在语言层面实现“从源码到可验证软件”的闭环过程。这种一体化的理念,是 Rust 在现代系统编程语言中脱颖而出的根本原因之一。
2025-10-30 15:41:44
826
原创 Rust Workspace 构建多项目体系
Rust 的 Workspace 并不只是管理多个 crate 的手段,而是 Rust 工程化理念的体现——通过显式的结构化组织,实现可靠、可重现的系统构建。无论是个人项目还是企业级工程,Workspace 都能在项目演化过程中提供清晰的边界与高效的协作基础。它让我们从“编译一个程序”走向“管理一个系统”,这正是现代软件工程的核心方向。在掌握 Workspace 之后,Rust 不再只是一个语言,而成为一个可以支撑大型生态协同开发的完整工程平台。
2025-10-30 15:38:17
708
原创 Rust 中的控制流
Rust 的控制流设计将传统的控制结构提升到了新的高度。通过将控制流设计为表达式、与所有权系统深度整合、提供丰富的迭代器抽象,Rust 在保持代码清晰性的同时提供了强大的表达能力和安全保证。理解这些控制流结构的深层机制,是编写地道 Rust 代码的基础,也是充分利用语言特性的关键。
2025-10-30 10:42:59
992
原创 仓颉的设计基石:静态类型系统理念探析
静态类型的另一个巨大优势是性能。因为编译器在编译时就“知道”了所有数据的类型、大小和内存布局,它才能进行激进的优化(如内联、寄存器分配、消除动态派发)。仓颉追求的不是“抽象”,而是“零成本抽象这意味着我们编写高层抽象代码(如泛型、接口)时,不应该比手写底层的、具体实现的代码有任何运行时性能损失。当仓颉(推测)使用泛型List<T>时,如果T是一个struct(值类型),编译器很可能会采用**泛型特化(Momorphization)**。和List<Int>在编译后,会被生成为两份不同。
2025-10-29 18:09:22
853
原创 仓颉:Result 类型的错误处理模式
Result类型在仓颉中的应用,是一种深刻的编程范式革命。**显式化* API 签名必须“诚实”地反映所有可能的失败。错误不再是模糊的字符串或Exception,而是可被match的精确类型。通过?mapandThen,错误处理被无缝地编织进了业务逻辑的数据流中。在仓颉中,**错误处理不再是“事补”,而是“先验设计”**。这,就是构建“永不崩溃”的健壮系统的真正秘诀。加油!掌握了Result,你就掌握了仓JG仓颉安全编程的另一半江山!💪。
2025-10-29 18:06:46
636
原创 仓颉:内存布局优化技巧
仓颉作为一门着眼于未来的语言,它对内存布局的控制必然是深刻且安全的。它通过struct提供了数据局部性的基础,通过类型系统支撑了 SoA 这种高级模式,并通过Layout和Align等注解,提供了在专家手中解决 C FFI 和并发难题的“手术刀”。掌握这些技巧,真正做到“与硬件共鸣”(Mechanical Sympathy),是仓颉开发者从“能用”走向“精通”的必经之路。
2025-10-29 18:02:40
628
原创 仓颉的空安全基石:Option类型的设计与实践
Option<T>Option类型是仓颉(推测)空安全设计的核心。它绝不仅仅是一个“工具类”,而是一种设计思想的转变**明确性: 它强迫开发者在 API 层面就思考“值是否可能缺失”。它将“空指针”这个运行时炸弹,转变成了“None未处理”这个编译期错误。它通过mapandThen等 API,提供了强大而优雅的组合能力,让代码在处理复杂逻辑时依然保持极高的可读性和健壮性。在仓颉的世界里,我们不再需要战战兢兢地“防御”null;我们只需要相信编译器,它会引导我们写出绝对安全的代码。
2025-10-29 17:58:26
602
原创 仓颉技术探析:Union 类型的定义与应用实践
大家好!在探索仓颉语言特性的过程中,我们经常讨论它如何提升代码的安全性和表达力。今天,我们要深入探讨一个在我看来极具革命性的特性——Union 类型(联合类型)。在很多传统语言中,当我们想表达一个变量“可能是这几种类型之一”时,往往只能退而求其次:使用一个共同的父类、一个标记接口,甚至是万能的ObjectAny类型。过于僵化,需要设计一个(有时并不存在的)“共同基类”。仅是标记,无法携带“类型信息”,仍然需要丑陋的instanceof和强制类型转换。Any。
2025-10-29 17:54:31
810
原创 仓颉并发编程:Actor模型实现机制探析
简单回顾一下,Actor 模型的核心思想是“万物皆 Actor”。Actor 内部维护私有状态,外界绝对无法直接访问。Actor 之间通过异步发送消息进行通信,消息被放入接收方的邮箱队列中。Actor 依次处理邮箱中的消息,并根据消息内容更新自己的状态或向其他 Actor 发送新消息。无共享状态,自然无竞态条件。仓颉通过actor关键字,提供了一个远超“语法糖”的并发模型。它是一个由编译器静态保障和运行时高效调度共同构成的完整体系:1.通过严格的状态隔离检查,将并发错误在编译期就彻底消除。2.
2025-10-29 17:48:38
928
原创 Rust:借用检查器(Borrow Checker)的机制与实战
借用检查器曾被戏称为"编译器的暴君"(The Borrow Checker Tyrant),因为它会无情地拒绝任何不符合规则的代码。但随着 NLL 和未来 Polonius 的引入,它正在变得越来越智能、越来越"善解人意"。更重要的是,理解借用检查器的工作原理,不仅能让我们写出更好的 Rust 代码,还能让我们更深刻地理解"内存安全"和"并发安全"的本质。它不是在限制我们,而是在编译期就帮我们消灭了那些可能在运行时引发灾难的 bug。将痛苦前置到编译期,换取运行时的绝对安心。
2025-10-29 17:10:16
623
原创 Rust 深度解读:Rc 与 Arc 引用计数机制的权衡与实战
Rc和Arc是 Rust 在"单一所有权"之外提供的"共享所有权"工具。它们通过引用计数机制,让多个所有者可以安全地共享同一份数据,同时保持 Rust 的内存安全承诺。运行时开销:引用计数需要在堆上分配额外的内存,并在每次克隆或释放时修改计数器。循环引用风险:开发者必须小心避免循环引用,或使用Weak<T>来打破循环。不可变性限制Rc<T>和Arc<T>默认只提供不可变访问,需要结合RefCellMutex实现内部可变性。
2025-10-29 16:57:31
576
原创 Rust:借用分割 (Borrow Splitting)使用技巧与实战
借用分割(也常被称为“字段敏感的借用检查”)是 Rust 编译器的一项能力。它允许你在同一时间,对同一个struct的不同字段(Fields)进行独立的、互不干扰的借用。换句话说,编译器足够智能,它能够理解:即使你对进行了一个可变借用 (&mut),你仍然可以安全地对进行一个不可变借用 (),只要field_a和field_b是不相交 (disjoint)的。编译器不再是粗粒度地锁定整个struct,而是细粒度地分析到字段级别。
2025-10-29 16:49:30
754
原创 Rust 语法糖:if let 与 while let 的深度解析与实战
if let和while let是 Rust 送给开发者的两颗"小而美"的语法糖。它们让单一分支的模式匹配变得简洁优雅,让状态驱动的循环逻辑变得清晰直观。通过深入理解它们的使用场景、与迭代器的边界、以及在并发中的应用,我们不仅能写出更简洁的代码,还能更深刻地领悟 Rust"专注、安全、高效"的设计美学。下次在写match时发现只关心一个分支,或者在用loop处理迭代时感到繁琐,不妨试试if let和while let——它们会让你的代码更加 Rusty!
2025-10-29 16:42:55
809
原创 Rust 深度探索:匹配守卫 (Match Guards) 的精妙用法与所有权洞察
匹配守卫是在match的 的分支(arm)上附加的一个if条件语句。只有当pattern匹配成功并且if后面的condition(守卫) 表达式求值为true时,该分支才会被执行。("Found 7!🎉"),// 输出: Found 7!🎉匹配守卫 (Match Guards) 是 Rust 模式匹配工具箱中一把锋利的“解剖刀”。它允许我们在匹配“结构”的同时,优雅地附加“值”的逻辑判断。通过深入理解其**“先借用,后移动”**的所有权模型,我们不仅能写出更简洁、更扁平、可读性更高的match。
2025-10-29 16:32:16
1116
原创 2025年 VS Code远程连接Remote SSH错误(完美解决)
此外,在设置里要禁止VS Code的自动更新。以及插件里禁止Remote-SSH 的自动更新。安装旧版本VS Code,并安装旧版本Remote SSH插件 即可解决问题。通过上面步骤,就可以完美解决VS Code远程链接服务器报错的问题。希望微软尽快修复该问题,最新版的VS Code还是有很多功能的。(2)把 Remote-SSH 插件回退到 版本。版本VS Code客户端的链接。,这个版本比较稳定。
2025-10-29 16:09:53
993
原创 Overleaf编译超时,超出免费计划编译时限(已解决)
解决办法:选取快速(draft) 模式,即可成功编译出不带图片的文字版PDF,然后再更改为常规模式,重新编译即可完全显示带图片的完整版PDF。使用Overleaf进行论文修改时,突然遇到“您的编译超时,您的项目超过了我们的免费计划编译时限。
2025-09-27 21:04:33
2367
2
原创 (手把手教你跑通)Faster-RCNN训练自定义COCO数据集(模型对比必备)
2.2 环境配置MMDetection是基于Pytorch框架实现的,需要安装torch。可以使用之前配置的YOLO环境, 除此之外,还需要安装,和2.3数据集准备MMDetection支持训练VOC和COCO两种格式数据集,我这里使用的是COCO格式。如果没有COCO格式数据集,可以参考这篇文章,将YOLO格式的数据集转化为COCO格式。[YOLO转COCO数据集]└─datasets└─COCO└─val2017├─002.jpg└─....jpg。
2025-08-16 15:35:21
1112
原创 (论文阅读)FedViT:边缘视觉转换器的联邦持续学习
(北京理工大学-2023年发表于《Future Generation Computer Systems》中科院二区)•提出一种轻量级的客户端联合持续学习方法。•通过将签名任务的知识整合到客户端上,防止灾难性遗忘。•减少负面知识转移,无需频繁与服务器通信。•理论上保证了我们方法更快的训练收敛。•适用于多任务、多客户端、多ViT的场景。
2025-08-16 15:32:20
1385
原创 Elsevier爱斯维尔期刊Latex模板使用APA标准格式参考文献
使用Elsevier爱斯维尔期刊Latex模板进行论文排版时,有些期刊需要用APA格式的Author-Year格式的参考文献,本文将教你如何设置才能正确使用APA格式的参考文献。其中reference代表reference.bib文件,里面存放的是本文所有的BibTex文本格式的参考文献。\citep{} 和 \cite{}有细微的区别,主要就是引用处括号的位置是否将作者括起来。其中,\citep{smith2020}代码表示插入smith2020这篇参考文献。3.结尾加入下面代码。
2025-07-24 15:56:14
959
原创 (保姆级)Windows11安装GPU版本Pytorch2.3、CUDA12.6
可以看到我这个电脑CUDA版本是11.1,驱动版本是457.51,比较低,与最新的Pytorch不适配,因此需要安装高版本的驱动和CUDA。下滑找到V2.3.1或其他版本,如下图所示,找到Windows版本的,CUDA版本选择12.几的,复制这行命令。打开Anaconda Prompt,输入: nvidia-smi命令,查看目前电脑的驱动版本和CUDA版本。中可以查看不同CUDA版本对应的驱动版本,我这里安装CUDA12.6,最低的驱动版本是560.76。在命令行输入一下代码,正常输出内容即为安装成功。
2025-07-20 10:22:17
1265
原创 Jetson Xavier NX安装CUDA加速的OpenCV
我们使用SDKManager刷机完成后,使用jtop查看,发现OpenCV 是不带CUDA加速的,因此,我们需要安装CUDA加速的OpenCV,这样后续在使用的时候速度会快很多。
2025-03-10 16:47:24
985
1
原创 Jetson Xavier NX 刷机SDKManager全流程(详细小白必看)
系统烧录完毕后,将SSD固态硬盘插入Jetson中,并将存储在eMMC中的系统迁移至SSD中,设置从SSD启动系统。在此过程中,弹出如下界面,忘记截图了,(找的网图),选择USB、其他都不需要改变,输入jetson的账户和密码即可。将jetson的跳线帽去掉,usb线继续连接虚拟机,打开sdkmanager,这次选择其他组件,不选择os。首先进入jetson刷机后的系统,找到disk磁盘工具,找到插入的ssd硬盘,格式化,然后进行分区。(2)之前板子有系统,但是系统有点旧,版本老,不适用于目前的主流模型。
2025-03-10 16:34:53
2702
5
原创 YOLOv11改进-添加自适应阈值焦点损失ATFL函数(解决类别不平衡)
焦点损失(Focal Loss)的核心思想是对那些容易分类的负样本减少损失权重,增强难分类样本的损失。ATFL扩展了这一机制,使得不同难度的样本能够根据自适应的阈值进行不同的损失加权,从而提高训练的效果。在数据中某些类别样本较少或较难分类时,ATFL会自动增强对这些类别的关注,从而改善模型的性能,特别是在目标检测、分类任务中应用时。:通过动态调整阈值,ATFL不仅可以减少对易分类样本的过度训练,还能加强对困难样本的训练,从而提升模型在难样本上的性能。添加完毕后,保存,正常进行训练即可调用ATFL损失。
2025-01-03 11:38:47
1714
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅