76 年迭代与更新,编程语言界,谁主沉浮?

在六百多种编程语言中,对于开发者而言,其主观印象中或只有几种主流的编程语言,如 Java、C、C++、C#、新贵 Python 等,而之所以它们能够成为主流,软件开发生态必是其中不可或缺的一个重要部分。

以最通用的编程语言之一 C# 为例,作为类型安全、面向对象的编程语言,C# 可以良好地运行在 .NET 框架运行时环境中。随着其优势的逐渐显现,微软作为背后最重要的推动者之一,全面将其运用于数据库、Web 服务、游戏、移动应用程序、服务器应用程序等场景中,由此也吸引了无数开发者加入其生态构建。除此之外,一直以来,微软也是 C++、C 编程语言的生态发展的重要推手。

如今,微软是否会为另一个编程语言——Rust,以及类似于该语言且是微软最新开发的 Verona 的生态带来积极地影响力,我们将拭目以待。

犹记得在问答网站 Quora 上,曾有网友发帖求教“开发 Windows 10 用了哪种编程语言?”

对此,直至今年 4 月,微软内核工程师 Axel Rietschin 在该问题下回应道(https://www.quora.com/Which-programming-language-is-used-for-making-Windows-10/answer/Axel-Rietschin):

Windows 10 与 Windows 8.x、7、Vista、XP、2000 和 NT 的代码库是相同的,其中每一代都在之前的基础上进行重大的重构,并增加大量新功能,改进性能和硬件支持,此外还有安全性的提升,同时保持非常高的前向兼容性。

其中,如 ntoskrnl.exe 内核大部分是使用 C 编写的,在内核模式下运行的大多数内容也是用 C 编定的,包括文件系统、网络与驱动程序等。其中也包含一些 C++ 代码,而越靠近用户模式、越接近新的源码时,C 的使用变得越来越少,反之 C++ 变多。

除此之外,如 .NET BCL 与一些相关库和框架通常都是用 C# 编写的,但它们也只不过是带有几座 C++ 小岛的 C 汪洋大海的一栗,它们自不同的部门,代码并不属于 Windows 源码树。

由此可见,占据全球桌面操作系统龙头老大的 Windows 其内部结构错综复杂,运用的编程语言也远远不止一种。而如今,除了 C、C++、C# 等主流编程语言之外,微软还宣布,正在探索使用 Mozilla 主导开发的通用、编译型编程语言 Rust 语言来作为 C、C++ 和其他语言的替代方案,与此同时,微软也正在研发类似于 Rust 的新的编程语言——Verona,不过,微软采取该两种策略的最终目的只有一个,就是希望以此来加固 Windows 10 的安全性。

微软为何要用 Rust 替代 C、C++?

之所以大动篇幅地想要在安全上面有所改进与提升,必是曾在这个地方跌倒过。

事实上,确实如此。此前据微软官方博客报道,自 2004 年以来,微软安全响应中心(MSRC)对所有微软安全漏洞报告进行了分类,从中发现,所有微软年度补丁中约有 70% 是针对内存安全漏洞的修复。根据深入地调查,我们发现这些漏洞是由开发者无意中在其 C、C++ 代码中插入内容损坏错误引起的。

微软每年修复的 CVE 漏洞中约有 70% 是内存安全问题

在清晰地认知这一点后,微软也开始了寻找更安全的编程语言之路。

在探索伊始,微软熟知有几种语言在一定程度上可以被用来防止内存损坏漏洞,如 C#。但令人无奈的是,像 C++ 这类的编程语言在某些情况下又是必不可少的,毕竟其在运行的速度、内存和磁盘占用的空间上均有优势,除了以上,C++ 还可以预测执行。对此,两者是否可以合二为一,即是否可以运用 .NET、C# 之类的语言来保证所有内存安全,再加上 C++ 所具备的效率。

综合之下,想要满足这些条件,素来以“安全、并发、实用”为设计准则的 Rust 或是一个最佳的选择。对此,微软安全部门也认可道,Rust 是一种从根本上考虑安全性的编程语言,它像 C、C++ 一样也有一个最小的可选“运行时”,此外,它的标准库依赖于 libc,但标准库也是可选的,因此在没有操作系统的平台上运行也是可能的。

微软对安全的深入研究——Verona 语言

不过,世界上没有足够安全的操作系统,当然也不会有完美无瑕疵的编程语言。在基于 Rust 完善 Windows 系统安全之际,MSRC 也发现该语言缺乏与 C++ 的一流互操作性,以及与现有 Microsoft 工具的互操作性。

对此,据外媒 ZDNet 报道,微软研究人员 Matthew Parkinson 在近日的一次演讲中对外透露,微软正在开发类似于 Rust 的新编程语言——Verona。

和以前的目的一样,微软旨在通过 Verona 来开发低级的 Windows 组件以完善 Windows 10 的安全性问题。

“内存安全”是编码框架的术语之一,可帮助保护内存空间免受恶意软件的滥用。微软希望借助 Verona 项目推动在安全方面的工作以关闭这种攻击媒介。此前,有不少业界人士表示,微软的 Vernoa 项目计划可能只是一个无济于事的实验。

不过,在近期的演讲中,微软研究人员 Matthew Parkinson 分享了微软在 MemGC(Memory Garbage Collector)上所做的工作,以及 Verona 的最新进展。

MemGC 是指 IE 和  Edge 浏览器上的内存垃圾回收器,它解决了标准浏览器功能(称为文档对象模型(DOM))中的漏洞。Matthew Parkinson 表示:“我们为 DOM 构建了一个垃圾收集器(GC)。开发者可以通过免费使用,能在 IE 中找到利用 DOM 引擎中的内存管理方法。然后,微软引入了 MemGC,它是 DOM 的保守 GC。它针对这种非常特殊的漏洞样式,从根本上消除了它作为攻击媒介。”

除了以上,Matthew Parkinson 也一直在钻研一个可能引起其产品客户共鸣的问题:“我们将如何构建最安全的产品?如何应对遗留问题?我们不能想着仅仅丢弃已有的东西,而是思考可以在更安全的系统中构建什么。”

基于这样的信念,Parkinson 表示,“如果想要隔离,并精简遗留的部分代码,以使攻击者的利用代码无法逃逸出来,那么在语言设计该有何创新?”

这就是微软最新的“安全基础结构编程” ——Verona 语言 ,据了解,这一项目将很快“开源”。

目前,该项目得到 C# 项目经理 Mads Torgensen 和 Microsoft Research Cambridge 研究软件工程师 Juliana Franco 的支持。

对于微软而言,其当前面临的挑战是应对广泛的“应用程序范围”,如从用于桌面应用程序的 C# 到用于 Exchange 的 C 或 C#、ASP.NET、Azure 和设备驱动程序,再到内存管理和启动加载器等底层 Windows 组件,以及 Windows 内核硬件抽象层(HAL)。

Matthew Parkinson 表示:“执行内存管理确实很困难。如果有任意并发突变,那么,临时内存安全性将非常困难。”此外,Matthew Parkinson 还介绍了 Verona 的设计思路,“Verona 的所有权模型是基于对象组的,而不是像 Rust 那样基于单个对象的所有权模型。在 C ++ 中,开发者可以获得指针,并且它是基于对象的,并且几乎是每个对象。不过,这和我关于数据和语法的思考不同,我认为数据结构是对象的集合,而对象的集合则是生命周期。

“因此,通过对象的所有权级别来获得所有权,我们就可以更接近人们正在使用的抽象级别,它使我们能够构建数据结构而不会超出安全范围。”

你如何看待 Verona 语言?

那么,Verona 究竟是否会为 Windows 的安全性带来突破性的进展,我们将拭目以待。而在此同时,不少网友也纷纷感叹道:

  • 一定是 Rust 本身不够好,宁愿自己重写,也不愿参与一起开发让 Rust 更好;
  • 放出这消息的是 Microsoft Research ,并不是 Microsoft。就和之前为 Rust 设计 com 库的是微软安全部一样。而且研究院更多的是偏向于研究性质,指不定只是搞着实验用的;
  • Rust 语法很繁琐复杂,C# 是出了名的很甜的语言,MS 肯定不能忍 Rust 这啰嗦繁琐的语法,估计要推出升级版,看好。

你怎么看呢?欢迎下方留言,分享你的看法。

参考:

https://msrc-blog.microsoft.com/2019/07/16/a-proactive-approach-to-more-secure-code/

https://www.zdnet.com/article/microsoft-were-creating-a-new-rust-based-programming-language-for-secure-coding/

C、C++ 不得宠,微软正开发新的编程语言!的更多相关文章

  1. 微软正开发Office Reader和Office Lens

    据熟知微软Office计划的消息人士透露,微软目前正开发新Windows 8风格的Office应用程序,该应用程序代号被微软称为Office Reader,而为Windows Phone开发的应用程序 ...

  2. Visual Studio 2012 应用软件开发新方式

    微软正式发布Visual Studio 2012 应用软件开发新方式 2012-09-13 09:54 51CTO.com 我要评论(0) 字号:T | T “现在,开发者将有更好的机会开发与云服务连 ...

  3. Google 开发新的开源系统 Fuchsia

    google 最新os 下载 https://github.com/fuchsia-mirror/magenta 本文转自:http://www.oschina.net/news/76094/goog ...

  4. iOS开发——新特性OC篇&Swift 2.0新特性

    Swift 2.0新特性     转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心.我同样也是非常喜爱这门新的编程语言. 今年6月,一年一度 ...

  5. Git 开发新的功能分支

    软件开发中,总有无穷无尽的新的功能要不断的添加进来.添加一个新功能时,你肯定不希望因为一些实验性质的代码把主分支搞乱了, 所以每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并 ...

  6. 参观微软Serbia开发中心和Office365 2019-01-31活动感悟

    这是<国外线下技术俱乐部建设>系列文章之一.   该活动网址是:https://www.meetup.com/ITPro-Serbia/events/258352104/ 活动内容是讲Of ...

  7. WIN8 Metro UI 风格下的微软报表开发与设计 Metro UI SSRS - BIWORK

    开篇介绍 作为 BI 系统前端展现的报表,其重要性不言而喻,我们对于一个好的报表的要求也无非主要包含以下几点: 1. 数据完整和正确,数据质量没有问题 2. 友好的清晰的界面,整洁美观,有得体的格式 ...

  8. 使用Git分支开发新特性或修复Bug与使用Git分支开发新特性或修复Bug

    使用Git分支开发新特性或修复Bug 通过分支,可以在不影响原有代码的前提下改变代码,主要用于开发新功能新特性.下 一代产品 为已经发布的正式版修复bug 团队开发时为每个人建立一个分支,从而避免相互 ...

  9. LiveVideoStack Meet|深圳 多媒体开发新趋势

    2018年初始,音视频技术生态并不平静,Codec争夺愈加激烈,新一代标准的挑战一浪高过一浪:WebRTC的定版也为打通浏览器.移动端乃至IoT带来了机会:此外AI.区块链技术的兴起,催化着与多媒体领 ...

随机推荐

  1. 用python实现网络文件共享

    第一步:打开命令行 第二步:切换到要共享的文件夹目录 第三步:运行命令 python -m http.server 端口号 然后在浏览器输入显示的路径即可访问文件夹下的文件,点击即可下载,手机端亦可访 ...

  2. bugku getshell

    http://123.206.87.240:8002/web9/ 该题是walf严格匹配,通过修改Content-type后字母的大小写可以绕过检测, 然后还有,后缀黑名单检测和类型检测,逐个绕过,如 ...

  3. 记录一下自己搭建springboot+mybatis+druid 多数据源的过程

    前言  上次的一个项目(springboot+mybatis+vue),做到后面的时间发现需要用到多数据源.当时没有思路..后来直接用了jdbc来实现.这几天不是很忙,所以决定自己再搭建一次.不多说, ...

  4. Web前端性能优化总结——如何提高网页加载速度

    一.提高网页加载速度的必要性 国际知名的一组来自Jupiter Research的数据显示:购物者在访问网站过程中的不满会导致销售损失和品牌受损,其中 77%的人将不再访问网站 ,62%的人不再从该网 ...

  5. Codeforces Round #624 (Div. 3) F

    题意: 给出n的质点,带着初位置和速度: 如果中途两点可以相遇dis(i,j)=0: 如果不可以相遇,mindis(i,j): 求n个点的两两质点最小dis(i,j)之和 思路: 因为当初位置x和速度 ...

  6. BK-信息查找、摘取

    先了解下压缩文件中的内容: 实现功能: 1.根据"e1.xlsx"表中的dealerName.bu(可能没有).时间,匹配"待挖取信息表.xlsx"中对应的相关 ...

  7. nginx配置访问密码,输入用户名和密码才能访问

    1. 安装 htpasswd 工具 yum install httpd-tools -y 设置用户名和密码,并把用户名.密码保存到指定文件中: [sandu@bogon conf]$ sudo mkd ...

  8. 【C语言】判断学生成绩等级

    方法一:if-else #include<stdio.h> int main() { printf("请输入成绩:\n"); float score; scanf_s( ...

  9. 逻辑运算符及其优先级,C语言逻辑运算符及其优先级详解

    C 语言提供了以下三种逻辑运算符. 一元:!(逻辑非). 二元:&&(逻辑与).||(逻辑或). 以上三种逻辑运算符中,逻辑非 ! 的优先级最高,逻辑与 && 次之,逻 ...

  10. CSS学习(9)块盒模型应用

    1.改变宽高范围 默认情况下,width和height设置的是内容盒的宽高 页面重构师:将psd文件(设计稿)制作为静态页面 衡量设计稿尺寸的时候,往往使用的是边框盒 CSS3中 box-sizing ...