转载

微软开源了一个更加安全的C语言版本

微软开源了一个更加安全的C语言版本

Checked C提出通过在C语言中增加安全特性以减少编程错误,但是这门语言能否走出实验室却另当别论。

微软开源了一个名叫Checked C的研究项目,该项目为C语言加入了新的语法。项目的主要目标是为了抵消使用C语言编程带来的一些危险,比如造成Heartbleed和Shellshock安全事故的bug。

这在理论上一个大胆的想法。这个想法中最困难的地方是怎样促使C语言开发者修改现有代码,修改遗留C代码通常会是非常困难的。

在受伤前先检查一下自己

Checked C是C语言的修改版,重点针对指引引起的问题。C语言中可以直接访问内存。新版C语言提供了几种新的指针和数组类型,自带安全检查。它们与C语言现有的非安全指针不同,程序员可以使用新的带安全检查的指针。当然,如果有需要也可以切换回非安全类型的指针。

新版本还提供了带检查的程序作用域。这些程序代码段默认启用边界检查。如果程序员试图在这样的代码段中使用非受检指针,编译器会拒绝编译。当然,也可以使用 #pragma 指令指定编译器对整个程序默认启用边界检查。

目前已经有一些工具可以对C语言进行安全分析和检测,比如 Cppcheck 。但是它们通常都是独立的静态代码分析工具。Checked C在程序构思和计划时就直接将安全特性加入了C语言。

前方的障碍

尽管Checked C听起来野心勃勃并且非常有价值,但是它也面临着改变现有都会遇到的两个巨大挑战。首先,这种变化是否向后兼容。其次,这些变化通常会对现有的工具链产生颠覆性的影响。这两个问题都会影响新语言能否被接受。

微软至少部分实现了向后兼容。引入到Checked C中的变化并没有让现有的C代码失效,它们仍然可以像以前一样编译。所有的新语法和对语言的变更都可以与遗留代码共存。

已有的C程序甚至不需要立刻转换为Checked C,可以逐文件或逐函数进行转换。微软还声称,新风格的受检构造器“与现有的指针和数据类型完全布局兼容”。这种向后与向前的高度兼容性为Checked C提供了优势。但即使如此Checked C也不会自动胜出,它需要变得通用。

这就引发了另一个问题,变化对工具链产生的影响。考虑到这个问题,微软从被广泛使用的著名编译器框架LLVM上建立了分支。因此,如果Checked C有足够的吸引力,那么被LLVM项目采纳会更加容易。

据说微软之所以选择LLVM,是由于它遵循宽松的许可并且设计目标就是针对新的编程语言,而不是将LLVM作为Checked C推广的工具。要获得更广泛的接受,Checked C必须让更古老的GCC编译器对其提供支持。(更不用说在微软自己的Visual Studio中支持Checked C了)

Mozilla的Rust语言已经被作为 可以写出比C语言更加安全的程序 。Rust语言已经 取得了巨大的开发进展 并且 获得了广大的使用者 。但Rust还年轻,而C语言已经被广泛使用并且根深蒂固。假设Rust最终没有提供Checked C期望实现的那些功能,那么修改已有的C程序代价可能会比用Rust重写要小。

原文: Microsoft open-sources a safer version of C language
作者: Serdar Yegulalp
译者: 赖信涛
责编: 钱曙光

原文  http://geek.csdn.net/news/detail/82286
正文到此结束
Loading...