文档结构  
翻译进度:已翻译     翻译赏金:0 元 (?)    ¥ 我要打赏
参与翻译: 搬那度 (5)

C 编程语言糟透了。我的意思是,它也很美妙——我们所住的世界,大部分是建立在C的基础上的。不管是在过去还是在现实生活中,C语言是几乎所有电脑编程的基础。正因如此,Xavier Niel 的革命性“42”学校的课程,首先就会让学生学习把C的标准函式库的函式从头编写出来。然而,C已经不再适合C所建造的这个世界了。

说C“糟透了”,不是说它“坏”,而是说它“让人既敬畏又恐惧”。C已经变成了一只魔兽。它等于是给了用户太多炮弹,让人一不小心就把双脚炸掉。大量经验让我们所有人都学到了一个教训:编写大量不是安全漏洞百出的C代码,是一件很困难、几乎是“基本上不可能”的事。两年前,我在第一篇《C语言已死》的文章中就这样写道:

第 1 段(可获 1.9 积分)

原则上,随着软件进化并变得更成熟,安全漏洞理应变得越来越少见……但是用C/C++编写的软件却不是这样的。缓冲区溢出、迷途指针,一而再、再而三地导致毁灭性安全漏洞的出现,就像过去那么多年那样。

我们再也承担不起这些庞大的安全漏洞了。C早就应该淘汰掉,并以另一个语言取代了。问题是,大部分现代语言根本不会去尝试取代C。……它们不擅长C最擅长的事:把多余的省略掉,并以超音速工作。

第 2 段(可获 1.39 积分)

当然,如果你是软件开发者,你早就知道我要说什么了:我就是要赞美 Rust。事实上,Rust就是一个可行的Rust替代品。我早在两年前就已经建议,人们应该开始用Rust而非C来编写新的低层次代码项目了。毕竟,安全漏洞的第一个规则,就是不要再挖下去了。

用C语言编码的安全技巧(2017年版):
1)停止打字
2)把已打下的字全删掉

— ryan huber (@ryanhuber) June 21, 2017

今天,我要郑重建议,工程师在重构现有C代码(尤其是解析器、其他输入处理程序)的时候,应该逐步用Rust取代。Geoffroy Couprie在他的贴文中说得很好:

第 3 段(可获 1.44 积分)

我们总得做些什么。我们必须加强软件的基础。也就是说,操作系统、驱动程序、库、命令行工具、服务器等一切软件成分都要去修理一下了。虽然我们无法今天或者在接下来一年内把大部分修理工作做完,但是或许,十年后的今天,情况会有所好转。

可惜的是,我们无法把所有软件都重新编写。……我所主张的其实简单多了:就像动手术一样,把较弱的部分换掉,把项目的绝大部分保留下来。……事实上,你可以把现有项目中的一段C代码取出来,导入C语言的结构和函式,以在Rust中备用,在Rust中重新编写代码,从Rust中把结构和函式导出,对其进行编译,最后将其和项目的其余部分连接起来。

第 4 段(可获 1.51 积分)

当然,Rust不是什么灵丹妙药。改善软件的稳定性和安全性,还有许多其他有价值的方法,比如:形式验证、语言理论安全(Language-Theoretic Security,简称 Langsec)。但是,Rust是一个既合理又有价值的做法。只有反复地每次挖出一段代码或工具,对其进行改善,我们才能把自己从我们这个巨大的集体安全漏洞中挖掘出来。我们越早开始挖掘,C就越早缓慢地氧化生锈掉。

第 5 段(可获 0.94 积分)

文章评论