你好,游客 登录 注册 搜索
背景:
阅读新闻

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

[日期:2016-06-21] 来源:极客头条  作者:钱曙光 [字体: ]

  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

  译者: 赖信涛

 

  责编: 钱曙光





收藏 推荐 打印 | 录入:elainebo | 阅读:
相关新闻       开源  微软 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款