从代码的角度来看,Rust安全的本质是什么

从代码的角度来看,Rust安全的本质是:RUST的安全本质是RUST语言提供了一个工具,当程序员遇到通用的安全问题时,可以利用这个工具实现针对这个通用的安全问题的封装数据结构类型及方法形成库,以后遇到此类安全问题便使用这个库,确保这个安全问题不再发生。

一、Rust安全的本质

如果仅从编译器提供的功能的角度看,RUST实际上是没有安全性的。安全性是依靠标准库的代码及程序员的代码来实现。

RUST编译器提供的与安全特性有关的内容:

  1. 所有权+生命周期+drop。所有权及生命周期的目的都是为了最后编译器能够正确的调用drop。但这只是提供了一个安全性的机制,而不是安全性本身。
  2. 借用规则,即可变借用及不可变借用的规则

除此之外,编译器并没有其他安全机制了。我们熟知的所有的与RUST具体的数据类型相关的安全概念,实际上都不是RUST编译器自身的特性,而是完全由官方语言库来实现。

RUST的安全本质是RUST语言提供了一个工具,当程序员遇到通用的安全问题时,可以利用这个工具实现针对这个通用的安全问题的封装数据结构类型及方法形成库,以后遇到此类安全问题便使用这个库,确保这个安全问题不再发生。

官方语言库针对程序界总结的编程安全问题,定义了安全数据结构类型,然后利用编译器提供的机制来实现这个数据结构类型的关联函数,方法,trait,保证利用这些类型编写的代码满足内存安全,分支安全,溢出安全,异常处理等等。

但是严格来说,RUST语言和库是相对独立的。正如C语言的标准库有很多不同的实现,RUST也具备同样的性质。因此RUST的安全不是语言本身内嵌的,仍然是一帮高水平的程序员实现了一个安全的程序架构的结果。

二、RUST官方语言库安全戏法的一些套路

1、安全类型结构基本上是一个封装类型结构, 真正要操作的原始变量被封装在内,并且,此封装类型结构拥有原始变量的所有权。例如:RefCell<T>, 智能指针,Rc<T>,Arc<T>,Mutex<T>等。用于实现不同场景下的安全。

2、实现封装类型结构的Drop trait,完成生命周期结束时需要的清理操作,例如,释放堆内存,关闭文件描述符等

3、实现对封装类型结构的借用函数,对于复杂操作,往往需要一个额外的专用于借用的封装类型结构及可变借用的封装类型结构,如Ref<T>, RefMut<T>分别是RefCell的借用及可变借用的结构。不同的封装类型根据意义的不同会有不同的借用操作,如RefCell的borrow(), borrow_mut(), Rc<T>的clone(), Mutex<T>的lock(),但都是满足在某种安全机制下的获取原始变量的借用。

4、实现对于封装类型结构或者借用封装类型结构的Deref trait及 DerefMut trait,将原始变量的引用得到,从而实现对于原始结构的访问及更改。

5、实现对于借用封装类型的Drop trait,完成针对借用的清理工作,如减少计数,释放锁等。

RUST的安全实际上都是由这些安全封装类型完成。可以说,每一个安全封装类型都是程序员的血汗得来的教训。

延伸阅读

Rust语言是什么

Rust是一门系统编程语言,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言。Rust在语法上和C++类似,但是设计者想要在保证性能的同时提供更好的内存安全。 Rust最初是由Mozilla研究院的Graydon Hoare设计创造,然后在Dave Herman, Brendan Eich以及很多其他人的贡献下逐步完善的。Rust的设计者们通过在研发Servo网站浏览器布局引擎过程中积累的经验优化了Rust语言和Rust编译器。

创建这个新语言的目的是为了解决一个顽疾:软件的演进速度大大低于硬件的演进,软件在语言级别上无法真正利用多核计算带来的性能提升。Rust是针对多核体系提出的语言,并且吸收一些其他动态语言的重要特性,比如不需要管理内存,比如不会出现Null指针等等。

Rust致力于成为优雅解决高并发和高安全性系统问题的编程语言,适用于大型场景,即创造维护能够保持大型系统完整的边界。这就导致了它强调安全,内存布局控制和并发的特点。标准Rust性能与标准C++性能不相上下。

文章标题:从代码的角度来看,Rust安全的本质是什么,发布者:E.Z,转载请注明出处:https://worktile.com/kb/p/47169

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年3月18日 下午4:29
下一篇 2023年3月18日 下午4:58

相关推荐

  • 板栗看板app的优缺点分别是什么

    板栗看板app的主要优点在于:开箱即用、上手简单、有比较丰富的模板,能够结合飞书使用。板栗看板app的主要缺点在于:1、更适用于个人或十多人的小型团队,无法满足中大型团队复杂的看板管理需求;2、缺少在制品限制(WIP )、完成的定义(DoD)等标准看板能力。 一、板栗看板app的优缺点是什么 板栗看…

    2023年2月1日
    14200
  • 算法工程师与高级算法工程师的区别

    算法工程师与高级算法工程师的区别有:1、经验与资历;2、工作职责;3、解决问题的能力;4、团队合作与领导力;5、项目管理;6、技术深度和广度。其中,经验与资历指的是两者在从业年限和所获成就上的差异。 1、经验与资历 算法工程师:通常是刚刚入行或有几年工作经验的人员,可能主要负责某一特定的算法或任务。…

    2023年7月30日
    7000
  • 如何有效解决员工的职业发展难题

    解决员工的职业发展难题主要涉及1、识别职业发展需求;2、创建个人化发展计划;3、提供适当的培训和教育资源;4、实施持续的绩效评估;5、加强领导和团队协作。其中,创建个人化发展计划是关键环节,通过对每位员工职业目标和能力的深入了解,制定符合个人需求的成长路径,从而促使员工的职业生涯健康发展。 1、识别…

    2023年8月21日
    3600
  • linux远程连接工具有哪些

    linux远程连接工具有以下几个:1、Xshell;2、SecureCRT;3、WinSCP;4、PuTTY;5、MobaXterm;6、FinalShell。Xshell是一个非常强大的安全终端模拟软件,它支持 SSH1, SSH2, 以及 Windows 平台的 TELNET 协议。

    2022年12月31日
    3.7K00
  • Spring Cloud 和 Nginx 有哪些区别

    区别是:Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、数据监控等。而Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,…

    2023年2月14日
    20100
  • rpc协议和http协议的关系和区别是什么

    rpc协议和http协议的关系和区别是:1、关系;2、工作原理;3、应用场景;4、性能比较。关系是指,RPC(Remote Procedure Call,远程过程调用)协议和HTTP(Hypertext Transfer Protocol,超文本传输协议)协议都是应用层协议。 一、关系 RPC(Re…

    2023年7月30日
    8700
  • 什么是 Functional Programming

    Functional Programming是函数式编程,或称函数程序设计,又称泛函编程,是一种编程典范,它将计算机运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。函数编程语言最重要的基础是λ演算。而且λ演算的函数可以接受函数当作输入(引数)和输出(传出值)。 Functional Pr…

    2023年2月22日
    10100
  • 地图瓦片一般用什么数据库来存储管理

    一般用以下数据库:一、MySQL;二、PostgreSQL;三、MongoDB;四、Amazon S3。MySQL是一个广泛使用的关系型数据库管理系统,它支持地图瓦片的存储和管理。使用MySQL存储和管理地图瓦片需要创建一个包含“x”、“y”和“z”等字段的表,分别表示瓦片的行、列和缩放级别。 一、…

    2023年5月30日
    22300
  • 怎么做月时序进度

    做月时序进度要包括以下几点:一、明确目标;二、识别可行的任务;三、确定时间表;四、分配资源;五、监测和控制。在制定月时序进度之前,需要明确目标。目标应该是具体、可衡量、可实现的,并且应该与项目的整体目标相一致。 一、明确目标 在制定月时序进度之前,需要明确目标。目标应该是具体、可衡量、可实现的,并且…

    2023年4月30日
    6600
  • 项目进度管理要求有哪些

    项目进度管理要求有:一、先从管理好自己的时间出发;二、整理活动清单;三、善于使用80/20原则;四、活动和任务排序并建制里程碑;五、避免事无巨细、面面俱到;六、项目的计划和进度表;七、关键路径法和时间压缩;八、借助时间管理工具,善假于物。 一、先从管理好自己的时间出发 时间管理是项目经理的一项基本技…

    2023年4月27日
    11500

发表回复

登录后才能评论
联系我们
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部