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)--发现过期统计信息并处理 前言: 统计信息是关于谓词中的数据分布的主要信息源,如果不知道具体的数据分布,优化器不能获得预估的数据集,从而不能统计需要 ...
随机推荐
- SpringBoot校验请求Json参数
spring boot 校验请求json参数 在后端开发中,通过接口和参数传输来进行与前端交互,才可以让一个项目成型. 由于全后端隔离的方式,所以有时候需要不那么信任前端,也就是在验证当前操作是否有权 ...
- SpringMVC处理请求源码分析
一.先从Servlet案例说起 1.编写Servlet代码 2.配置web.xml(可选) 二.从DispatcherServlet说起 有Servlet基础的同学应该都知道,前端的每一个请求都会由一 ...
- Golang解决fatal error: all goroutines are asleep - deadlock!
今天进行一个协程操作demo时总是报错 //workerpool.go package main import ( "fmt" "time" ) //工作线程 ...
- easy-query隐式Group革命性OLAP优化JAVA下最强查询ORM没有之一子查询合并
easy-query JAVA下最强查询ORM没有之一的任意子查询合并革命性OLAP优化 前言 对于大部分OLTP而言的查询市面上常见的orm已经能很好的处理,只要建立好对象关系那么就可以非常简单的实 ...
- Web前端入门第 39 问:细说 CSS position 定位布局
CSS 的定位属性 position 可以把元素从文档流中拧出来,让其显示在其他位置. 但凡元素定位属性加身,元素位置便不再受文档流控制,这时候什么 flex.grid 都不好使了,定位的元素已然跳出 ...
- C# 线程(二)——Thread学习
参照:C#多线程 - .NET开发菜鸟 - 博客园 (cnblogs.com) C# Thread 线程状态知识 - 大圣的笑 - 博客园 (cnblogs.com) 背景: 在.NET Framew ...
- Sentinel——系统规则(系统自适应保护)
目录 系统自适应保护 系统规则 系统自适应保护 Sentinel 系统自适应保护从整体维度对应用入口流量进行控制,结合应用的 Load.总体平均 RT.入口 QPS 和线程数等几个维度的监控指标,让系 ...
- HMM (隐马尔可夫) 推导 (下) - 参数估计 (EM)
HMM (隐马尔可夫) 推导 (下) - 参数估计 (EM) 回顾 HMM 上篇介绍了HMM这样的一种时序类模型, 即描述了一些观测现象的产生, 是由我们很难观测到的 "隐变量因子" ...
- windows11 安装CUDA Toolkit,Python,Anaconda,PyTorch并使用DeepSeek 多模态模型 Janus-Pro识别和生成图片
一.概述 因为公司网络做了严格限制,必须使用账号登录,才能上网.必须是指定的ip地址和MAC地址设备才可以上网. windows11开启热点,安装第三方虚拟机软件,开启WSL2虚拟机都是被禁止的,否则 ...
- C# 之静态构造器与静态字段初始化器
public class Test { /// <summary> /// 静态字段初始化器会在调用静态构造器前运行. /// 如果类型没有静态构造器,字段会在类型被使用前或运行时中更早的 ...