时间:2022-10-09 17:48:18 | 浏览:1729
作者 | JOAB JACKSON
译者 | 弯月,责编 | 屠敏
头图 | CSDN 下载自东方 IC
出品 | CSDN(ID:CSDNnews)
以下为译文:
在上个月的AllThingsOpen虚拟会议上,微软云开发推广部的Ryan Levick解释了为什么微软在构建基础设施软件中逐渐从C/C++转向了Rust。他表示:“无论软件公司在工具和人员的培训上投入多少精力也不能解决问题,因为C++本质上就不是安全的语言。”并鼓励其他软件行业巨头也应该思考这个问题。
他说:“我们使用的语言由于年代久远、来自不同时代,无法为我们提供保护,让我们免受此类漏洞攻击。C++不是一种内存安全的语言,相信这一点无人有异议。”
实际上,微软认为C++无法胜任编写关键任务的软件。业界非常需要高性能、内存安全的编程语言来开发底层系统。Levick表示,当今市场上最好的选择是Rust。
目前,C和C++是编写核心系统软件的默认语言。这种语言速度快,而且源代码可以直接汇编成机器语言。
但是,这些语言引发的与内存相关的bug(其中很多是安全隐患)让整个行业苦不堪言。Levick表示,如今源自微软的CVE中有70%是内存安全问题。他说:“前途未卜,情况没有任何改变。尽管我们为解决这个问题付出了巨大的努力,但这个问题依然普遍存在。”
从财务的角度来看,换成Rust很有道理,因为修补这类与内存相关的没完没了的bug需要付出昂贵的成本。Levick说,早在2004年,每个与内存相关的bug都会给业界造成大约25万美元的损失,而且微软的估计可能还比较保守。
当然,为了提高C++的安全性,软件业界已经付出了大量努力,尽管种种努力都有效,但并不能完全解决这个问题。
长期以来,我们最常使用的一种方法是,就如何编写更安全的代码对程序员展开更多培训。但是,“没有证据表明,对C和C++开发人员进行整体培训可以显著改善这个问题。”Levick根据微软大量的开发人员内部培训结果说。
静态分析是另一种解决方案。但是静态分析会带来太多开销,必须将静态分析紧密结合到构建系统中。Levick说:“因此,人们有很多借口不使用静态分析。如果静态分析不是默认就启用的,那么就起不到任何作用。”
运行时检查也是如此:“了解何时使用运行时检查、何时没有使用是非常困难的,有时甚至不可能。”他还补充说,这也带来了运维开销。
为了解决与内存有关的bug,微软安全响应中心发起了“安全系统编程语言”计划。他们投入了一些开发人员专门支持C/C ++。同时,他们还创建了一门新编程语言Verona,来开发安全的底层系统。但是,这个项目策略中第三个主要的部分,也是他们最有信心的部分,就是支持“直接解决这个问题的业界最佳机会”。
他说:“我们相信这个重任落到了Rust肩上。”
就性能而言,Rust与C/C++旗鼓相当,甚至更快。Rust通过软件包管理、现代测试框架等提高了开发人员的生产力。因为这个原因程序员非常喜欢Rust。
但是,微软如此着迷于Rust的主要原因是它是一种内存安全的语言,而且只需要最少量的运行时检查。Rust擅长创建正确的程序。简单来说,正确性就是编译器会检查程序是否存在不安全的操作,从而减少运行时错误。不安全的关键字也可以使用,但并不是默认推荐。在安全的Rust代码中,不安全的代码永远只是一小部分。不安全模式对于需要内存分配的任务(例如编写设备驱动程序)是必须的。但在Rust中,即便内存的不安全部分也封装在API的后面。
Levick表示,这种安全编程的能力不容忽视。实际上,它带来的提升远远不止十倍,因此值得进行投资。这主要是因为几乎所有的C/C++代码都需要进行安全性审核以检查不安全行为,而用Rust编写的代码中,需要检查的不安全代码只是大多数代码库的一小部分。
虽然微软看好Rust,但Levick承认近期内微软核心开发人员不会停止使用C/C++。
他说:“微软有很多C++代码,而且这些代码无处不在。实际上,微软将继续使用C++来编写程序,而且还要使用很长一段时间。”
许多工具都是围绕C/C++构建的。特别是,目前微软的二进制文件几乎完全建立在Visual C ++编译器上,它会生成MSVC二进制文件,而Rust则依赖LLVM。
不过,也许最大的挑战是文化。Levick表示:“有些人想用他们熟知的语言来完成工作。”
尽管如此,整个软件行业似乎都在向着Rust迈进。AWS使用Rust来部署Lambda无服务器运行时,以及EC2的某些部分。Facebook已开始使用Rust,此外还有苹果、Google、Dropbox和Cloudflare也在使用。
原文:
https://thenewstack.io/microsoft-rust-is-the-industrys-best-chance-at-safe-systems-programming/
本文为 CSDN 翻译,转载请注明来源出处。
IT之家 9 月 18 日消息,微软去年在 Edge 浏览器中引入了侧边栏搜索,为用户提供网络结果,如定义、图像、有用链接以及与该查询相关的任何内容。谷歌现在正为 Chrome 开发与侧边栏搜索相同的功能,Chrome Canary 用户可
谷歌搜索引擎在国外市场上占据主导地位,谷歌从中获得了不少的流量和收入,同时,这也找来了欧盟的反垄断调查。最近,谷歌为了摆脱垄断嫌疑可谓无所不用其极,谷歌公司的律师周二告诉欧盟法院,“Google”是微软公司的必应(Bing)搜索引擎上搜索最
本内容来源于@什么值得买APP,观点仅代表作者本人 |作者:玩牛牛创作立场声明:由玩牛牛原创,欢迎转载最近在某乎看到一篇文章,大意是海淀妈妈们已经嫌弃 Python 低级,准备让娃直接入门 C++。看得我这个写了 15 年代码的老码农心惊胆
很多小伙伴想要好好地学习一下C语言的知识,但是又不知道怎么学,应该学哪一些C语言的知识,笔者在网上看到了这一张C语言的比较完善的C语言的学习路线图,有兴趣的小伙伴可以保存起来哈!C语言是面向过程的,而C++是面向对象的。编程入门就选C语言,
数以百计的 C/C++ 替代品将会出现,但 C/C++ 将永远与我们同在!每个 CPU 都带有一种称为 ISA(指令集架构)汇编的电路语言。ISA 程序集是一种硬件语言,由基本数据操作、数学计算和结构化编程(即 jmp)的操作组成。但是,为
C语言和C++到底是什么关系?首先C++和C语言本来就是两种不同的编程语言,但C++确实是对C语言的扩充和延伸,并且对C语言提供后向兼容的能力。对于有些人说的C++完全就包含了C语言的说法也并没有错。C++一开始被本贾尼·斯特劳斯特卢普(B
如何系统的学习C++语言,今天我们就来看看,如果你从零基础学习C++,那么有哪些书籍可以帮助到你!C++编程书籍《C++ Primer Plus(中文版)》想必绝大多数从事C++开发的同学都看过,至少听过这本经久不衰的经典书籍。这是一本全面
一、C语言程序的构成与C++、Java相比,C语言其实很简单,但却非常重要。因为它是C++、Java的基础。不把C语言基础打扎实,很难成为程序员高手。1、C语言的结构先通过一个简单的例子,把C语言的基础打牢。C语言的结构要掌握以下几点:(1
我个人认为,开源项目是学习一门编程语言非常快捷且行之有效的方法。得益于强大的Github,提供了很多开源优质的项目,在这些项目中,我们可以学习那些优秀程序员的编码方式、学习并借鉴它们的程序设计模式。还能够从这些项目中得到一些灵感,去动手做一
开发环境如前面介绍的那样,C++属于一种静态的编译型语言,所以,开发环境配置过程中就需要用到对应的编译器。C++有很多编译器可以用,GCC或GNU Compiler Collection是最流行的C++编译器之一。下面是不同操作系统下的编译