向C语言致敬
本文是从Toast to C 这篇文章翻译而来。
在Cloudmetrx 公司,我们大量的使用C语言。鉴于不久前,UNIX传奇人物、C语言的创始人Dennis Ritchie 的过世,我们向C语言表示致敬是再合适不过的了。
考虑到我们还使用了其它的语言——Clojure,Node.js和其它很流行的平台,这种大量的依赖C语言的现象更显得不平常。并不是这种语言更 古老,更“受人尊敬”,我们才会倾向于使用这种语言和技术。只是因为当面对高性能的计算时,没有任何语言能跟C语言相比。有人提出了Java,但这些人错 了。没有什么语言能跟C语言相比。
以我的观点,C语言这么多年来依旧保持流行的原因在于它的相对自由的编程范式。大多数的语言,无论是好的还是差的,都生来伴随着一些鼓励使用的编程范式——面向对象的,函数式的,等。于是硬件的设计就趋向对这种范式进行最好的支持。
而C语言,并不去逼迫硬件进行改造。它提供了你对硬件进行粗放型访问的能力。你可以对硬件做你任何想做的操作。没有任何什么编程范式带来的约束——你也可以强制自己使用任何范式。
在邱奇-图灵论题(Church–Turing thesis)中,C语言就是图灵机(Turing)。C语言基本上就是数学加上你可以在上面书写的纸带。所有的算法都是跟两种基本操作有关:对纸带的读和写,然后做小型的算法操作。
当时,世界上所有参考这个理论生产的计算设备看起来都类似图灵机,但却经常被按照Church形式使用。Church论述中的lambda运算考虑 的是将计算行为做有意义的优雅的表现,这是面向人类的;而图灵机考虑的计算行为是面向基于晶体管和电子管的机器的。这是两种自然的方向;C语言更倾向于追 求驾驭真实硬件的能力,代价是损失可读性和优雅性。
从诞生到流行,并持续数十年保持活跃,创造这样的一种技术是何等的丰功伟绩。我不认为C语言的自由范式是成功的唯一理由。它的语法也是同样的精彩 ——尽管这种语言是复杂的,尽管内存管理是复杂的,C语言使这些变得极其的清晰,让你知道事情是如何的进行的。C语言的语法还影响了其它很多种语言——从 Perl到Java到Javascript——这都是它的语法的清晰和实用的证明。
虽然C语言很强大,但不失编写的乐趣。坐下来花5个小时用vim编写C程序对我来说是一件很享受的事。就像是你在驾驶一辆手动档的汽车,你感觉它跑的越来越快。经过一个月的使用Python比较,C语言驾驶起来就像带有喷气机引擎的宝马。它的速度是风驰电掣的;你可以运行time计算,结果会让你张大嘴巴——百万分之一秒!惊奇。
但C语言并不是一直这样可赞。C语言有时会变成淘气使坏的女孩,让你绝望,困惑,不得不使用gdb。但是在一天的最后,你还是会回来拥抱C——它的速度太诱人了。
在Cloudmetrx公司,我们所有的金融相关的逻辑处理都是使用的C语言,除bootstrapping。没有C语言这样惊人的处理速度,我们即时运算的产品是不可能实现的,我们不可能去处理这样大规模的负载。事实上,我们的一个用C写的标价的模块和一个用Java写的模块的速度差别是明显的。虽然不是很大,但足够明显;明显得对于实时金融分析来说显得太明显。