Rust修仙之道 第十二章:宽度境 · 类型尺寸认知与不定形之术
第十二章:宽度境 · 类型尺寸认知与不定形之术
“形有大小,道有边界。不能测其尺者,不可轻控其灵。”
当顾行云修炼 Trait 技法至高阶,试图为“无定形灵体”设下术式时,Rust 编译灵印忽然警告:
“此灵不可确定尺寸:未满足
Sized
契约。”
他惊觉自己踏入了 Rust 类型系统的边界之门。
一、Sized
灵印:能否知其尺寸
Rust 编译术默认:
所有术体类型都需满足
Sized
约定;即:类型大小在编译时可知,堆栈空间可定。
基础类型如 i32
, struct
, enum
都是 Sized
;
而“接口灵体”如 dyn Trait
或 [T]
由于大小未知,默认 非 Sized
。
二、?Sized
:宽容印·允许未定形灵体
顾行云阅读灵术古卷,发现可使用 ?Sized
解除默认 Sized
限制:
fn log_info<T: ?Sized>(item: &T) {
// 可接受 T 为 [str], [u8], dyn Trait 等非定长灵体
}
他首次领悟:?Sized
并非要你接受“不规则”,而是提醒你“不要做无法保证的事”。
示例:
struct BoxedInfo<T: ?Sized> {
value: Box<T>,
}
他成功构建可容纳“任意形状灵气”的容器!
三、动态大小类型(DST)示例
类型 | Sized ? |
备注 |
---|---|---|
str |
必须通过引用或 Box<str> 使用 |
|
[T] |
切片,如 [i32] ,需用 &[T] 或 Box<[T]> 包装 |
|
dyn Trait |
Trait 对象,用于运行时多态 |
顾行云感悟:“无定形灵体并非不可控,而是需用封印器器皿辅助承载。”
四、裸指术(*const T
/ *mut T
):禁术之边
修炼至此,他误入“原生指针殿”,看见一行禁术铭文:
let p: *const i32 = &10 as *const i32;
他意识到这是超越 Borrow Checker 审核的灵指术,需手动保障:
无借用检查!
可发生悬挂、错误访问、甚至灵链崩塌!
于是他铭记于心:“裸指慎用,除非跨界。”
心诀 · 尺寸之道
有形可测者,皆可控;无形需封者,慎托之;知其大小,乃入混元之门。
Rust修仙之道 第十二章:宽度境 · 类型尺寸认知与不定形之术的更多相关文章
- <构建之法>第十一章、十二章有感
十一章:软件设计与实现 工作时要懂得平衡进度和质量.我一直有一个困扰:像我们团队这次做 男神女神配 社区交友网,我负责主页的设计及内容模块,有个队友负责网站的注册和登录模块,有个队友负责搜索模块,有个 ...
- C primer plus 第五版十二章习题
看完C prime plus(第五版)第十二章,随带完成了后面的习题. 1.不使用全局变量,重写程序清单12.4的程序. 先贴出12.4的程序,方便对照: /* global.c --- 使用外部变量 ...
- PRML读书会第十二章 Continuous Latent Variables(PCA,Principal Component Analysis,PPCA,核PCA,Autoencoder,非线性流形)
主讲人 戴玮 (新浪微博: @戴玮_CASIA) Wilbur_中博(1954123) 20:00:49 我今天讲PRML的第十二章,连续隐变量.既然有连续隐变量,一定也有离散隐变量,那么离散隐变量是 ...
- sql 入门经典(第五版) Ryan Stephens 学习笔记 (第六,七,八,九,十章,十一章,十二章)
第六章: 管理数据库事务 事务 是 由第五章 数据操作语言完成的 DML ,是对数据库锁做的一个操作或者修改. 所有事务都有开始和结束 事务可以被保存和撤销 如果事务在中途失败,事务中的任何部分都不 ...
- 《Linux命令行与shell脚本编程大全》 第二十二章 学习笔记
第二十二章:使用其他shell 什么是dash shell Debian的dash shell是ash shell的直系后代,ash shell是Unix系统上原来地Bourne shell的简化版本 ...
- 《Android群英传》读书笔记 (5) 第十一章 搭建云端服务器 + 第十二章 Android 5.X新特性详解 + 第十三章 Android实例提高
第十一章 搭建云端服务器 该章主要介绍了移动后端服务的概念以及Bmob的使用,比较简单,所以略过不总结. 第十三章 Android实例提高 该章主要介绍了拼图游戏和2048的小项目实例,主要是代码,所 ...
- [CSAPP笔记][第十二章并发编程]
第十二章 并发编程 如果逻辑控制流在时间上是重叠,那么它们就是并发的(concurrent).这种常见的现象称为并发(concurrency). 硬件异常处理程序,进程和Unix信号处理程序都是大家熟 ...
- perl5 第十二章 Perl5中的引用/指针
第十二章 Perl5中的引用/指针 by flamephoenix 一.引用简介二.使用引用三.使用反斜线(\)操作符四.引用和数组五.多维数组六.子程序的引用 子程序模板七.数组与子程序八.文件句 ...
- 第十二章——SQLServer统计信息(4)——在过滤索引上的统计信息
原文:第十二章--SQLServer统计信息(4)--在过滤索引上的统计信息 前言: 从2008开始,引入了一个增强非聚集索引的新功能--过滤索引(filter index),可以使用带有where条 ...
- 第十二章——SQLServer统计信息(3)——发现过期统计信息并处理
原文:第十二章--SQLServer统计信息(3)--发现过期统计信息并处理 前言: 统计信息是关于谓词中的数据分布的主要信息源,如果不知道具体的数据分布,优化器不能获得预估的数据集,从而不能统计需要 ...
随机推荐
- 🎀CSDN-自定义公众号卡片
简介 在CSDN新增自定义模块,创建自己的公众号卡片用于展示. 效果展示 公众号卡片 动态效果 鼠标移入前为公众号指引页 鼠标移入后显示公众号二维码 切换动画为动态反转 首页效果 前提 CSDN需开通 ...
- 8.6K star!完全免费+本地运行+无需GPU,这款AI搜索聚合神器绝了!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 FreeAskInternet是一款革命性的开源项目,它完美结合了多引擎搜索和智能语言模型, ...
- 6.4K star!企业级流程引擎黑马,低代码开发竟能如此高效!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 AgileBPM 是一个基于Activiti7深度优化的企业级流程引擎开发平台,支持低代码. ...
- 【HUST】论于渊《Orange‘s:一个操作系统的实现》第三章中PagingDemoProc的必要性,是否可以直接调用LinearAddrDemo?
相关代码如下(第三章pmtest9a.asm改写): LinearAddrDemo equ 00401000h ProcHust equ 00401000h ProcIS19 equ 00501000 ...
- PC端自动化测试实战教程-4-pywinauto 操作PC端应用程序窗口 - 上篇(详细教程)
1.简介 前几篇通过宏哥的讲解和分享,已经知道如何将PC端的应用程序启动,以及如何连接已启动的应用程序,那么启动和连接上之后呢?不用说当然是操作应用程序了,怎么操作呢?请听宏哥给你娓娓道来,所以今天主 ...
- Java基础之“Double类型,保留两位小数,避免因小数过长导致乱码问题”
保留两位小数 方案一 Double totalSaleAmount = 4.174558045899999E7; DecimalFormat df = new DecimalFormat(" ...
- C# 控制台程序验证await立即返回
class Program{ public static volatile bool flag = true; public static void Main() { Action a = null; ...
- C#网络编程(五)----细嗦TCP粘包
前情提要 四层网络模型各司其职,消息(SDU)在进入每一层时都会多加一个报头(PCI),这个PCI记录着该SDU的一些关键统计信息.SDU+PCI合并起来就组成一个完整的消息,简称为PDU 链路层:帧 ...
- WPF 基于Transform实现画布超出边界触发计算
有些场景需要对画布边界做界限控制,此时需要计算画布的四个方向的界限和极值 先看效果图: 画布在通过RenderTransform 做变换,由于在变换的过程中,实际的宽高没有改变,需要通过Transfo ...
- 【公众号搬运】React-Native开发鸿蒙NEXT(7)-上线
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...