Rust宏:从macro_rules到过程宏 写 Rust 写到一定阶段,你会发现“宏”几乎绕不过去。 从 println!、vec! 到 #[tokio::main]、#[derive(Debug)],它们都在编译期改写代码,只是方式不同。本文对各类宏进行深入解析,带你从 macro_rules! 的模式匹配到过程宏的 TokenStream 转换,全面理解 Rust 宏的强大与灵活。 2026-04-17 TechMagic #rust
Rust 核心机制与易错题目深度解析 在 Rust 的进阶之路上,理解所有权、生命周期和异步模型是跨越“陡峭曲线”的关键。本文根据“看代码说输出”的经典考察点,深度解析五个极具代表性的 Rust 技术点及其底层原理。 2026-04-13 TechMagic #rust
Rust数据结构源码实现 解析Rust部分数据结构的源码实现需要注意的是,为了方便,对源码的一些实现有改写 Vec从单纯的数据结构设计上,大概如下 12345678910111213pub struct Vec<T, A: Allocator = Global> { buf: RawVec<T, A>, len: usize,}pub(crate) struct Ra 2026-03-15 TechMagic #C++ #Rust
谈谈Rust动态派发 在 Rust 中,多态主要通过两种方式实现:静态派发 和 动态派发。虽然泛型(静态派发)是 Rust 的首选,但在处理“异构集合”(例如一个包含不同 UI 组件的列表)时,动态派发(即 dyn Trait)则是不可或缺的利器。 然而,并不是所有的 Trait 都能开启动态派发。这篇文章简单聊聊:想要实现动态派发,Trait 必须满足哪些条件?底层又是如何运作的? 核心概念:胖指针在 Rust 中, 2026-03-03 TechMagic #rust
一致性哈希 背景假设在分布式负载均衡场景中,对于一些输入,我们希望尽可能均匀的将其分配到 n 个不同的节点。常规的哈希算法通常使用简单的哈希函数与取模来得到下标。$$\text{index} = hash(input) \ % \ n$$但当节点扩缩容时,即 n 的大小变化时,一个显而易见的问题是。对于相同的 input,得到的 index 是不同的。 从数学上来看,即使 index 发生变化,这样 2026-03-03 TechMagic #密码学
几种IO方式 面试问到了,重新梳理一下 一次 IO 到底发生了什么?以读 socket 数据为例。一次 read 实际上包含两个阶段: 等待数据准备好(内核态) 数据从网卡 → DMA → 内核缓冲区 这个过程应用程序完全无法参与 只能等 数据从内核拷贝到用户空间 内核 buffer → 用户 buffer 这是一次内存拷贝 一次 IO = 等待数据 + 拷贝数据 所有 IO 模型 2026-03-02 TechMagic
从 TTY 到现代 Shell 掌握数字世界的咒语:从 TTY 到现代 Shell 写在前面: 很多新生看着电脑屏幕上那个闪烁光标的黑框(Terminal)会感到恐惧。习惯了图形界面(GUI)的点点点,为什么我们还要学习敲命令? 如果把操作系统比作一辆赛车,GUI 是方向盘,让你轻松驾驶;而 Shell(命令行)则是引擎盖下的机械结构。作为计算机专业的学生,你不能只会开车,你必须学会修车、改装车,甚至重新设计引擎。 这篇文章将带 2025-12-16 经验分享 #shell #terminal