自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 收藏
  • 关注

原创 仓颉线程安全保证:从语言设计到工程实践的全维度解析

仓颉的线程安全保证体系,本质是将"开发者需手动保证安全"转变为"语言机制默认安全,开发者仅需处理例外"。安全优先,性能可控:默认提供强线程安全保证(顺序一致性、编译期检查),同时允许开发者在明确场景下放松约束以换取性能。分层防御,各尽其责:类型系统拦截明显错误,内存模型保证基础语义,同步原语提供工程工具,工具链辅助优化与调试,形成完整防御体系。复杂问题,简单表达:通过Actor、原子类型等抽象,将复杂的线程安全逻辑封装为简单接口,降低开发者心智负担。

2025-11-10 11:24:17 251

原创 仓颉语言异步编程语法糖:从语法设计到 runtime 实现的深度解析

async关键字用于标记函数为异步函数,其返回值是一个实现了Futuretrait 的匿名类型(称为“未来对象”)。与同步函数不同,async函数不会立即执行,而是返回一个可被调度执行的任务描述符;当任务被调度时,其内部逻辑会在合适的时机(如 IO 就绪)逐步执行。// 假设的 executor,负责调度 Future// 定义异步函数:返回一个 Future<Output = i32>a + b // 简单计算,无 IO 操作// 调用 async 函数不会执行逻辑,仅返回 Future。

2025-11-10 11:23:14 306

原创 仓颉Actor模型:分布式并发编程的优雅之道

/ 完整的消息系统设计// 消息基类(使用枚举确保类型安全)// Actor实现:银行账户// 注册关联账户(用于转账)// 消息处理器} else {} else {// 发送给目标账户(异步,不阻塞)// 异步发送存款消息到目标账户} else {} else {// 使用示例main() {// 创建两个银行账户Actoractoractor// 链接账户(允许转账)// 发送异步消息// 模拟转账操作// 查询余额。

2025-11-10 11:21:43 458

原创 智能指针在仓颉技术中的深度实践:从原理到架构的全维解析

仓颉智能指针体系通过确定性回收、无锁并发、分层优化三大核心技术,在实时性、性能、安全性之间实现了独特平衡。从基础的引用计数原理到复杂的分布式系统应用,其设计哲学贯穿了“让内存管理更可预期”的核心理念。随着技术的发展,智能指针正从单纯的内存工具升级为构建可靠系统的基础设施,而仓颉的实践为这一演进提供了极具价值的参考范式。

2025-11-10 11:20:15 265

原创 仓颉语言中栈与堆的分配策略:从原理到实践的深度解析

栈与堆作为内存管理的两大支柱,在仓颉中形成了“互补共生”的关系:栈提供高效、安全的短生命周期存储,堆满足动态、灵活的长生命周期需求。默认栈分配:小型、固定大小、生命周期与作用域绑定的数据,优先栈分配,享受零开销优势;显式堆分配:大型、动态大小、需要共享或跨作用域的数据,通过BoxVecArc等类型显式堆分配;辅助编译器优化:通过调整代码结构(如避免不必要的逃逸),帮助逃逸分析将更多数据分配在栈上;减少堆分配次数:通过批处理、预分配()、对象池等技术,降低堆分配的 overhead;

2025-11-10 11:19:00 286

原创 仓颉语言内存布局优化技巧:从字节对齐到缓存友好的深度实践

/ 定义一个只能存储1-100的整数类型// 枚举包含BoundedInt和一个Unit变体Empty,println!// 1字节println!// 1字节(而非2字节)BoundedInt的u8实际只使用1-100,0和101-255是无效值。可用0表示,Value用1-100表示,无需额外标签,因此大小与BoundedInt相同。内存布局优化是系统级编程的“隐形性能杠杆”,仓颉通过精细化的控制能力与安全保障,让开发者既能贴近硬件优化,又不必牺牲安全性。优先依赖编译器优化。

2025-11-10 11:16:10 523

原创 仓颉语言中引用计数的实现原理:从内存模型到工程实践

MyRc仓颉的引用计数实现(RcArcWeak与所有权模型协同:在单所有权场景用所有权+借用保证零开销,在共享场景用引用计数提供灵活性,形成互补;类型系统保障:通过SendSynctrait区分单线程与多线程安全,编译期阻止错误使用;工程化工具链RefCellMutex提供内部可变性,Weak解决循环引用,满足复杂场景需求。对于开发者而言,理解引用计数的原理不仅是正确使用RcArc的前提,更是掌握仓颉内存模型的关键。

2025-11-10 11:14:58 414

原创 所有权与解构:一次把“拆”与“留”写进类型系统的旅程 ——从语法糖到零拷贝 AST

本文深入解析Rust解构(Destructuring)机制,揭示其不仅是语法糖,而是所有权的编译期重新布线。通过3个递进案例:从结构体字段解构到数组/切片解构,最终在零拷贝JSON解析器中实现宏级解构应用。文章阐明解构如何通过MIR精确控制所有权转移和析构,展示如何利用此特性构建高效无拷贝的AST解析器。核心观点:解构=编译器完成的所有权精细管理,带来零成本抽象优势。包含200行完整JSON解析器实现,演示解构在宏中的高级应用。

2025-10-30 16:30:54 518

原创 部分移动(Partial Move)使用场景全景指南 ——从语言规则到真实项目落地,代码拆解 Rust 的“拆东墙补西墙”艺术

摘要: Rust的部分移动(Partial Move)允许在字段级或元素级拆解数据,实现零成本所有权转移。通过结构体字段、模式解构和索引解构,可灵活拆分数据,同时避免整体丢弃。实际应用包括零拷贝JSON解析(借用字段而非移动)、异步状态机(跨状态转移部分字段)以及宏级声明式解构。编译器通过MIR层优化确保零运行时开销,但需注意避免常见的移动后访问错误(E0382/E0509)。

2025-10-30 16:29:04 847

原创 Drop trait 与资源清理机制:从语言规则到零成本运行时

Rust通过类型系统自动管理资源释放,利用Drop trait确保析构函数在作用域结束时可靠调用。文章解析了Drop的三层语义(语言规则、类型系统、代码生成),并通过文件描述符、内存池等实例展示RAII模式的实现。编译器在MIR中自动插入drop调用,支持panic安全释放。还介绍了手动控制析构的工具(ManuallyDrop、MaybeUninit)以及FFI边界处理,避免C/C++中常见的资源泄漏问题。Rust的资源管理无需finally块,编译期即可保证释放可靠性。

2025-10-30 16:27:00 856

原创 所有权系统如何防止双重释放 ——从 MIR 语义到 FFI 边界的 5 000 字深潜

Rust通过所有权系统和编译期检查机制,将双重释放这一传统程序中的运行时错误转化为编译错误。文章从语言规则、类型系统和MIR检查三个层级详细剖析了Rust如何确保每个值只被释放一次,包括move语义、Drop trait实现和MIR分析等技术手段。通过手写智能指针和FFI边界的实例验证,展示了即使在unsafe代码中,Rust工具链(如Miri和AddressSanitizer)也能有效捕获潜在的双重释放问题。最终得出结论:在safe Rust中,双重释放已成为"编译期不可能事件",体现

2025-10-30 16:25:37 844

原创 所有权 × 零成本抽象:Rust 如何让你「写得像高级语言,跑得比 C 还快」——200 行代码从 Vec 到 lock-free 环形队列的旅程

Rust零成本抽象实践:从Vec到无锁队列 摘要:本文通过渐进式重构演示Rust所有权机制如何实现零成本抽象。首先展示手写MyVec与标准库Vec在汇编层面的等价性,验证所有权规则使高级抽象可被完全优化。随后通过零成本迭代器实现,展示循环可被优化为指针算术。最后利用所有权转移和原子索引,实现单生产者单消费者无锁环形队列,避免了标准库VecDeque的互斥锁开销。所有权系统在编译期保证内存安全的同时,不引入任何运行时开销,完美诠释了"零成本抽象"理念。 (150字)

2025-10-30 16:24:22 949

原创 不可变借用的规则与限制: 从只读语义到零拷贝架构的 5 000 字深潜

编译期:borrow checker 用 Region 证明只读 + 共享的合法性运行期:不可变借用天然Sync,允许零拷贝 + 并行工程实践:善用生命周期、PhantomData、Cow,无需 unsafe即可获得 C 级性能愿你在下一次写解析器、网络库或并发框架时,把不可变借用当成最锋利的工具!

2025-10-30 16:16:20 558

原创 HTTPS协议详解--超详细保姆级知识讲解

数字指纹(数据摘要),其基本原理是利用单向散列函数(Hash 函数)对信息进行运算,生成一串固定⻓度的数字摘要。数字指纹并不是一种加密机制,但可以用来判断数据有没有被篡改。摘要常见算法: 有 MD5、 SHA1、 SHA256、 SHA512 等, 算法把无限的映射成有限, 因此可能会有碰撞(两个不同的信息, 算出的摘要相同, 但是概率非常低)摘要特征: 和加密算法的区别是, 摘要严格意义不是加密, 因为没有解密, 只不过从摘要很难反推原信息, 通常用来进行数据对比为什么要有数据摘要呢?

2025-09-11 10:57:31 812

原创 分布式通信平台测试报告

抽象层(abstract.hpp):定义基础接口,包括消息、缓冲区、协议、连接、服务器和客户端等。工具层(detail.hpp):提供日志、JSON序列化、UUID生成等基础工具。消息层(message.hpp):实现各种消息类型,如RPC请求/响应、主题请求/响应、服务请求/响应等。网络层(net.hpp):基于muduo网络库实现TCP服务器和客户端,处理网络通信。分发器(dispatcher.hpp):实现消息分发机制,根据消息类型调用对应的处理函数。

2025-09-06 12:12:50 723

原创 智能高效内存分配器测试报告

采取三层结构:thread_cache-central_cache-page_cache。当一个线程需要申请内存时,先向thread cache进行申请,thread cache没有内存,转而向central cache进行申请,central cache没有内存,转而向page cache进行申请,page cache没有内存,会直接在堆上进行开辟。​ 在进行归还内存时,不会直接释放掉,直接释放掉下次申请还要再进行上面的流程。对thread cache增加自由链表的结构,每次用完释放后,直接将其链入th

2025-09-03 23:10:00 1006

原创 [数据结构]详解红黑树

如果插入前parent下面再挂黑色结点,就会导致图中两条路径黑色结点的数目不相同,而parent是红色的,因此parent下面自然也不能挂红色结点,所以说这种情况下的cur结点一定是新插入的结点。和情况二一样,若祖孙三代的关系是直线(cur、parent、grandfather这三个结点为一条直线),则我们需要先进行单旋操作,再进行颜色调整,颜色调整后这棵被旋转子树的根结点是黑色的,因此无需继续往上进行处理。红黑树是一棵二叉搜索树,他的每个结点增加一个存储位来表示结点的颜色,可以是红色或者黑色。

2025-07-04 16:55:39 1073

原创 万字详解AVL树

AVL树是一种自平衡二叉搜索树,通过旋转操作维持左右子树高度差不超过1的特性。文章介绍了AVL树的概念、性质及实现方法,包括插入操作和四种旋转方式(左单旋、右单旋、左右双旋、右左双旋)。AVL树通过平衡因子控制树的高度,当插入导致不平衡时,会根据不同情况进行相应的旋转调整,从而保证搜索效率维持在O(logN)。文中还提供了C++代码实现,展示了如何通过旋转操作维持树的平衡性。

2025-07-03 21:32:46 910

原创 详解二叉搜索树

只有key值的二叉搜索树只支持查找功能,比如:我们要查找某个单词是否在字典中存在,停车场是否存在某辆车等等,但对于其它信息我们无法获取如:单词的意思,车辆停车时长。然而,如果我们在二叉搜索树中不断地插入和删除节点,可能导致二叉树退化为链表,相应的,二叉搜索树的查找操作是和这棵树的高度相关的,而此时这颗树的高度就是这颗树的节点数 n,这时各种操作的时间复杂度也会退化为 𝑂(𝑛)。这样二叉搜索树便可满足如查询单词,查询车辆的停车时长,单词的引用次数一些简单需求。二分搜索树在时间性能上是具有局限性的。

2025-07-03 16:43:45 863

原创 Socket编程——TCP

​ TCP协议和UDP协议都属于网络通信协议,TCP协议是面向字节流的,UDP协议是面向数据报,这个特点后面会详谈的。listen可以理解为在景区餐馆旁边拉客的人,他的任务只是把你拉进餐馆,对于后续的服务并不做关心,在你进入餐馆后,继续进行拉客。accept可以理解为在你进入这个餐馆后进行招待的人,也就是由他来对你进行服务。TCP协议则需要建立连接,只有双方准备好才能进行报文的转发。UDP协议不需要连接,即报文一来就立刻进行转发。

2025-05-21 12:03:23 766

原创 Socket编程——UDP

]

2025-04-21 20:06:15 792

原创 Linux进程信号

在我们进行系统学习进程信号之前,要对信号这东西有点了解。所以,当各位怀揣着激动的心,颤抖的手打开百度百科搜索信号时,发现了如下的术语:信号是表示消息的物理量,是信息传递的载体。它可以通过多种形式存在,包括光信号、声信号和电信号等。信号的主要功能是运载消息,使信息能够在不同实体之间传递。‌通过以上的术语,我们明白了信号的特点:传递性以及通知的作用。这一点不难理解,我这里用以下简单的例子帮助各位理解什么是信号:在过路口时,红灯亮起,我们明白该停下了,绿灯亮起,我们就可以前进了。

2025-03-16 13:02:13 994

原创 【计算机组成原理 | 第一讲】计算机系统概述

计算机硬件发展是指计算机硬件技术的不断进步和发展,包括计算机的中央处理器(CPU)、内存、存储器、输入输出设备和通信设备等方面的发展。第一代计算机硬件发展于20世纪40年代末到50年代初,采用电子管作为主要的元件,体积较大,功耗高,速度较慢。第二代计算机硬件发展于20世纪50年代到60年代,采用晶体管替代了电子管,体积减小,功耗降低,速度提高。第三代计算机硬件发展于20世纪60年代到70年代,采用集成电路(IC)技术,将多个晶体管集成在一个芯片上,进一步减小了体积,提高了性能。

2024-12-02 21:17:53 1181

原创 数据结构——排序【下】

计数排序是一个非基于比较的排序算法,元素从未排序状态变为已排序状态的过程,是由额外空间的辅助和元素本身的值决定的。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。(Merge sort)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。再最后排序时,一定要加的是 + ,如果加的为 tmp[i] 会导致出现问题,其原因为:tmp[i],在不断的变化,会导致排序出错。

2024-09-03 08:00:00 656

原创 深入理解并实现——归并排序【C语言】

这个本身的话,就是每次循环结束,在拷贝数组和临时数组的值进行交换,之后就是在临时数组改变之后的情况下,在进行第二次循环排序,之后。把拷贝后的数据在进行分组合并,每次循环里面都是对a合并后的数据在做处理,如果说全部执行完再拷贝,那a每次并没有啥变化,当然就不可能完成归并排序整个过程。关于这个问题,我们给出以下情景:在今年,你怀着忐忑的心情去参加秋招,顺利通过了笔试,在面试时,面试官的问题你都对答入流,直到最后一题:给你1G的空间,你如何使10G的数据有序,这时,你看过本博主写得TOP-K问题(

2024-08-30 20:07:16 1968

原创 深入理解并实现——快排【C语言版】

快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法。1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。

2024-08-28 19:43:12 1966

原创 如何处理在学校Linux连接不上服务器

当我们在周末在图书馆背着室友偷偷学习时,准备好好学习Linux,争取在日后大展拳脚时,却突然尴尬的发现,连接不上服务器,总是出现以下画面:那么,我们该如何解决问题呢?

2024-08-27 20:45:15 600

原创 Linux指令学习(一)

目录前言:一、目录类指令 1.1 whoami 1.2 pwd 1.3 ls 1.4 touch 1.5 mkdir 1.6 rmdir 1.7 rm 1.8 cd 二、目录 三、man指令 在今天的学习中,我们将会学习到ls,touch,mkdir,rmdir,cp,pwd,man等指令用法以及所属知识点讲解,在Linux所使用的环境为:Ubuntu 20.04 serve

2024-08-27 20:35:24 1035

原创 初入Linux

比如,张三和李四合资买了一个服务器,由张三进行购买,那么,李四该如何使用呢?对于链接服务器,我们可发出以下指令:ssh root@你的服务器的公网ip, 输入后就可以进入看到要输入你的服务器密码了, 这个密码就是上面服务器配置的时候重置的密码, 如果没有重置密码就进不去。linux在开源后,世界上的顶级工程师和其他编程大牛们都自愿的建设linux, 至今, linux已经有几千万行的代码量。找到后,进行安装,一路next即可,第一次打开xshell会有填写姓名和邮箱, 然后填写自己的邮箱就行。

2024-08-23 05:00:00 1533

原创 【C++】String常见函数用法

string总共占28个字节,内部结构稍微复杂一点,先是有一个联合体,联合体用来定义string中字符串的存储空间: 当字符串长度小于16时,使用内部固定的字符数组来存放 当字符串长度大于等于16时,从堆上开辟空间。这种设计也是有一定道理的,大多数情况下字符串的长度都小于16,那string对象创建好之后,内部已经有了16个字符数组的固定空间,不需要通过堆创建,效率高。从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置 rfind从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置。

2024-08-17 21:49:58 1002

原创 [C++] STL简介

STL(Standard Template Library,标准模板库)是一种C++的模板类库,提供了一系列通用的数据结构和算法。STL包括了一些容器(如vector、list、map等)、算法(如排序、搜索等)和迭代器等,可以帮助开发人员快速地实现各种常用的数据结构和算法操作。我们即将开始STL部分的学习,相信大家学系完后会有爽到飞起这样的感觉!完!

2024-08-16 22:06:29 1100

原创 内存管理【C++】

1. 调用operator new函数申请空间2. 在申请的空间上执行构造函数,完成对象的构造。

2024-08-16 18:35:14 1042

原创 模板——从初级到进阶

优快云接下来,我们一起来学习更加深刻的内容吧。一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链 接起来形成单一的可执行文件的过程称为分离编译模式。【优点】1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2. 增强了代码的灵活性【缺陷】1. 模板会导致代码膨胀问题,也会导致编译时间变长2. 出现模板编译错误时,错误信息非常凌乱,不易定位错误。

2024-08-14 23:58:29 1436

原创 【C++】——初识模板

在内容开始之前,大家且听一个小故事:屏幕前的各位都是勤奋好学之人,今日你仍像往常一样继续学习,可突然困了。当你再次醒来发现自己穿越了,成为了书店的店小二。书店老板的女儿肤白貌美的,符合你的审美,你不由得想得到其芳心。你突然注意到:书店所有的书都是手写的,效率低下。你身为现代人不由得想到了法子:我能不能把文章印到一个板子上,客人要什么,就印什么,这样不仅提高了效率,还能获得最大收益。你把想法告诉了老板,老板听后决定采取你的建议,结果大赚特赚。在此情景下把女儿许配给你,就在洞房花烛夜之时,你醒了过来。

2024-08-14 14:48:52 1123

原创 类和对象——日期类实现

我们之前已经学习过了类和对象,我们今天来实践应用一下,来增强感悟!

2024-08-05 21:34:58 1140

原创 类和对象【下】

默认成员函数从名字就告诉我们何为默认成员函数,即:用户没有实现,编译器默认自动实现的函数。这时你不禁一喜,还有这好事,编译器给我打工,那么,我们今天都来了解一下都有哪些牛马函数,但是提醒一下,有的函数在某些情况下需要手动实现!

2024-07-31 21:36:32 691

原创 深入理解类和对象【上】

这就要引出访问限定符这个东西来保护我们的代码了,我们可以只提供能改变的变量,不能变的“藏起来”不就好了的。可这样理解:我们这时就好比是设计师,我们设计出的类就好比是图纸,明确各个地方的功能,但是看不见实物,对吧?函数指针是不需要存储的,函数指针是⼀个地址,调⽤函数被编译成汇编指 令[call 地址], 其实编译器在编译链接时,就要找到函数的地址,不是在运⾏时找,只有动态多态是在 运⾏时找,就需要存储函数地址,当然不是,它虽然是空,但我们没用它,就好比:你看见一只野狗,你没去挑逗它,它此时不具备攻击性。

2024-07-26 21:58:15 1120

原创 初始C++

在C语言我们学习函数的时候,我们学习过生命周期这个概念。那么,什么是生命周期呢?生命周期通常指的是一个对象或变量从创建到销毁所经历的时间段。那么,命名空间是什么?咱们可以这样理解:在这个空间的生命周期内,对这个空间内的全部标识符起一个名字,可对其进行引用,可类似与C语言中的结构体。#include<stdlib.h>//此处不包此头文件代码可正常运行,那该如何解决此处情况呢?int main()//此处编译不通过原因为:在不包头文件前为变量,包含后为函数。return 0;

2024-07-08 21:32:26 1556 1

原创 数据结构——排序【上】

以上便是本文的内容,希尔排序看着抽象,实际也不好理解,大家下去要多画图经行理解。其余的排序会在后续文章发出,期待下篇文章再见。

2024-05-30 21:04:55 855 3

原创 二叉树——经典练习题

二叉树的学习,我们目前就告一段落了,后续的进阶内容会在c++部分讲解。今天讲解的题目中最后三道难度较大,还望各位读者在学习完后能够多多练习,这样才能够掌握。如在学习中,有啥问题可在评论区交流,也可私信。期待与读者再会。完!

2024-05-27 06:00:00 2811 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除