打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
微软开源了一个更加安全的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
译者:赖信涛
责编:钱曙光

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
存在可能替代C语言的其他语言吗?
「技术分享」WebAssembly能否重新定义前端开发模式?
2016年,我们为什么要学习C ?
什么是编译器什么是集成开发环境一文讲明白(Windows常用的是微软编译器cl.exr被集成在Visual Studio或VisualC++中一般不单独使用)
LLVM每日谈之一 LLVM是什么
美国国家安全局督促弃用 C/C ,使用更安全的 Rust、C# 等
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服