当前位置:首页 > 科技 >
2018-02-01    来源:网络整理    编辑:懒人网

这几天来,我(Eric Raymond)在思考那些正在挑战C语言的系统编程语言领袖地位的新潮语言,尤其是Go和Rust。思考的过程中,我意识到了一个让我震惊的事实——我有着35年的C语言经验。每周我都要写很多C代码,但是我已经记不清楚上一次我 创建一个新的C语言项目 是在什么时候了。

如果你完全不认为这种情况令人震惊,那你很可能不是一个系统程序员。我知道有很多程序员使用更高级的语言工作。但是我把大部分时间都花在了深入打磨像NTPsec、 GPSD以及giflib这些东西上。熟练使用C语言在这几十年里一直就是我的专长。

但是,现在我不仅是不再使用 C 语言写新的项目,甚至我都记不清我是什么时候开始这样做的了,而且……回头想想,我觉得这都不是本世纪发生的事情。

这个对于我来说是件大事,因为如果你问我,我的五个最核心软件开发技能是什么,“C语言专家” 一定是你最有可能听到的之一。这也激起了我的思考。

C语言的未来会怎样 ?C语言是否正像当年的COBOL语言一样,在辉煌之后,走向落幕?

我恰好是在C语言迅猛发展,并把汇编语言以及其它许多编译型语言挤出主流存在的前几年开始编程的。

那场过渡大约是在1982到1985年之间。在那之前,有很多编译型语言争相吸引程序员的注意力,那些语言中还没有明确的领导者;但是在那之后,小众的语言就直接毫无声息的退出了舞台。

主流的语言(FORTRAN、Pascal、COBOL)则要么只限于老代码,要么就是固守单一领域,再就是在C语言的边缘领域顶着愈来愈大的压力苟延残喘。

而在那以后,这种情形持续了近30年。尽管在应用程序开发上出现了新的动向:Java、 Perl、 Python, 以及许许多多不是很成功的竞争者。起初我很少关注这些语言,这很大一部分是因为在它们的运行时的开销对于当时的实际硬件来说太大。因此,这就使得C的成功无可撼动。

为了使用和对接大量已有的C语言代码,你得使用C语言写新代码(一部分脚本语言尝试过打破这种壁垒,但是只有Python有可能取得成功)。

回想起来,我在1997年使用脚本语言写应用时本应该注意到这些语言的更重要的意义的。当时我写的是一个名为SunSITE的帮助图书管理员做源码分发的辅助软件,当时使用的是Perl语言。

这个应用完全是用来处理文本输入的,而且只需要能够应对人类的反应速度即可(大概0.1秒),因此使用C或者别的没有动态内存分配以及字符串类型的语言来写就会显得很傻。

但是在当时,我仅仅是把其视为一个试验,而完全没有想到我几乎再也不会在一个新项目的第一个文件里敲下int main(int argc, char **argv) 这样的C语言代码了。

我说“几乎”,主要是因为1999年的SNG。 我想那是我最后一个用C从头开始写的项目了。

在那之后我写的所有的C代码都是在为那些上世纪已经存在的老项目添砖加瓦,或者是在维护诸如GPSD以及NTPsec一类的项目。

当年我本不应该使用C语言写SNG的。因为在那个年代,摩尔定律的快速迭代使得硬件愈加便宜,使得像Perl这样的语言的执行效率也不再是问题。仅仅三年以后,我可能就会毫不犹豫地使用Python而不是C语言来写SNG。

在1997年我学习了Python, 这对我来说是一道分水岭。这个语言很美妙——就像我早年使用的Lisp一样,而且Python还有很酷的库!甚至还完全遵循了POSIX!还有一个蛮好用的对象系统!Python没有把C语言挤出我的工具箱,但是我很快就习惯了在只要能用Python时就写Python ,而只在必须使用C语言时写C。

(在此之后,我开始在我的访谈中指出我所谓的 “Perl 的教训” ,也就是任何一个没能实现和C语言语义等价的遵循 POSIX 的语言都注定要失败。在计算机科学的发展史上,很多学术语言的骨骸俯拾皆是,原因是这些语言的设计者没有意识到这个重要的问题。)

显然,对我来说,Python的主要优势之一就是它很简单,当我写Python时,我不再需要担心内存管理问题或者会导致核心转储的程序崩溃 —— 对于C程序员来说,处理这些问题烦的要命。

而不那么明显的优势恰好在我更改语言时显现,我在90年代末写应用程序和非核心系统服务的代码时,为了平衡成本与风险都会倾向于选择具有自动内存管理但是开销更大的语言,以抵消之前提到的C语言的缺陷。

而在仅仅几年之前(甚至是 1990 年),那些语言的开销还是大到无法承受的;那时硬件产业的发展还在早期阶段,没有给摩尔定律足够的时间来发挥威力。

尽量地在C语言和Python之间选择C —— 只要是能的话我就会从C语言转移到Python。这是一种降低工程复杂程度的有效策略。我将这种策略应用在了GPSD中,而针对NTPsec , 我对这个策略的采用则更加系统化。这就是我们能把NTP的代码库大小削减四分之一的原因。

但是今天我不是来讲Python的。尽管我觉得它在竞争中脱颖而出,Python也未必真的是在2000年之前彻底结束我在新项目上使用C语言的原因,因为在当时任何一个新的学院派的动态语言都可以让我不再选择使用C语言。也有可能是在某段时间里在我写了很多Java之后,我才慢慢远离了C语言。

我写这个回忆录是因为我觉得我并非特例,在世纪之交,同样的发展和转变也改变了不少C语言老手的编码习惯。像我一样,他们在当时也并没有意识到这种转变正在发生。

在2000年以后,尽管我还在使用 C/C++ 写之前的项目,比如GPSD ,游戏韦诺之战以及NTPsec,但是我的所有新项目都是使用Python的。

有很多程序是在完全无法在C语言下写出来的,尤其是reposurgeon 以及doclifter这样的项目。

由于C 言受限的数据类型本体论以及其脆弱的底层数据管理问题,尝试用C写的话可能会很恐怖,并注定失败。

甚至是对于更小的项目——那些可以在C中实现的东西——我也使用Python写,因为我不想花不必要的时间以及精力去处理内核转储问题。这种情况一直持续到去年年底,持续到我创建我的第一个Rust项目,以及成功写出第一个使用Go语言的项目。

如前文所述,尽管我是在讨论我的个人经历,但是我想我的经历体现了时代的趋势。我期待新潮流的出现,而不是仅仅跟随潮流。

在98年的时候,我就是Python的早期使用者。来自TIOBE的数据则表明,在Go语言脱胎于公司的实验项目并刚刚从小众语言中脱颖而出的几个月内,我就开始实现自己的第一个Go语言项目了。

总而言之:直到现在第一批有可能挑战C语言的传统地位的语言才出现。



  • 相关内容:


  • 百度搜索“35年老程序员个人谈:C语言时代行将落幕”
  • 懒人网本文地址:http://lazyren.com/html/tech/20180201/15801.html


    阅读延展

    有人泼脏水?大量成人视频现360水印 有人泼脏水?大量成人视频现360水印
    近日,一篇题为《一位92年女生致周鸿祎:别再盯着我们看了》的文章在网上流传,文章称部分360智能摄像机在餐厅、网吧等公共场所监控到的画面被放到水滴直播平台进行直播,
    过年备这些黑科技年货回家吧! 过年备这些黑科技年货回家吧!
    又到一年过年时,小编一想到大批叫我小姨的熊孩子和说不完的客套话,36D的胸口一阵绞痛...小编决定带些黑科技感满满的年货回家,做个懂事的大龄儿童~
    一部只赚十块的尼彩手机如今怎么样了? 一部只赚十块的尼彩手机如今怎么样了?
    2011年,中国手机市场出现了这样一个手机品牌。它自称手机之王,性价比超高,它就是尼彩手机! 尼彩公司于2011年获得手机生产牌照。当时,市面上消费者反馈最好的智能手机是
    苹果TouchBar新专利曝光 未来应用于iMac 苹果TouchBar新专利曝光 未来应用于iMac
    据外媒报道,苹果日前在欧洲获得了一项全新的TouchBar相关专利,这份专利显示,未来TouchBar将会出现在MacbookPro和iMac等桌面电脑上。
    注意了:你以为微软雅黑免费的?字体侵权要赔几万块 注意了:你以为微软雅黑免费的?字体侵权要赔几万块
    很多人在电脑中使用的字体是Windows自带的微软雅黑字体,不过你要是随便用在淘宝海报或其他商业用途,就要小心被指控侵权遭受索赔了。不过真正的索赔方并非是微软,而是国
    贫穷限制了我想象力,全球十大捡漏事 贫穷限制了我想象力,全球十大捡漏事
    《独立宣言》副本,美国人Michael,在田纳西州纳许维尔的二手店铺发现了这个纸张泛黄的《独立宣言》副本,这是1820年印刷的200份之一,现在已经基本见到当年的那批真迹了,