最近刚刚开始阅读一本新书《C++沉思录》,英文名字是Rumination on C++:A Decade of Programming Insight and Experience,书是96年写的,虽然是本经典的书,但是也算是古董一类的东西。
书的开篇部分一直在强调一个概念:抽象。同时也透露了一个消息:C几乎总是比C++高效,这就是C++更加抽象的代价。整本书的切入角度还是比较新鲜的,之前我对C++的理解,还是认为这门语言是非常高效,但是不够抽象,比如RTTI的问题。但是作者的态度确实C++实在是很抽象,而且非常的实用,特别是关于内存的管理让作者感觉实在很绚丽。而现代的我们却在总是诟病C++对于内存管理的难度,比如悬空指针的种种问题。似乎是我们对于C++的要求太高了!
从抽象谈起
我从两个角度考虑一个语言的好于坏:抽象、效率。之前对于C++的认识还是感觉这是一门高效的语言,但是如果和C比较,C++的效率高的优点却又不是很突出(这是《C++沉思录》给我的观点),如果和Java、C#比较,C++又不如他们抽象,这样一来C++岂不是很尴尬?作者极力推荐C++就是因为C++要比C抽象,比如C++管理内存要比C简单的多,比如其构造函数和析构函数的结构。另外另一个(较之于C)优点是C++更加实用,或者说C++开发效率更高!呵呵,这个观点似乎与我们现在的观点大相径庭。
进一步抽象
汇编语言是对于机器语言的一步抽象,C是对于汇编的一步抽象,然后是C++进一步抽象,这个过程可能并不是很严格,甚至我们说Java是对C++的进一步抽象。如果我们这样继续下去,我们的编程到底会编程什么样子呢?抽象的终极在哪里?这是一个很有意思的话题。我的结论是:终极抽象是自然语言。以后的编译器可能就是一个AI模块和自然语言解释器。这样的模式下我们现行的很多设计模式都要做一定的修改,我们当前的许多解决方案都是应对复用,或者说是应对变化。如果在终极模式下,我们的问题重点将不再是复用,这些问题都可以有计算机来完成,计算机写出一个程序来,与写出另100个不同的程序时间差异不会太大,这一点与人正好相反。这个时候的程序员可能只能是现在编译器开发者的角色。计算机的角色也成为了一个万能的数据管家!