
Rust
文章平均质量分 55
Rust 程序设计入门与应用。
许野平
非常喜欢软件设计这份工作,有不错的数学基础,喜欢读书、摄影与音乐。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Rust:如何开发32位的DLL动态库
这篇教程演示了如何用Rust创建32位DLL并在C++中调用。主要步骤包括:1)添加32位工具链;2)配置Cargo.toml为cdylib;3)实现导出函数(DllMain、calculate、to_uppercase等);4)处理跨语言内存管理;5)编译为32位DLL。配套提供了C++测试代码,展示如何加载DLL、调用函数并处理回调。关键点包括使用no_mangle标记导出函数、正确内存管理约定以及32位兼容性。原创 2025-08-04 09:33:38 · 679 阅读 · 0 评论 -
Rust: 获取 MAC 地址方法大全
Rust中获取MAC地址需使用第三方库如mac_address,标准库不提供此功能。文章详细展示了多种方法:获取所有/特定接口MAC地址、过滤虚拟接口、格式化输出,并处理跨平台兼容性问题(Windows/macOS/Linux)。还包括错误处理、重试机制和实用函数如MAC地址验证。代码示例涵盖基础到高级用法,如通过注册表获取Windows MAC地址、自定义错误类型等,为不同场景提供全面解决方案。原创 2025-08-03 19:13:15 · 387 阅读 · 0 评论 -
Rust 同步方式访问 REST API 的完整指南
Rust同步访问REST API简明指南 本文介绍了使用Rust以同步方式访问REST API的完整方案。内容涵盖: 核心依赖:推荐使用reqwest的blocking特性配合serde进行JSON处理 基本请求:包括GET获取文本/JSON数据,以及POST发送JSON/表单数据 高级功能:请求头设置、超时控制和分页处理 错误处理:自定义错误类型的最佳实践 同步方案特别适合简单应用和脚本场景,避免了异步编程的复杂性,同时仍能提供完整的API访问能力。文中包含可直接使用的代码示例,展示了从基础到进阶的各种A原创 2025-08-03 18:53:49 · 414 阅读 · 0 评论 -
Rust:如何访问 *.ini 配置文件?
Rust INI 文件处理摘要 Rust 提供了 configparser 和 ini 两个主流库处理 INI 文件: configparser (功能全面) 支持自动类型转换 (getint/getbool) 完整的注释处理 多行值支持 提供默认值机制 ini (轻量高效) 更简洁的 API 基本注释保留 自定义分隔符支持 性能更优 典型用法包括: 读写键值对和节(section) 处理注释和多行值 类型安全转换 错误处理 推荐根据项目需求选择: 复杂配置用 configparser 简单场景用 ini原创 2025-08-03 14:33:29 · 244 阅读 · 0 评论 -
Rust:神奇的 anyhow 自动错误类型转换
anyhow库通过Rust的trait系统和?运算符实现自动错误类型转换。其核心机制包括:1) anyhow::Result固定错误类型为anyhow::Error;2) Error类型作为错误容器,通过From trait自动转换实现了std::error::Error的错误类型;3) ?运算符根据返回类型自动调用转换逻辑。该设计还支持错误上下文扩展,通过Box<dyn Error>实现类型擦除,但需注意仅适用于实现了Error trait的类型,且存在堆分配开销。这种机制大幅简化了错误处理代原创 2025-08-03 14:15:20 · 251 阅读 · 0 评论 -
Rust:开发 DLL 动态链接库时如何处理 C 字符串
本文详细介绍了Rust开发DLL时处理C字符串与Rust String相互转换的安全方法。主要内容包括:1)将C字符串(const c_char)安全转换为Rust String;2)将Rust String转换为C可用的mut c_char指针;3)完整DLL示例与C调用方式;4)高级技巧如错误处理、多字节编码转换和复杂数据结构返回。重点强调了内存安全、所有权管理和错误处理,提供了空指针检查、线程安全等最佳实践,并警告了常见陷阱。最后建议使用cbindgen自动生成头文件,确保跨语言调用的安全性。原创 2025-08-03 13:05:02 · 637 阅读 · 0 评论 -
Rust:如何开发Windows 动态链接库 DLL
Rust创建Windows DLL动态库的完整指南 本文详细介绍了使用Rust创建兼容C的Windows DLL动态库的全过程: 项目配置 通过cargo new --lib创建项目 在Cargo.toml中设置crate-type = ["cdylib"] 添加windows crate依赖项 核心实现 使用#[no_mangle]和extern "C"确保函数导出兼容性 演示了基本数值运算、字符串处理和结构体操作 提供了必须的字符串内存管理函数 编译与调用 使用c原创 2025-08-03 10:51:25 · 285 阅读 · 0 评论 -
Rust: 工具链版本更新
摘要: 解决 cargo build --release 因 Rust 工具链版本过低(如 1.78.0)导致依赖不兼容(如要求 ≥1.82.0)的问题,提供三种方案: 升级工具链(推荐):执行 rustup update 升级至兼容版本(如 1.83.0),一劳永逸; 降级依赖(临时方案):通过 cargo update 或修改 Cargo.toml 指定旧版本依赖,但需逐项验证兼容性; 锁定工具链版本:通过 rust-toolchain 文件指定高版本 Rust。 建议优先升级工具链,避免降级 ICU原创 2025-08-02 12:25:16 · 498 阅读 · 0 评论 -
Rust:anyhow::Result 与其他 Result 类型转换
Rust中处理不同Result类型的方法总结:1. 显式转换:用map_err将其他错误转为anyhow::Error;2. 自动转换:为自定义错误实现From以支持?操作符;3. 统一类型:用Box<dyn Error>或直接返回anyhow::Result来兼容异构错误。关键建议:优先使用?自动传播错误,需定制错误时结合map_err或From实现,第三方库错误可通过装箱或实现From来整合。最终保持错误处理简洁统一,同时支持添加上下文信息。原创 2025-07-29 17:46:43 · 684 阅读 · 0 评论 -
Rust:高效错误处理工具 anyhow
Rust的anyhow库简化了应用程序的错误处理,通过统一错误类型和便捷API减少模板代码。核心功能包括:1) 使用anyhow::Result统一错误类型;2) 通过Context添加错误上下文信息;3) 自动错误传播;4) 提供bail!快速返回错误等实用工具。与thiserror相比,anyhow更适合应用程序开发,而thiserror更适用于库开发。典型用法结合文件操作和错误链式处理,显著提升代码可读性和调试效率。最佳实践建议应用开发优先使用anyhow,敏感场景避免泄露信息。原创 2025-07-29 17:17:08 · 659 阅读 · 0 评论 -
Rust:如何动态调用字符串定义的 Rhai 函数?
在 Rust 中使用 Rhai 脚本引擎时,你可以动态地调用传入的字符串表示的 Rhai 函数。Rhai 是一个嵌入式脚本语言,专为嵌入到 Rust 应用中而设计。以下是一个基本示例,展示了如何在 Rust 中调用用字符串传入的 Rhai 函数。结构体来存储函数名和参数,然后构建了一个临时的 Rhai 脚本,该脚本根据函数名和参数数量调用相应的 Rhai 函数。这种方法提供了更大的灵活性,但也更复杂,并且需要处理更多的错误情况。一个更健壮的方法是使用 Rhai 的。在这个更通用的示例中,我们定义了一个。原创 2025-01-26 19:04:40 · 868 阅读 · 0 评论 -
Rust:Rhai脚本编程示例
这个示例展示了如何在Rust中使用Rhai执行简单的脚本,并访问脚本中的函数和变量。你可以根据需要扩展这个示例,添加更多的Rhai脚本功能,或者将Rhai集成到你的Rust应用程序中以实现更复杂的动态脚本支持。当然,以下是一个简单的Rhai脚本编程示例,展示了如何在Rust中使用Rhai执行脚本。接下来,你可以编写一个Rust程序来执行Rhai脚本。首先,你需要确保你的Rust项目中包含了。原创 2025-01-26 18:45:00 · 678 阅读 · 0 评论 -
在Rust应用中访问.ini格式的配置文件
在Rust应用中访问.ini格式的配置文件,你可以使用第三方库,比如ini或config. 下面是一个使用ini库的示例,该库允许你读取和解析.ini文件。原创 2025-01-25 16:21:03 · 660 阅读 · 0 评论 -
Rust:指针 `*T` 和引用 `&T`的区别
是一个安全、受 Rust 借用检查保护的不可变引用类型。在编写 Rust 代码时,应优先考虑使用安全的引用类型。是两种不同类型的指针,它们各自代表了不同的内存访问方式和所有权模型。,并始终注意确保内存安全性和避免潜在的未定义行为。是一个原始、不安全的指针类型,而。,只有在确实需要时才使用原始指针。在 Rust 编程语言中,原创 2025-01-15 19:10:55 · 800 阅读 · 0 评论 -
Rust:运行调用 Lua 脚本
此外,如果你需要运行异步Lua代码,可以考虑使用rlua-async库。然后,在你的Rust代码中,可以使用rlua模块(假设rust-lua库在Cargo中注册的名称是rlua,实际使用时请确认)来运行Lua程序。请注意,由于rust-lua库的具体实现和API可能会随着版本的更新而发生变化,因此在实际使用时,请务必参考该库的最新文档和示例代码。并调用它来打印结果。最后,我们通过调用Lua函数来计算两个数字的和,并将结果打印出来。首先,确保你的Rust项目中已经添加了rust-lua库的依赖。原创 2025-01-06 18:20:11 · 748 阅读 · 0 评论 -
Rust: enum 和 i32 的区别和互换
在Rust编程语言中,enum(枚举)和i32是两种不同类型的数据结构,它们各自有不同的用途和特性。i32是一个32位的有符号整数类型。它用于存储整数值,范围从-2,147,483,648到2,147,483,647。i32是Rust中的基本数据类型之一,广泛用于需要整数运算的场景。enum。原创 2024-12-25 17:42:17 · 788 阅读 · 0 评论 -
Rust:AtomicI8 还是 Mutex<u8>?
提供的原子操作(如加载、存储等)在硬件层面得到支持,这些操作是不可分割的,即一旦开始执行,就不会被其他线程的操作打断。如果需要在多个线程之间安全地传递复杂的数据结构或进行复杂的同步操作,那么可能需要考虑使用更复杂的并发控制机制(如锁、条件变量等)。综上所述,虽然AtomicI8在理论上可以用于高并发场景,但其在高并发下的性能可能受到多种因素的影响。)在理论上是可以用于高并发场景的,但其在高并发下的性能可能不如位宽更大的原子类型或某些锁机制。在选择时,应根据具体的应用需求和性能要求来做出合适的选择。原创 2024-11-17 18:09:01 · 1083 阅读 · 0 评论 -
Rust:原子操作 AtomicBool
在 Rust 中,你可以使用 std::sync::atomic 模块来进行原子操作。Ordering::Relaxed 表示内存排序约束较弱,适用于不需要严格排序的场景。Ordering::SeqCst:顺序一致性,最强的排序约束,确保所有线程以相同的顺序看到操作。在原子操作中,内存排序 (Ordering) 决定了操作的内存可见性和顺序。Ordering::Relaxed:最弱的排序约束,适用于不需要严格排序的场景。选择适当的内存排序约束可以提高性能,但也要确保满足你的并发需求。再次读取值以确认更改。原创 2024-11-17 17:13:30 · 788 阅读 · 0 评论 -
Rust: 原子操作大全
Rust 的原子操作主要通过模块提供。这些原子操作对于多线程编程至关重要,因为它们能够确保操作的原子性和内存可见性,从而避免数据竞争和其他并发问题。原创 2024-11-17 17:12:21 · 1349 阅读 · 0 评论 -
Rust:GUI 开源框架
在选择Rust的GUI代码包时,建议根据自己的项目需求、目标平台、性能要求以及个人偏好来进行选择。每个库都有其独特的优点和适用场景,选择最适合自己的库可以大大提高开发效率和应用程序的质量。Rust的GUI代码包有多个选择,每个都有其独特的特点和优势。原创 2024-11-11 19:38:06 · 1068 阅读 · 0 评论 -
Rust:启动与关闭线程
在 Rust 编程中,启动和关闭线程是并发编程的重要部分。Rust 提供了强大的线程支持,允许你轻松地创建和管理线程。下面将详细解释如何在 Rust 中启动和关闭线程。原创 2024-11-08 17:59:05 · 933 阅读 · 0 评论 -
Rust: 利用 chrono 库实现日期和字符串互相转换
在 Rust 中,日期和字符串之间的转换通常涉及chrono库,这是一个功能强大的日期和时间处理库。以下是如何在 Rust 中将日期转换为字符串以及将字符串转换为日期的示例。首先,你需要在你的Cargo.toml文件中添加chrono然后,你可以在你的 Rust 代码中使用chrono库来进行日期和字符串之间的转换。原创 2024-11-07 17:12:11 · 819 阅读 · 0 评论 -
Rust: 加密算法库 ring 如何用于 RSA 数字签名?
本来用 rsa 库基本搞定,但文心一言建议改用 ring 库。原因是 rsa 库已经放弃维护,而 ring 库性能公认很好。但是如何进行 RSA 数字签名,网上几乎查不到这方面材料。仔细查看了 ring 库的源代码和代码注释,终于完成趟坑。总结一下供大家参考。原创 2024-10-31 21:32:11 · 1865 阅读 · 0 评论 -
Rust:Vec<u8> 与 [u8] 之间的转换
在 Rust 中,Vec是一个动态数组,而&[u8]是一个指向字节切片的不可变引用。这两者之间经常需要进行转换,因为它们在处理字节数据时非常常见。原创 2024-10-31 15:01:24 · 1052 阅读 · 0 评论 -
Rust:文档注释 //! 和 ///
是 Rust 的官方文档生成器,它可以从源代码中的这些文档注释生成 HTML 或 Markdown 格式的 API 文档,这对于项目的维护和向其他开发者展示 API 非常有用。是一种特殊的文档注释(documentation comment)。它用于为整个模块、结构体、枚举、函数或其他项提供文档说明。(用于紧跟在项之前的文档注释)会被 Rust 的文档工具。生成文档时,这段注释会出现在模块的文档中。注释为整个模块提供了文档说明。捕获,并用于生成 API 文档。在 Rust 编程语言中,原创 2024-10-30 12:14:14 · 532 阅读 · 0 评论 -
Rust:设计 gRPC 客户端
在 Rust 中编写 gRPC 客户端,你可以使用tonic库,它与 gRPC 协议兼容,并提供了方便的 API 来创建客户端。以下是一个简单的步骤指南,教你如何使用 Rust 编写一个 gRPC 客户端。原创 2024-10-28 12:19:29 · 899 阅读 · 0 评论 -
Rust:如何设计 gRPC 服务器
gRPC 使用 Protocol Buffers 定义服务和消息。创建一个.proto文件,例如。原创 2024-10-28 12:09:15 · 730 阅读 · 0 评论 -
Rust: [u8] 与 String 相互转换
使用将有效的 UTF-8 字节数组转换为String。使用将可能不是有效 UTF-8 的字节数组转换为String,但会替换无效字节。使用获取&[u8]切片。使用将String转换为Vec。这些方法应满足你在 Rust 中处理String和[u8]相互转换的大部分需求。原创 2024-10-23 15:47:39 · 904 阅读 · 0 评论 -
Rust: AES 加密算法库
在Rust中,进行AES加密通常会用到一些现有的库,因为Rust标准库中并不直接提供AES加密的API。使用这些代码,你可以开始在你的Rust项目中实现AES加密。确保你理解每个步骤的安全性和性能影响。请注意,版本号可能会随着时间推移而更新,请查看最新的crates.io信息。库已标记为不再维护,但仍有大量项目在使用)或更现代的。库由于依赖问题有时可能难以编译,另一个常用的库是。的Rust绑定,但直接支持AES的常用库是。库进行AES加密的示例。这里,我将给出一个使用。原创 2024-09-19 16:45:13 · 1282 阅读 · 0 评论 -
Rust 编译器使用的 C++ 编译器吗?
Rust编译器,但它们之间可以存在交互,尤其是在Rust与C++进行混合编程时。原创 2024-09-14 11:27:41 · 980 阅读 · 0 评论 -
Rust:深入浅出说一说 Error 类型
在 Rust 标准库中,`std::io::Error` 是一个用于表示 I/O 操作错误的类型。这个类型是由 Rust 标准库提供的,而不是由用户直接定义的。不过,我们可以根据 Rust 的错误处理机制和类型系统的特点,给出一个示意性的表示,以帮助你理解 `std::io::Error` 是如何被设计的。原创 2024-09-13 18:03:36 · 1665 阅读 · 1 评论 -
Rust:Result 和 Error
在 Rust 编程语言中,错误处理是一个核心部分,用于确保程序的健売性和可靠性。Rust 通过Result枚举和Error特质(trait)来处理错误。原创 2024-09-12 19:29:06 · 973 阅读 · 0 评论 -
Rust: Warp RESTful API 如何得到客户端IP?
在使用 Rust 的 Warp 框架来创建 RESTful API 时,如果你想要获取客户端的 IP 地址,通常需要在处理 HTTP 请求的函数中查看请求的头部或者底层连接的信息。不过,Warp 本身并不直接提供一个简便的 API 来直接获取客户端的 IP 地址,因为这取决于请求是如何被路由到 Warp 应用的(比如是否使用了负载均衡器、反向代理等)。获取到的 IP 地址(这通常是直接连接到你的 Warp 实例的最后一个设备的 IP 地址,可能是一个反向代理或负载均衡器的 IP 地址)。原创 2024-09-11 19:02:18 · 700 阅读 · 0 评论 -
Rust:Restful API 服务程序开发详述
hyper库提供了低级别的HTTP/1和HTTP/2协议支持,可以用于构建高性能的HTTP客户端和服务器。它利用Rust的类型系统来确保代码的正确性,并与Rust的异步生态系统无缝集成,支持异步非阻塞I/O。Warp 建立在 hyper 和 Tokio 这两个异步 Rust 运行时之上,因此它自动继承了 HTTP/1 和 HTTP/2 支持、异步功能以及 hyper 被认为是最快之一的 HTTP 实现。原创 2024-09-03 21:39:07 · 2070 阅读 · 0 评论 -
Rust:基于cxx的 C++ 混合编程,字符串参数的转换方法
在C++使用cxx库调用Rust函数时,字符串变量的传递方式主要取决于Rust和C++两端如何声明和处理这些字符串。cxx库提供了一种机制来在Rust和C++之间安全地传递数据,包括字符串。原创 2024-08-07 18:52:04 · 1502 阅读 · 0 评论 -
Rust:如何与 C++ 混合编程?
在设计一个使用Qt(C++库)进行UI设计,而业务逻辑则使用Rust编写的程序时,你需要考虑如何有效地桥接这两种不同的编程语言和生态系统。由于Qt是基于C++的,而Rust是一种与C++兼容但具有不同内存管理、并发模型和安全特性的语言,因此,你需要一个合适的架构来确保UI和业务逻辑之间的顺畅交互。原创 2024-08-07 18:42:15 · 2202 阅读 · 0 评论 -
Rust:如何调用C++源代码?
首先,我们创建一个C++文件(例如point.cc),并定义一个Point类和一个简单的函数来操作这个类。同时,我们需要一个头文件(例如point.h)来声明这个类。原创 2024-08-07 18:41:03 · 836 阅读 · 0 评论 -
Rust:如何在 C++ 源代码中调用 Rust 源代码中的函数
首先,你需要在Rust中定义一个函数,并使用cxx的Rust API来暴露这个函数给C++。// 这里通常不直接声明Rust函数给C++调用,因为C++不能直接调用Rust函数// 相反,你会在Rust中定义函数,并在C++中声明对应的C++函数作为桥接x + 42// 注意:在实际项目中,你可能需要将#[cxx::export]函数放在单独的文件中,// 并使用cxx::bridge来生成C++绑定。但这里为了简化,我们将其放在了一起。然而,上面的代码示例实际上并不完全符合cxx。原创 2024-08-07 18:39:41 · 782 阅读 · 0 评论 -
Rust编译代码时使用的C++编译器吗?
Rust编译器,但它们之间可以存在交互,尤其是在Rust与C++进行混合编程时。原创 2024-08-07 18:37:15 · 845 阅读 · 0 评论 -
Rust:常见 GUI 框架
选择哪个 Rust GUI 框架或工具取决于你的具体需求,比如你的项目类型(游戏、数据可视化、通用桌面应用等)、目标平台(Windows、macOS、Linux 或跨平台)、以及你对性能的要求。每个框架都有其独特的优点和局限性,因此建议在选择前仔细研究每个选项的文档和示例。Rust 语言因其性能、安全性和并发能力而广受欢迎,尽管它在标准库中不包含直接的图形用户界面(GUI)工具,但社区已经开发了多个高质量的第三方库来帮助开发者创建 GUI 应用程序。原创 2024-07-05 17:01:18 · 2780 阅读 · 0 评论