Mkdir700's Note

Mkdir700's Note

Rust

Rust 项目中解决依赖重复编译问题:以 objc2 为例

在开发桌面剪贴板同步应用(UniClipboard)时,遇到了一个令人蛋疼的问题:即使只修改一些与 objc2 库完全无关 的代码,每次构建时 Rust 编译器仍然会重新编译 objc2 库,这严重影响了开发效率。 问题描述 该应用是一个基于 Tauri 的跨平台桌面应用,使用 Rust 作为后端。
237
0
1
2025-03-29

Rust 中优雅地实现类型转换:从自定义方法到通用 trait

在 Rust 开发中,我们经常需要在不同类型之间进行转换。最近在开发过程中,我遇到了一个优化类型转换代码的问题。 问题背景 我的项目中有一个从 Payload 和路径创建 ClipboardMetadata 的功能。最初是通过自定义静态方法实现: impl ClipboardMetadata {
182
0
0
2025-03-28

Rust 异步线程安全问题解析与修复

问题概述 在 Rust 异步编程中,一个常见的错误是在持有 Mutex 锁的情况下使用 .await,这会导致编译错误: future cannot be sent between threads safely the trait `std::marker::Send` is not impleme
267
0
0
2025-03-16

Tokio:为什么异步互斥锁比同步互斥锁更"昂贵"

The feature that the async mutex offers over the blocking mutex is the ability to keep it locked across an .await point. This makes the async mutex mo
181
0
0
2025-03-15

Tokio:应该使用哪种 mutex?

Mutex是一种同步原语,用于保护共享数据。标准库互斥锁会阻塞线程,而异步互斥锁会挂起当前任务而不会阻塞整个线程。标准库互斥锁不安全地跨越.await点持有锁,可能导致死锁,而异步互斥锁设计可以跨越.await点持有锁。标准库互斥锁性能开销较小适合短时间持有,而异步互斥锁由于支持异步操作性能开销较大适合需要执行异步操作的场景。最佳实践是默认选择标准库互斥锁,除非有特殊需求,还应考虑包装模式和对于IO资源使用专门的管理任务。Tokio与Rust相关。
238
0
1
2025-03-15

解决在 Windows 上 openssl-sys 构建失败的问题

问题 在 Windows 下构建时抛出了下方错误,意思就是缺少 OpenSSL 这个玩意儿,如果在 Linux 平台直接用包管理工具安装就 OK 了,但是在 Windows 平台则需要手动操作。   OPENSSL_DIR unset   note: vcpkg did not find opens
Tec
1074
0
0
2024-09-16
解决 Rust 测试中的并行执行冲突:保护共享资源的策略

解决 Rust 测试中的并行执行冲突:保护共享资源的策略

在 Rust 开发中,测试是确保代码质量的关键环节。然而,并行执行测试可能导致共享资源冲突。解决方案包括使用 serial_test crate 标记应该串行执行的测试、使用互斥锁控制资源访问、创建独立的测试环境隔离测试、使用测试模块和一次性初始化减少重复代码以及使用 #[ignore] 属性分离问题测试。选择合适的策略取决于具体需求和项目结构,但重要的是意识到并行测试可能带来的问题,并采取适当措施确保测试可靠性。
Tec
126
0
0
2024-09-13