自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 RUST内存安全杂述

RUST语言的安全到底是什么,本文给出了理解。

2022-06-13 12:20:39 790 1

原创 变量在栈中比在堆中有什么优势

栈为什么比堆执行快1.栈内存访问,内存地址获取指令是栈寄存器加一个很小的偏移量。另外,因为栈内存及访问栈内存的指令通常都会位于CPU一级缓存中,所以这个内存访问基本不会再快了。2.堆内存访问首先要从内存读指针地址,然后再用这个指针地址加偏移量去访问堆内存,这就导致了多一个读指令。另外,堆内存很可能不处于缓存里,尤其是第一次访问,这会导致堆和栈出现巨大的速度差异。如果再发生缺页中断,3.堆内存需要做内存申请,这是极为耗时的操作,如果把内存申请的消耗计算在内,那栈内存的综合速度优势就又多了一项。...

2022-06-11 14:23:45 262

原创 20年后,哪些编程语言会留下

首先应该阐明一下留下的概念,应该是指该语言还在持续不断的创造有影响力的新应用。按照stackoverflow的最流行的几种语言来分析一下:1.JavaScript,我认为毫无疑问将继续流行,当然,也有可能是TypeScript。但这两者认为是一体应该没有太大的毛病。2.SQL,应该没有什么能替代它3.Python 它的优点是语法足够简单,生态足够好,开发效率足够高。但性能是它致命的缺点。有影响力的商业应用估计不是它的强项,但开发一些小的工具,原型,将已有的组件连接在一起仍然优选它,前提是没有显著强于

2022-06-08 08:07:45 238

原创 RUST的Once源代码分析

分析RUST的Once实现源代码。从源代码可以看到,RUST与C在某些实现上一脉相承

2022-06-06 16:17:55 521 1

原创 RUST与C/C++/Java/Go/Python应用领域比较

各语言适用的领域

2022-06-02 10:53:29 3496

原创 RUST标准库channel模块Queue源代码分析

RUST标准库中mpsc模块有一个用于多线程发,单线程收的Queue实现,极其精巧,值得学习及牢记//以下是简单的FIFO的队列实现pub enum PopResult<T> { //返回队列成员 Data(T), //队列为空 Empty, //队列的一致性出错 Inconsistent,}//节点结构struct Node<T> { //next指针,利用原子指针实现多线程的Sync,值得牢记 next:

2022-05-31 08:38:56 416

原创 RUST中所有权/生命周期/借用本质探讨

探讨了RUST中所有权,生命周期,借用的本质及他们的联系

2022-05-04 11:00:39 384

原创 RUST标准库中双向链表LinkedList<T>源代码分析

对RUST标准库的LinkedList的源代码进行了分析。从中可以看出RUST相对于其他语言的独特点在哪里。

2022-04-29 07:36:17 1128

原创 深入RUST标准库内核(七)NonZero<T>/char/str/切片排序

主要对RUST的char类型,str类型标准库中的代码进行了分析

2022-04-18 15:41:15 355

原创 从RUST标准库插入排序代码实现看RUST所有权的本质

内容为下书章节摘录深入RUST标准库内核(序言)深入RUST标准库内核(一)概述深入RUST标准库内核(二)内存深入RUST标准库内核(三)内存续深入RUST标准库内核(四)基础Trait深入RUST标准库内核(五)Iterator深入RUST标准库内核(六)基础类型切片排序需要对切片内元素做大量的迁移,这些迁移的所有权怎么处理的?这个处理揭示了RUST所有权的本质/// 插入排序, 复杂度O(n^2).fn insertion_sort<T, F>(v: &mut

2022-02-24 12:41:49 511

原创 RUST安全及高效的一个代码例

利用一个常用的功能代码说明RUST的高效率,无错的开发代码的能力

2022-02-12 12:20:51 749

原创 RUST中match语法的一个疑难点解析

RUST在针对引用类型做match时,match对类型的处理上会有一些使人困惑的地方,本文做了解释

2022-02-10 11:45:06 1485

原创 深入RUST标准库内核(六)—Iterator

分析RUST原生类型的标准库,包括NonZero,大小端变换,整形与字节的转换等等标准库代码。

2022-02-08 16:32:19 906

原创 RUST中的字节序的大小端变换

给出RUST中字节序大小端变换的相关信息

2022-02-08 16:25:55 1748

原创 深入RUST标准库内核(五)Try/Index/IndexMut/Range trait

本节主要对标准库的Iterator的代码实现做分析。具体包括Range的Iterator实现,切片类型的Iterator实现,字符串的Iterator实现,数组的Iterator实现。并给出切片排序算法之一的插入排序代码分析

2022-02-05 22:23:36 749

原创 深入RUST标准库内核(四)intrinsic/Option<T>/Result<T,E>

本文主要对RUST标准库的一些Trait代码做分析。如?号重载 Try Trait, 范围Range运算符重载,下标[]运算符重载等。另外,Iterator也是主要部分。

2022-01-31 11:17:51 968

原创 深入RUST标准库内核(三)NonNull<T>/Unique<T>/mem::replace/Layout/GlobalAlloc

本节对rust 标准库的core::mem模块进行了代码分析。重点是MaybeUninit类型结构及结构体行为。

2022-01-21 10:29:08 1522

原创 深入RUST标准库内核(序言)

说明了本书由来,RUST标准库代码分析的顺序及作者对RUST的一些理解。

2022-01-21 08:27:15 1029

原创 深入RUST标准库内核(二)裸指针/MaybeUninit<T>

本节主要对RUST标准库中core::alloc, core::ptr做了若干代码分析。澄清一些核心的概念。

2022-01-19 11:12:07 2056

原创 深入RUST标准库内核(一)标准库内容概述

本文将研究RUST标准库的代码,力图揭示RUST编码的奥秘。本文不适合RUST的初学者,也不适合对RUST的内存安全模型无法理解的程序员。本文会给那些对RUST深感兴趣且已经入门,希望更好的提高RUST技巧的程序员巨大帮助。

2022-01-19 10:32:25 1951 1

原创 RUST所有权实现

本文用代码的例子说明了rust所有权的本质。

2021-10-11 17:39:38 113

原创 RUST生命周期浅析

struct TestLifetime <'a> 这句话是什么意思?答案是:如果你用struct TestLifetime声明了 test变量,那编译器会将test的生命周期标记成’a,你可以用用这个标记规定结构体内的变量的生命周期。struct TestLifetime <'a> {item: 'a &i32;}意思是如果定义了let i=5;let test= TestLifetime{&i};则 i 的必须活的不比test短,也即i的作用域要大于t

2021-09-18 07:50:35 318

原创 为什么需要创建型模式

举个例子,比如TCP/IP协议栈,最初我们只考虑主机本身就好了。后来出现了虚拟机的需求,需要多个独立的协议栈实体。如果程序最初是按照创建型模式设计的协议栈,那我们在虚拟机需求出现的时候,只需要简单的多创建协议栈的实体即可满足需求。如果没有用创建型模式,那协议栈的源代码将经历复杂的重构,测试,应用,排错过程。同样的例子也发生在路由协议适配VRF出现时的情况。所以,使用创建型模式就是为了适配日后未知的程序扩展,当变化来临时,你的程序架构已经做好了准备。可以在仅增加少量,必要的代码即可实现别人眼中非常巨大的需求

2021-02-06 20:20:11 120

原创 3G/4G/5G通信模块重启设计细节

无线通信模块本身实际是一个小网关,网关总是会因为各种原因崩溃的。在崩溃时,最后的保障就是重启,这个重启需要很多设计细节考虑。1.硬件上是需要硬件重启开关的,这是最后的一个保障。想试图利用软件狗重启整机进而使得模块重启无法生效,必须要整机硬重启才能使通信模块硬复位,从而从某些死机中恢复。整机硬重启对于运维人员来说就意味着现场操作。运维成本高昂且让问题显化。所以对模块的硬复位开关可以减少很多烦恼。2.应定时监测通信,在通信量较少的情况下尽可能的软复位模块。模块运行时间越长,越有可能发生非要硬复位不可的问题。

2021-02-06 10:10:29 959

原创 面对对象杂谈

首先要了解为什么会出现面对对象。面对对象成为流行是从C++开始。C++是在C的基础上创建起来的。优秀的程序员已经形成了一整套如何用C设计出良好的程序结构的原则,使得C程序能够具备良好的可移植性,可维护性,可测试性,可伸缩性。但这套原则对于初出茅庐的程序员难以理解,沟通的成本过高。所以,创建一套内嵌这套原则的语言应该是个好主意。这套原则被起了个名字"面对对象",语言需要兼容C看起来也是个不错的主意。但“理想很丰满,现实很骨感”,C++太自由了,导致程序员仍然面临和C一样的面对对象学习曲线。实际上,面对对象本

2021-02-05 20:47:44 161 2

原创 FM无线数据传输协议细节

FM无线通信因为无线干扰大,而面向连接的传输方式协议复杂,所以很多时候用固定次数的重发完成干扰规避。重发的时候有一个细节可以优化传输效率,即每次重发的时候可以把新增的事件加入发送数据帧中。这样可以规避因为重发导致新增的事件被延迟发送,引起导致响应不及时。通常的FM无线通信不适合用于实时数据传输,因为太容易丢失信息。FM无线通信更适合传输一些数据丢失若干次也无所谓的系统,如胎压检测等,其优势是成本低且技术成熟。...

2021-02-05 10:55:08 993

原创 无线吸尘器软件魔鬼细节

无线吸尘器的软件从规模上看不足1000行,但就这1000行代码中,魔鬼细节确不少。1.按键的锁机制,无线吸尘器的按键易误触,有时甚至是在货物运输途中被误触。这就需要对按键增加锁定及解锁机制。操作要不能反人类。2.电池管理主服务对象是马达,但如果有另一个用电单位如灯光照明,那要注意,一定要整体设置一个电池截止供电电压,否则灯光照明可能会把电池耗尽到充电电压以下,导致无法再充电。3.电池电量指示灯实际上是需要较复杂的算法来支持其正确工作的,如果仅仅用电池电压或充电电流做判断,那工作肯定不正常,尤其是考虑到

2021-02-03 07:15:25 134

原创 中断还是定时轮询

中断还是定时轮询中断实际上是温室里的花朵,看起来美,但真正处于复杂和极端的环境时,硬件可靠性非常值得怀疑。因此,只要计算力够,就建议采用轮询的方式。举个例子,曾经做过局端DSL驱动,因为电话线问题,DSL芯片不间断发出线路中断告警,导致CPU被中断淹没,这个问题最简单的方法是采用轮询,复杂一点的话对单位时间中断数设限,超过限制就将相关中断关掉。编程中任何一个系统外部信号的处理,第一反应就是如果这个信号不正常应该怎么办?这会带来非常多的创造性方法以及大量的工作量。但也可能会让你觉得换一个高性能硬件是最简单

2021-02-03 07:09:38 153

原创 Cisco VPP(vectors packets processing)中Vectors解析

Cisco VPP中vectors解析vectors 的本质外在表现为什么定义vectors结构总结Vectors的使用作为常规的内存操作来使用作为常用数据结构使用数组其他结构vectors 的本质外在表现很简单,实际上就是一个动态的可变大小数组。这个数组:每个元素的大小可以变化,数组大小可以变化。从而使得其可以作为任何数据结构的存储结构,事实上,VPP就是这样做的,所有数据结构的存储结...

2019-07-23 18:45:51 722

空空如也

空空如也

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

TA关注的人

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