微软解释为什么Rust是系统编程的最佳选择

上周,MSRC(微软安全响应中心)透露出拥抱 Rust 的打算,随后他们将这个话题扩展为一个系列,进一步阐述了使用安全的系统编程语言的的必要性,以及选择 Rust 的原因。

在该系列最新一篇文章中,MSRC 团队首席云开发倡导者 Ryan Levick 解释了为什么他们认为 Rust 编程语言目前是业界采用的最佳选择,不仅仅是因为它能够以内存安全的方式编写系统级程序。

“首先,已经有很多出色的内存安全语言在微软内外广泛使用,包括 .NET 语言(像是 C# 或 F#)和其他语言(例如 Swift、Go 和 Python)。我们鼓励目前使用 C 或 C++ 的人将其中任意一种语言纳入考虑。不过现在谈论的是对安全的系统编程语言的需求,此类工作负载需要 C、C++ 和 Rust 能够提供的速度和可预测的性能。通过垃圾回收实现内存安全的语言不是系统编程的理想选择,因为它们的运行时间会导致不可预测的性能和不必要的成本。”

640?wx_fmt=jpeg

性能和控制

Levick 指出,最好先考虑一下无法从 C 和 C++ 放弃的东西——性能和控制,就能更清楚地明白 Rust 为什么是一个好的选择。像 C 和 C++ 一样,Rust 有一个最小的可选“运行时(runtime)”。Rust 的标准库同样依赖于 libc,但标准库也是可选的,因此在没有操作系统的平台上运行也是可能的。

仍然像 C 和 C++ 一样,Rust 为程序员在何时分配内存以及分配内存的多少上提供了精细的控制,使程序员能够非常清楚地知道程序每次运行时的确切执行方式。在原始速度、控制和可预测性方面,这对于性能来说意味着什么?那就是,“Rust、C 和 C++ 可以用类似的术语来思考”。

安全

Rust 与 C 和 C++ 的区别在于其强大的安全保障,某种程度上来说 Rust 完全是内存安全(memory safe)的。正如之前那篇文章提到的,微软大约 70% 的安全问题是内存安全问题。如果这些软件用 Rust 编写,那么这 70% 的安全问题很可能就不存在。

在系统编程中,有时程序员必须执行无法静态验证为安全的操作。Rust 为程序员提供了将这些操作封装在安全抽象中的工具,这意味着曾经降级为代码注释或约定的东西可以由 Rust 编译器静态强制执行。

不仅仅是性能与安全

Rust 最初引起 MSRC 的兴趣正是由于上述性能与安全方面的特性。但它的的魅力不止于此,已经有其他微软团队开始采用 Rust,主要出于以下原因:

  • 根据微软内部调查,采用它的最主要原因是“精密性”(correctness)——“if it compiles, then it works”。

  • Rust 静态地强制执行程序的许多属性,已经远超内存安全性,还包括空指针安全性和数据争用安全性(即没有来自两个或多个线程的一块内存的不同步访问)。

  • Rust 的丰富类型系统使编写富有表现力的程序成为可能。 具有相关数据的枚举和强大的 trait 系统等概念进一步强化了 Rust 的目标,即尽可能使程序无错误。

  • Rust 现有的社区对该语言有很大益处。虽然 Rust 仍然是一种年轻语言,但它拥有一个健康的生态系统,既能够促进开源社区发展强大,又能够支持生产用户。

Levick 表示有足够的理由相信 Rust 会有一个光明的未来,“虽然现在大规模采用 Rust 还为时过早,但早期采用 Rust 通常是非常积极且正面的”。他们相信 Rust 在编写安全的系统软件时会改变游戏规则。Rust 提供编写底层系统所需的性能和控制,同时使软件开发人员能够编写更健壮、安全的程序。

不过,MSRC 在研究 Rust 时发现了一些问题,其中包括如何规范 Rust 的“不安全”(unsafe)超集的使用,缺乏与 C++ 的一流互操作性,以及与现有 Microsoft 工具的互操作性。

这确实对微软采用 Rust 提出了挑战,但 MSRC 还是满怀期待:“我们对这些可能性感到兴奋。 虽然还有许多关于 Rust 如何适应整个 Microsoft 工程的问题需要弄清楚,但我们鼓励其他人一同加入,认真考虑这门语言,以满足他们的系统编程需求。

开源中国征稿啦!


开源中国 www.oschina.net 是目前备受关注、具有强大影响力的开源技术社区,拥有超过 400 万的开源技术精英。我们传播开源的理念,推广开源项目,为 IT 开发者提供一个发现、使用、并交流开源技术的平台。


现在我们开始对外征稿啦!如果你有优秀的技术文章想要分享,热点的行业资讯需要报道等等,欢迎联系开源中国进行投稿。投稿详情及联系方式请参见:我要投稿

640?

推荐阅读

Oracle Linux 8.0 发布

最权威编程语言排行榜发布6月更新,TS首进前十

微软拥抱 Rust,以作为 C 和 C++ 的安全替代方案

GitHub Trending 被国人霸榜,国外开发者不满

这款数据库将企业版功能100%开源还不收费,why?

640?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314754.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

你可能不知道的Docker资源限制

本篇内容涉及Docker的内存与CPU限制,可以用于在实际开发中为指定容器设置限制最大使用的资源量,预计阅读时间为5分钟。01—What is 资源限制?默认情况下,容器是没有资源限制的,它会尽可能地使用宿主机能够分配给它的资…

东南亚的IT公司,我劝你善良!

来源公众号:半佛仙人(ID:banfoSB)“真的救我一条‘狗命’,可以吗,谢谢您了,我真的撑不住了。”5月3日,小巴在朋友圈看到这条信息,附着一张长图,定位&#xff…

小白开学Asp.Net Core 《九》

小白开学Asp.Net Core 《九》 — — 前端篇(不务正业)在《小白开学Asp.Net Core 三》中使用了X-admin 2.x 和 Layui将管理后端的界面重新布局了,里面简单的介绍了layui table 的使用以及页面table所需的数据做了简单的封装。今天扩展学习下。…

.net持续集成sonarqube篇之sonarqube安装与基本配置

Sonarqube下载与安装Sonarqube下载地址是:https://www.sonarqube.org/downloads/下载版本有两个,一个是长期支持版,另一个是最新版,此处安装的是最新版,目前版本是7.3,下载的时候点击醒目的蓝色按钮即可(此时下载的是社区版),下面有三个无底色按钮下载链接,分别对应的是开发者版…

Codeforces Round #296 (Div. 1) D. Fuzzy Search FFT匹配字符串

传送门 文章目录题意:思路:题意: n,m,k≤2e5n,m,k\le2e5n,m,k≤2e5 思路: 直接考虑fftfftfft来匹配字符串。 由于kkk是给定的,所以难度低了很多,普通的字符串匹配不能处理这种可以范围相等的情况&#xf…

迁移 WinForm 应用从 dotnet framework 到 dotnetcore3.0

迁移 WinForm 应用从 dotnet framework 到 dotnetcore3.0Intro微软从 dotnetcore3.0 开始已经开始支持 wpf 以及 winform 的开发,dotnet core 3.0 preview7 已经发布,官方称已经可以准备上生产了 Production Ready迁移这篇WPF的迁移还是比较不错的&#…

HDU - 6992 Lawn of the Dead 线段树 + 思维

传送门 文章目录题意:思路:题意: 给你一张n∗mn*mn∗m的图,其中有kkk个点不能走,你只能向下和向右走,问你能到达多少点。 n,m,k≤1e5n,m,k\le1e5n,m,k≤1e5 思路: 可以发现每个点如果其左边和…

EZNEW.NET开发框架100%重磅开源

EZNEW.NET是一套基于领域驱动开发(DDD)为指导思想的企业级项目通用开发框架。通过将当前主流的开发技术和最佳的开发实践相结合,将开发中常见且严重影响开发效率的繁琐技术细节进行了模块化的封装,让开发人员能将更多更多精力聚焦在系统业务的分析中去&a…

黑暗爆炸OJ 3028. 食物 生成函数

传送门 文章目录题意:思考题意: 思考 考虑将每个条件转换成生成函数: (1)f1(x)1x2...11−x2(1)f_1(x)1x^2...\frac{1}{1-x^2}(1)f1​(x)1x2...1−x21​ (2)f2(x)1x1−x21−x(2)f_2(x)1x\frac{1-x^2}{1-x}(2)f2​(x)1x1−x1−x2​ (3)f3(x)1x…

「Azure」数据分析师有理由爱Azure之一-Azure能带给我们什么?

前面我们以相同的方式从数据分析师的视角介绍了Sqlserver,本系列亦同样地延续下去,同样是挖掘数据分析师值得使用的Azure云平台的功能。因云平台功能太多,笔者所接触的面也十分有限,有更专业的读者欢迎补充。对云服务的一点点小认…

POJ - 3734 Blocks 指数生成函数

传送门 文章目录题意:思路:题意: 一段长度为nnn的序列,你有红黄蓝绿四种颜色的砖块,问你铺砖的方案数,每块砖长度为111,其中红黄颜色个数必须为偶数。 思路: 考虑多重集合排列数&…

理想化的DevOps团队里只需要有Dev就够了?

(图片来源于网络)几天前,本公众号发布的一篇译文列举了9种DevOps团队结构适用类型与7种反型(点击查看原文)。文章转发到朋友圈之后,很多DevOps同行留言(吐槽)了自己团队的现状&#…

hdu 1521 排列组合 多重集排列 + 指数生成函数

传送门 文章目录题意:思路:题意: 思路: 显然是多重集排列数,我们考虑构造指数生成函数,让后模拟一下多项式乘法即可啦。 由于存在分数,所以直接用doubledoubledouble即可。 //#pragma GCC opt…

架构杂谈《七》

容器VS虚拟机一、什么是虚拟机虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。虚拟系统通过生成现有操作系统的全新虚拟镜像,它具有真实windows系统完全一样的功能,…

#3027. [Ceoi2004]Sweet 生成函数 + 组合数学

传送门 文章目录题意:思路:题意: 思路: 这个题显然可以容斥来写,刚学生成函数就来水一下。 对于每一堆iii我们写出其生成函数Fi(x)∑k0mi(1xx2...xmi)1−x1mi1−xF_i(x)\sum_{k0}^{m_i}(1xx^2...x^{m_i})\frac{1-x^{1…

坚持一个好习惯该有多难?

引子这段时间以来我都在坚持写博客,但是更新得比较少,每周才能一更,不过好歹也勉勉强强也能坚持下去了。我们社区还组建了一个博客互勉群,不过除了个别人能经常打卡外,大部分人都是混个脸熟,凑个热闹。在这…

#3771. Triple 生成函数 + FFT + 容斥

传送门 文章目录题意:思路:题意: 思路: 注意到这个题是求若干个数的组合数,(a,b),(b,a)(a,b),(b,a)(a,b),(b,a)视为一种方案,所以我们考虑生成一个普通型生成函数。 考虑到每个数只能选一次,但…

gRPC in ASP.NET Core 3.0 -- 前言

现如今微服务很流行,而微服务很有可能是使用不同语言进行构建的。而微服务之间通常需要相互通信,所以微服务之间必须在以下几个方面达成共识:需要使用某种API数据格式错误的模式负载均衡。。。现在最流行的一种API风格可能是REST,…

P3246 [HNOI2016]序列 莫队 + ST表 + 单调栈

传送门 文章目录题意:思路:Update题意: 思路: 比较神奇的一个题,这里先介绍莫队的离线解法。 不难发现,用莫队来做最大的难点就是在进行区间移动的时候如何快速计算贡献。 比如[l,r]−>[l,r1][l,r]->…

WPF 渲染原理

对于开发者来说,WPF 中最主要的知识点就是渲染,因为 WPF 是一个界面框架。想用一篇博客就能告诉大家完整的 WPF 渲染原理是不可能的。本文向大家介绍从开发者执行绘图指令到在屏幕显示的过程。本文是从一个全局的角度来看渲染的过程,在本文之…