Copyright © 2022-2024 aizws.net · 网站版本: v1.2.6·内部版本: v1.23.3·
页面加载耗时 0.00 毫秒·物理内存 60.4MB ·虚拟内存 1300.0MB
欢迎来到 AI 中文社区(简称 AI 中文社),这里是学习交流 AI 人工智能技术的中文社区。 为了更好的体验,本站推荐使用 Chrome 浏览器。
Rust 安全代码
安全与非安全代码对比 安全与非安全代码交互 非安全Rust能做什么 编写非安全代码数据布局
repr(Rust) 类型中的奇行种 可选的数据表达方式所有权
所有权 引用 别名 生命周期 生命周期的局限 省略生命周期 无界生命周期 高阶trait边界 子类型和变性 Drop检查 幽灵数据 分解借用类型转换
类型转换 强制类型转换 点操作符 显式类型转换 变形未初始化内存
未初始化内存 安全方式 Drop标志 非安全方式资源管理
基于所有权的资源管理 构造函数 析构函数 泄露展开
展开 异常安全性 污染并发
并发 竞争 Send和Sync 原子操作实现 Vec
实现 Vec 布局 内存分配 push和pop 回收资源 DeRef 插入和删除 IntoIter RawVec Drain 处理零尺寸类型 最终代码FFI
FFI到目前为止,我们的程序还是一堆散乱的字节,而类型系统拍马赶到教给我们如何正确使用这些字节。将字节翻译成有意义的类型,这件事有两个主要问题:将完全相同的一组字节解析成不同的类型,以及让不同的字节在不同的类型中有相同的含义。因为Rust喜欢将一些重要的属性附加在类型上,这些问题就变得尤其普遍。所以Rust也提供了许多方法解决这一问题。
我们先来看看安全Rust如何重新解析值。最普通的方法是将值的各个组成部分拆分出来,再用它们重新构建一个新的类型的值。例如
struct Foo { x: u32, y: u16, } struct Bar { a: u32, b: u16, } fn reinterpret(foo: Foo) -> Bar { let Foo { x, y } = foo; Bar { a: x, b: y } }
可是这种方法显然很烦人。对于一般的类型转换场景,Rust提供了更加人性化的选择。
在一些特定场景中,类型会被隐式地强制转换。这种转换通常导致类型被“弱化”,主要针对指针和生命周期。主要目的是让Rust适用于更多的场景,并且基本上是无害的。强制转换包括下面几种:如下几种类型之间允许进行强制转换:传递 ...
全部【编程教程】内容源自网络,仅供学习用途,若有遗漏或版权任何问题,请及时【联系我们】 ,按下 Ctrl+D 或 ⌘+D 收藏本站。