“C和C++编写的程序比高级语言编写的程序速度快”,很多程序员都认为这是一个事实,但它不是。只在程序足够简单的情况下,这个判断成立。“足够简单”的程序就是那些相当于“数据结构与算法”、“数值方法”、“XX内核”教科书中的程序。在这里,C/C++压榨出所有能压榨的CPU cycle,而高级语言程序却带很多额外开销,因此C/C++更快。但是在更复杂的问题领域,用高级语言却可能写出比C/C++更高效的程序。随着问题难度的增长,C/C++程序复杂程度的增加速度快过高级语言。所有会出现以下情况:对某一问题,最高效算法的C/C++程序的编写难度超出人类的能力(或者更可能发生的情况是,超出人的意愿,毕竟工资是有限的),因此如果要用C/C++解决问题,就不得不放弃最高效的方法,转为使用编码较容易但速度较慢的方法。这个时候高级语言的优势就发挥出来了,包括,更抽象、更丰富的表达能力,更多的paradigm,更厉害的是meta-programming能力,包括用meta-programming生成复杂程序、自动优化程序的能力。
最近高级/脚本语言火热,但是很多人的认识还是:CPU已经足够快足够便宜了,而人却很贵,因此用运行速度换编码速度是值得的。但随着人类需要用计算机解决越来越难的问题,高级语言在速度方面的施展空间必将被发掘。
补充一个例子:用Amb写一个state-space search的程序,不用改动程序,只要改动Amb,所有这样的程序就获得了并行能力,免费的并行!
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment