12 2025 档案
摘要:在 Rust开发标准中,可见性限定符(Visibility Modifiers)用于控制程序项(如函数、结构体、模块等)在不同作用域下的访问权限。默认情况下,Rust 中的所有项都是私有的,仅在定义它们的模块及其子模块中可见。 以下是 Rust 中主要的可见性限定符及其适用范围: 1. 基础修饰符
阅读全文
摘要:*mut *const u8,&mut *const u8,&mut &[u8],*mut *u8这四个类型在 Rust 中代表了从底层 C 指针到高级安全切片的演进。在处理FFI(外部函数接口)时,理解它们的区别至关重要。 以下是详细对比: 1. 核心属性对比表 类型内存语义 (从右向左读)角色/
阅读全文
摘要:在 Rust的开发标准中,std::ffi::c_int,std::os::raw::c_int和core::ffi::c_int这三个类型虽然在大多数平台上指向相同的底层数据类型,但在语义、演进路径和适用环境上有所不同。 1. 核心区别与关系 类型模块位置引入版本适用场景 (2025 标准) co
阅读全文
摘要:在Rust 中,String 的解引用行为是理解字符串处理和 API 设计的关键。这种机制被称为 Deref 隐式强制转换 (Deref Coercion)。 1. 核心机制 String 结构体实现了标准库中的 std::ops::Deref 特征: impl Deref for String {
阅读全文
摘要:在 Rust 中,#[inline] 和 #[inline(always)] 的区别主要在于对编译器的决策权和强制力。 1. #[inline] (建议) 这是对编译器的暗示/建议。 功能:它告诉编译器,这个函数是一个内联的候选者。 编译器的决定:编译器会根据自己的启发式算法(代码量大小、调用频率等
阅读全文
摘要:在 Rust 语言中,self、crate 和 super 被称为 路径前缀(Path Prefixes) 或 路径限定符(Path Qualifiers)。它们用于在 模块树(Module Tree) 中进行路径解析(Path Resolution)。 其逻辑与文件系统的路径导航(.、/、..)非
阅读全文
摘要:在 Rust 中,这种 ::<...> 的语法被社区称为 Turbofish(涡轮鱼) 运算符。 强制要求加 :: 的根本原因是:消除词法解析的歧义(Parsing Ambiguity)。 1. 核心矛盾:小于号(<)的两种含义 在 Rust 的表达式中,< 符号有两种完全不同的含义: 比较运算符:
阅读全文
摘要:在 Rust 编译器(rustc)中,内置宏(Built-in Macros)是由编译器直接实现的,不需要引入任何 crate 即可使用。它们在编译阶段执行,主要用于获取编译环境信息、调试、字符串处理以及条件编译。 以下是常用的 Rust 内置宏分类详述: 1. 环境与元数据宏 这类宏用于在编译时提
阅读全文
摘要:在 Rust 中,std::marker 模块提供了一组极其特殊的 标记特征(Marker Traits)。它们与普通的 Trait(如 Display 或 Read)最大的不同在于:它们通常没有方法定义,也不需要你写具体的实现逻辑。 它们的存在是为了给编译器打标签,告知编译器该类型具备某种特定的底
阅读全文
摘要:RustDesk 涉及视频编解码、网络通信及 GUI 渲染,需要安装以下开发包: 为了编译 RustDesk,您需要更新系统并安装一系列开发依赖包。接下来,安装 Rust 编译工具链,这可以通过运行官方脚本完成。然后,克隆 RustDesk 的源代码,进入项目目录并创建必要的构建目录。RustDes
阅读全文
摘要:在 Rust 中,当你为类型 U 实现了 From<T> trait 时,编译器会自动为类型 T 实现 Into<U> trait。 这是通过 Rust 标准库中的一个泛型实现(Blanket Implementation)完成的: 1. 核心机制 自动推理 (Blanket Implementat
阅读全文
摘要:在 Rust 语言中,泛型(Generics)是实现代码复用、减少冗余并保持静态类型安全的核心机制。泛型实现(Blanket Implementation)允许你编写能够处理多种数据类型的代码,而无需为每种类型重复编写。 这个乍一听不就是c++语言的模板编程吗?先留个疑问,后面会结合两者的不同概念而
阅读全文
摘要:在 Rust的标准库中,std::collections 的接口设计非常强调内存安全和显式所有权。 集合通常根据底层逻辑分为四类:Sequences(序列)、Maps(映射)、Sets(集合) 和 Misc(杂项/优先队列)。 以下是针对四大类常用集合的 增、删、改、查 操作的完整示例。 1. Se
阅读全文
摘要:postgres标准全称PostgreSQL,而psql通常指其命令行客户端。 1. 核心限制参数 PostgreSQL 的连接数限制主要由配置文件 postgresql.conf 中的 max_connections 参数决定。 默认值:通常为 100。 理论上限:受操作系统资源(如文件描述符限制
阅读全文
摘要:在 Rust 语言中,Trait(特征)是其核心抽象机制,类似于其他语言中的“接口”(Interface),但功能更为强大。它定义了某种类型可以提供的共享行为。 以下是关于 Trait 的核心知识体系: 1. 基础定义与实现 Trait 定义了一组方法签名。任何类型(struct、enum 等)只要
阅读全文
摘要:可以这么说rust的机制比较多,其底层原理只看接口的话,很难明白使用了什么机制。如果我们不理解这些机制,可以说就是没有学会rust。只会使用,恐怕自己要踩坑的,即使学习十年也枉然。知识如汪洋大海,日月星辰,永远学不完。好记性不如赖笔头,这里分享一下自己的学习心得,加上示例方便大家理解。如有理解错误的
阅读全文
摘要:在 Rust 中,#[allow(clippy::type_complexity)] 是一个用于抑制 Clippy 特定警告的属性。它告诉 Rust 的静态分析工具 Clippy:“我知道这个类型定义非常复杂,请不要对我报错。” 以下是该属性的详细拆解: 1. 什么是 Clippy? Clippy
阅读全文
摘要:在项目开发过程中,nom库功能确实很强大,提供了通用的接口,给我们的开发提供了很多方便,但是在开发中,我们不可避免地会遇到接口并未完全满足我们需求的情况。在现有接口上,我们需要封装接口来满足我们日常开发工作。这里举两个例子,有兴趣的朋友可以一起来学习一下。 1. nom::bits::bits pu
阅读全文
摘要:在 Rust 语言中,move 关键字主要用于闭包(Closures)和异步块(Async blocks)。它的核心作用是:强制闭包(或异步块)获取其捕获变量的所有权(Ownership),而不是进行借用。 以下是关于 move 的深度解析: 1. 为什么需要 move? 默认情况下,闭包会尽可能以
阅读全文
摘要:nom库很庞大,有点像c++开源库Boost的子库Spirit。虽然千条小溪才能汇成江海湖泊,但其重要思想的代表者更能学习到其思想核心。今天介绍两个比较有代表性的接口,nom::bytes::streaming::take_while_m_n与nom::bytes::complete::take。虽
阅读全文
摘要:在 Rust 语言中,Fn、FnMut 和 FnOnce 是闭包(Closures)特征(Traits)。它们定义了闭包可以捕获其环境(即捕获外部变量)的不同方式。 理解这三个 Trait 是理解 Rust 中函数式编程和所有权管理的关键。它们组成了 Rust 闭包类型的层次结构。 核心概念:捕获(
阅读全文
摘要:1.git没有add文件,但git pull时发生了合并,(可能产生代码冲突,也可能只产生了合并)如何解决? 你没有 git add 文件但 git pull 时发生合并,是因为本地工作区有未提交的修改(修改了文件,但没暂存也没提交),而远程仓库的更改与你的本地修改在同一个文件的同一部分产生了冲突,
阅读全文
摘要:1.cargo执行安装cbindgen工具时,error: source `rustcc` defines source registry `https://github.com/rust-lang/crates.io-index`, but that source is already defin
阅读全文
摘要:String::from_utf8_lossy 是 Rust 标准库中的一个非常实用的方法,用于处理可能包含无效 UTF-8 序列的字节数据。 String::from_utf8_lossy 的作用 该方法的核心作用是将一个字节切片(&[u8])转换为一个字符串类型(具体来说是 Cow<'_, st
阅读全文
摘要:nom库在数据解析方面很实用,接口丰富,上一篇介绍了一些常用的接口,今天再续前篇,分享一些其他接口,希望大家能够从中受益。 根据目前的打算,关于rust语言nom库,大概会分享6篇,读者只需要阅读一下,自然会明了于心。文章力求语言简洁,言简意赅,不注水。不会像讲经文一样,文绉绉的,造成困惑。 len
阅读全文
摘要:rust迭代挺快的,这个速度有点让人吃不消,前天的接口还好好的,今天就编译出错了,有点让人头痛。日常中多版本切换 这个还是常常用到的,这里将我常用的分享给大家。在 Rust 中,切换版本(通常称为工具链,toolchain)是通过官方推荐的工具 rustup 来完成的。 rustup 使得安装、管理
阅读全文
摘要:可重入函数和不可重入函数的概念 在函数中如果我们使用静态变量了,导致产生中断调用别的函数的 过程中可能还会调用这个函数,于是原来的 静态变量被在这里改变了,然后返回主体函数,用着的那个静态变量就被改变了,导致错误。这类函数我们称为不可重入函数。 如果是在函数体内 动态申请内存的话,即便 新的线程调用
阅读全文
摘要:在 Rust 中,迭代适配器(Iterator Adapters)是定义在 Iterator Trait 上的方法。它们的作用是接收一个已有的迭代器,对其进行一系列转换操作(例如过滤、映射、跳过等),然后返回一个新的、修改后的迭代器。 适配器允许您以声明式、函数式的方式构建复杂的数据处理管道,并且通
阅读全文
摘要:Rust 语言中的切片(Slice),类型通常表示为 &[T](不可变引用)或 &mut [T](可变引用),是对连续内存区域的引用。切片本身不拥有数据,但提供了许多安全、高效的接口来操作底层数组或向量的数据。 以下是 &[T] 类型的一些常用接口(方法)及其使用示例: 常用切片接口概览 接口作用描
阅读全文
摘要:我就直接上菜吧: /// Convert a String to C-compatible string /// /// This function will consume the provided data and use the underlying bytes to construct a
阅读全文
摘要:在 Rust 中,String 和 CString 分别用于不同的目的,因此它们的转换涉及内存布局和所有权的变化。 String:Rust 原生的、UTF-8 编码的、动态增长的字符串智能指针。 CString:与 C 语言兼容的字符串智能指针。它是一个以空字符(Null Terminator, \
阅读全文
摘要:1. #[cfg(not(feature = "debug-validate"))]作用 首先说明一点debug-validate这个名字是用户自定义的,也可以取个其他名字。 [package] name = "CompileCfgT" version = "0.1.0" edition = "20
阅读全文
摘要:在 Rust 语言中,声明式宏(macro_rules!)是日常编程中非常重要的工具,它们使得代码更加简洁、高效。许多标准库的功能都是通过声明式宏提供的。 以下是一些常用的声明式宏及其使用示例: 1. println! 和 eprintln! (格式化输出) 这是最基础的宏,用于将格式化的文本输出到
阅读全文
摘要:在 macro_rules! 的定义中,$ 是一个特殊语法标记,用于区分普通的 Rust 代码和宏变量(Macro Variables)。 $crate 是一个特殊的“魔术”标识符,它只在 macro_rules! 宏内部可用。它的核心作用是在声明式宏(macro_rules!)中智能地指向定义该宏
阅读全文
摘要:Rust 语言中的属性(Attributes)是附加到代码(例如模块、函数、结构体、枚举或整个 crate)上的元数据,用于向编译器提供额外信息、指示编译器执行特定操作,或启用某些功能。 属性以 #[attribute_name](表示该属性作用于紧接着它的下一个声明项(Item Declarati
阅读全文
摘要:在 Rust 语言中,#[repr(C)] 是一个重要的属性(attribute),用于控制类型(主要是结构体 struct 和枚举 enum)在内存中的布局,使其与 C 编程语言的内存布局规则兼容。 默认情况下,Rust 编译器会自由优化内存布局(#[repr(Rust)]),包括重新排列结构体字
阅读全文
摘要:#[macro_export] 是 Rust 语言中的一个属性(Attribute),用于标记一个宏,使其可以从当前 crate(库)导出,从而可以在其他 crate 中使用。 1. 作用与目的 在 Rust 中,如果你在一个库 crate 中定义了一个宏(通常是使用 macro_rules! 定义
阅读全文
摘要:Rust 中的 Sized Trait(特征)是一个非常基础但至关重要的概念。它是一个标记 Trait(Marker Trait),没有包含任何方法,其唯一目的是告诉编译器一个类型是否具有在编译时确定的固定大小。 1. Sized 的定义与作用 在 Rust 中,几乎所有你在日常编程中使用的类型默认
阅读全文
摘要:在 Rust 中,pub const fn as_ptr(&self) -> *const T 是用于将一个安全、不可变的切片引用 (&[T]) 转换为一个不安全、不可变的裸指针 (*const T) 的核心方法。 您提供的实现代码非常简洁地展示了 Rust 如何处理切片(Slice)的内部结构:
阅读全文
摘要:nom 库使用解析器组合和统一的 IResult 返回类型。每个解析器都是一个接受输入(例如 &str 或 &[u8])并返回 IResult 的函数。 以下是一些常用的 nom 接口及其使用示例: 核心类型:IResult 所有 nom 解析器都返回一个 IResult<I, O, E> 类型,这
阅读全文
摘要:Rust 的所有权系统和借用检查器实现了内存安全,而不需要垃圾回收器(GC)或手动内存管理,这个说法是正确且核心的。 但是,这与 Drop 特征(Trait)和 std::mem 模块并不矛盾。相反,它们是 Rust 内存管理体系中协同工作的不同组件,共同构建了这套独特的系统。 1. 所有权系统与
阅读全文
浙公网安备 33010602011771号