29|Unsafe编程(上): Unsafe Rust中那些被封印的能力
唐刚
你好,我是 Mike。
这门课目前已接近尾声,剩下的两节课我准备讲讲 Rust 中看起来有点黑魔法的部分——Unsafe Rust。这一节课我们先来聊聊相关的概念。
在前面课程的学习中,你有没有感觉到,Rust 编译器就像是一个严厉的大师傅,或者一个贴心的小助手,在你身边陪你结对编程,你写代码的时候,他盯着屏幕,时不时提醒你。如果某个时刻,这个大师傅或小助手突然离开了,你会不会慌?就像刚提车,第一次独自上路的那种感觉。
三个王国
Unsafe Rust 就是这样一个领域,进入这个领域,你突然拥有了几种必杀技能,但是身边已经没有大师傅同行了,只能靠你自己完全控制这几种技能的使用。使用得好,威力无穷。使用不好,对自己也会造成巨大伤害。Unsafe Rust 就是这样一个相对独立的领域。前面我们讲到过,Async Rust 也是相对独立的一个附属王国,现在又多了一个 Unsafe Rust 这样的附属王国。
Rust 语言可以看作是这三块疆域的合体,它们共同组成了一个联盟 Rust 王国。你甚至可以把 Rust 语言看成包含上面三种编程语言的一种混合语言。所以很多人抱怨 Rust 难学,也是可以理解的。
现在让我们把注意力集中在 Unsafe Rust 这个王国里面。它到底是什么样的?简单地说,你可以把它理解成这个王国里面住着一个 C 语言族的国王。也就是说,C 语言能做的事情,Unsafe Rust 都能做。C 语言能做哪些事情呢?理论上来说,它能做计算机中的任何事情。因此,在 Unsafe Rust 中,你也能做计算机中的任何事情。C 的强大威力来源于它锋利的指针,而在 Unsafe Rust 中也提供了这种能力。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
Rust语言中的Unsafe Rust部分介绍了Unsafe Rust的概念和特性。Unsafe Rust允许开发者使用一些被封印的能力,如解引用原始指针、调用unsafe函数或方法、访问或修改可变的静态变量、实现一个unsafe trait以及访问union中的字段。文章通过示例和代码演示了这些能力的使用方法,以及使用unsafe关键字的注意事项。此外,还介绍了原始指针、Box<T>转成原始指针以及null指针的概念和用法。Unsafe Rust提供了一些类似C语言的能力,但需要开发者自行保证代码的安全性。文章强调了在Unsafe Rust中使用这些能力需要谨慎,并且指出了Rust编译器对unsafe代码的检查范围。通过本文的介绍,读者可以了解Unsafe Rust的基本概念和使用方法,以及与Safe Rust的区别和联系。文章还探讨了Rust的安全性设计理念,强调了在需要使用Unsafe Rust时,应该尽量将其封装在一个极小层,以确保整体代码的安全性。最后,文章通过标准库中的unsafe示例展示了Unsafe Rust在实际应用中的一些场景和优势。文章还介绍了Rust与C语言的交互,以及Rust在FFI方面的优势,强调了Rust的二进制兼容性和与C语言的无缝互通。文章指出了Rust在FFI方面的性能优势,以及与动态语言的差异。最后,文章展望了Rust在嵌入式、工业控制、航空航天、自动驾驶等领域的潜力,并强调了Rust作为一种安全编程语言的重要性。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Rust 语言从入门到实战》,新⼈⾸单¥59
《Rust 语言从入门到实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(4)
- 最新
- 精选
- seven9tunsafe改名叫trustMe多好
作者回复: 这个问题被激烈讨论过,为你的创意点赞👍
2024-01-21归属地:广东2 - Geek_03197draw pointer 翻译成 裸指针 是不是更通用?
作者回复: 裸指针 也行。 👍
2024-02-27归属地:江苏 - Apa琦tokio库也是用unsafe实现的么,rust自己没有实现Async,也就只能使用unsafe调用c语言库实现了
作者回复: tokio库底层有少量用到unsafe
2024-01-08归属地:上海2 - 十八哥Unsafe Rust 比 C 语言更安全吗?是的。虽然是Unsafe,可以用指针。但是,Unsafe依然属于所有权这样的语法范畴。2023-12-29归属地:天津1
收起评论