Rust 语言从入门到实战
唐刚
Rust 语言中文社区联合创始人
5266 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 36 讲
Rust 语言从入门到实战
15
15
1.0x
00:00/00:00
登录|注册

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
立即购买
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • seven9t
    unsafe改名叫trustMe多好

    作者回复: 这个问题被激烈讨论过,为你的创意点赞👍

    2024-01-21归属地:广东
    2
  • Geek_03197d
    raw 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
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部