我不赞成“惟有汇编高”的想法
gigix 2003-04-11 10:14:17 myan:
一般来说,学习C/C++的程序员需要对于汇编有一定程度的认识。为什么C的生命力这么强?很大程度上是因为它是一个可移植汇编语言。很多人就是把它当“汇编代码生成器”来用的。所以C和汇编是一家。
所不同的是,C的可移植性是汇编无法相比的,而汇编直接体现CPU的设计,可以写出最优化的程序。从个人能力的培养来说,汇编程序员对某款具体CPU的熟悉程度是C程序员所无法相比的,因为C程序员心中的机器是一个抽象的诺依曼计算机,而汇编程序员面对的就是具体的CPU。好的汇编程序员要针对CPU考虑很多问题,比如字节对齐带来的优化,cache,并行流水等等。说实话,一般的汇编程序员达到这样的程度并不容易,而达不到这样的程度,你的汇编代码在现代compiler编译出来的代码面前只能甘拜下风,我可以说你在编程效率、执行效率和软件可维护性上全面处于劣势。只有达到那样的高度,你的汇编功力才有意义。即使如此,你的主要工作也应当是把你的汇编代码包装起来,供C程序员调用,只有这样,你的价值才能够在整体中得到体现。
所以,我不赞成“惟有汇编高”的想法。这会误导很多人奋不顾身地去钻研汇编语言,成功者必然很少,而其用处又有限。我赞成在C程序员中,在工作有必要的情形下,抽调一部分人精工汇编。要想想,汇编所给你带来的优势能够在产品中得到体现,在商业上是否能够得到回报。
这个争论应该早在十五年前就结束了的。原来Lotus 1-2-3用汇编写,Excel用C写,后者虽然性能略逊,但是随着硬件进步,这种差距完全感觉不到,反而在开发速度、可维护性、体系架构上体现出巨大优势,最终迫使Lotus 1-2-3也改用C/C++,最后仍然不敌,坚持到1998年后寿终正寝。