C、C++ 不得宠,微软正开发新的编程语言!
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++ 不得宠,微软正开发新的编程语言!的更多相关文章
- 微软正开发Office Reader和Office Lens
据熟知微软Office计划的消息人士透露,微软目前正开发新Windows 8风格的Office应用程序,该应用程序代号被微软称为Office Reader,而为Windows Phone开发的应用程序 ...
- Visual Studio 2012 应用软件开发新方式
微软正式发布Visual Studio 2012 应用软件开发新方式 2012-09-13 09:54 51CTO.com 我要评论(0) 字号:T | T “现在,开发者将有更好的机会开发与云服务连 ...
- Google 开发新的开源系统 Fuchsia
google 最新os 下载 https://github.com/fuchsia-mirror/magenta 本文转自:http://www.oschina.net/news/76094/goog ...
- iOS开发——新特性OC篇&Swift 2.0新特性
Swift 2.0新特性 转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心.我同样也是非常喜爱这门新的编程语言. 今年6月,一年一度 ...
- Git 开发新的功能分支
软件开发中,总有无穷无尽的新的功能要不断的添加进来.添加一个新功能时,你肯定不希望因为一些实验性质的代码把主分支搞乱了, 所以每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并 ...
- 参观微软Serbia开发中心和Office365 2019-01-31活动感悟
这是<国外线下技术俱乐部建设>系列文章之一. 该活动网址是:https://www.meetup.com/ITPro-Serbia/events/258352104/ 活动内容是讲Of ...
- WIN8 Metro UI 风格下的微软报表开发与设计 Metro UI SSRS - BIWORK
开篇介绍 作为 BI 系统前端展现的报表,其重要性不言而喻,我们对于一个好的报表的要求也无非主要包含以下几点: 1. 数据完整和正确,数据质量没有问题 2. 友好的清晰的界面,整洁美观,有得体的格式 ...
- 使用Git分支开发新特性或修复Bug与使用Git分支开发新特性或修复Bug
使用Git分支开发新特性或修复Bug 通过分支,可以在不影响原有代码的前提下改变代码,主要用于开发新功能新特性.下 一代产品 为已经发布的正式版修复bug 团队开发时为每个人建立一个分支,从而避免相互 ...
- LiveVideoStack Meet|深圳 多媒体开发新趋势
2018年初始,音视频技术生态并不平静,Codec争夺愈加激烈,新一代标准的挑战一浪高过一浪:WebRTC的定版也为打通浏览器.移动端乃至IoT带来了机会:此外AI.区块链技术的兴起,催化着与多媒体领 ...
随机推荐
- Bugku-CTF之多次
Day33 多次 http://123.206.87.240:9004 本题有2个flag flag均为小写 flag格式 flag{}
- Java - Java 命令行简介: 选项, 属性, 参数
概述 简单介绍一下 java 命令行相关的参数及属性 1. java 命令行 基本 命令 > java <mainClass> 描述 执行 Java 类 需要准备好编译完成的 mai ...
- python的MySQLdb库基本使用介绍
MySQLdb库 import MySQLdb 简介 提供mysql的基本操作(包括建表,读取表数据,插入数据到表) 数据库操作基本步骤 #!/usr/bin/python # -*- coding: ...
- 每天进步一点点------时序分析基础与时钟约束实例(四)IO口时序(Input Delay /output Delay)
1.1 概述 在高速系统中FPGA时序约束不止包括内部时钟约束,还应包括完整的IO时序约束和时序例外约束才能实现PCB板级的时序收敛.因此,FPGA时序约束中IO口时序约束也是一个重点.只有约束正确 ...
- FILES源代码
FILESの源码 #include <bits/stdc++.h> #include <game.h> #define pause getchar(); #define c ...
- 安卓基础(LiveData DataBinding)
昨天因为有点事情,没有及时发表博客,昨天学习了LiveData和DataBinding,LiveData属于jetpack中的框架里面的,DataBinding可以进行数据绑定. 我分别利用这两部分知 ...
- Go 语言 fmt.Sprintf (格式化输出)
Printf().Sprintf().Fprintf() 函数的区别用法是什么? 都是输出格式化字符串,只是输出到的目标不一样: Printf() 是把格式化字符串输出到标准到标准输出(一般是屏幕,可 ...
- sqlserver查询使用with(nolock)详解
所有Select加 With (NoLock)解决阻塞死锁 在查询语句中使用 NOLOCK 和 READPAST 处理一个数据库死锁的异常时候,其中一个建议就是使用 NOLOCK 或者 READPAS ...
- ES-moreLikeThisQueryBuilder-文章推荐
//获取推荐文章 public Object getRecommendList2(String name) { NativeSearchQueryBuilder queryBuilder = new ...
- Go语言基础之rand(随机数)包
在Golang中,有两个包提供了rand,分别为 "math/rand" 和 "crypto/rand", 对应两种应用场景. "math/rand ...