好久没来自己的blog转,还不是因为半年一度的期末考试
不过没事儿的时候还是关注了N个C++库/Framework,比如wxWindows和Boost等等。前几天和同学聊天时还说我又回到了C++,感觉真好,熟悉的语法,熟悉的代码格式。可以前的那点儿boost知识都快忘光了,只好从头来过。装上了C++ Builder X,因为我觉得BCBX在Linux下很好用,远比那些我不熟悉的Anjuta、KDevelop之类的显得亲切。
忘了提了,大概两周前,终于从不甚稳定的一台南开大学的ftp服务器上以随机的速度拉回来SuSE 9.1 Professional的5CD安装盘,让同学帮我刻出来装上了。嘿嘿,硬盘这么大了,不装个Linux都觉得对不起它 SuSE很好用,YaST2果然名不虚传,把一些常见的系统维护变得很简单,尤其是管理Apache,竟然有一个图形界面的配置模块,虽然一些功能还没有实现,可大部分的httpd.conf的配置语法都能很好的支持。

言归正传,提到wxWindows就不能不提Borland® C++ Builder X。最近从网上搜来很多关于BCBX的文章,很多人的反应也让这个Borland全新设计的产品处在一个很尴尬的局面:VCL被彻底抛弃,一些Borland扩展的C++关键字也不复存在,这让一些从BCB1.0就开始使用BCB的用户很难接受,已有的应用无法在BCBX上继续开发,更别提借由BCBX来让应用跨平台了。更有人不能接受的是,这么一个对C++狂热者来说举足轻重的开发环境竟然是基于和JBuilder一样的PrimeTime,而这是一个用Java设计的IDE环境……

Borland听我对你说 <- CSDN 上的一篇老文章,今天又翻出来看了看,主要是因为随后的一些评论。在有些人眼里,好像一些新技术的诞生就意味着已有技术的丧期不久,什么.Net的诞生和微软的大力打造就是说Win32要完蛋,VS.Net一出VC6就没得学了,Pascal这样胡子一大把的语言也要和Fortran一样退休……反正就是喜欢对着浇冷水。这当然是因为语言和开发工具在开发者个人心中占据的地位所致,但我总觉得跳不出自己眼前这一片田地就无法看清develop真正的天地,充其量只是一个高级用户,用着一些普通用户不懂的东西为普通用户做一些自以为很强的东西。有时我也觉得自己像棵墙头草,一会儿C++一会儿Java,一会儿php一会儿jsp,就连开发工具也是用一会儿VS.Net2003用一会儿C#Builder,更让我沮丧的是越学习就越觉得要学的太多了,心里还想着Eiffel和Python、打算着在php5和perl6推出时再深入学习一下,而眼下的好多东西却要用Java完成……虽然每天都一边编东西一边郁闷,可也许是因为接触的东西却是太多太杂,面对问题时却总是觉得挺有把握,觉得有自信做出来。看起来技术都是相通的,相通在思想上;各种语言都包含无数思想,能否体现这些思想还要看开发者本身有何思想。所以我认为,淘汰的只能是思想,而语言是可以变化的,即使今天它是一种落后思想的代表,也许仕别三日,就摇身一变成先进思想的代名词。

最让我“耿耿于怀”的是昨天的社团聚餐,饭桌上认识了一个大一的小伙子,技术也很强,而且才17岁(有时经常郁闷为什么我没有他们这样的机会能早一些接触计算机)。但饭桌上他那一句“C语言肯定会被C++取代”让我的感觉一下子变得很复杂。
假如C语言真的被C++取代,世界会是什么样子?
数以T计的应用要被重写,无论是一些应用程序还是更重要的底层库,C++程序员的工作问题解决了;最终程序的size都要比原先大一些,存储器厂商的春天又到来了,提供宽带服务的ISP们也要发财了;机器码的复杂度增加导致执行效率的下降,需要更强劲的处理器,所以做CPU的厂家也能更一步发家致富;不同平台的数据类型所占用的空间不同,重新编译程序以适应平台的次数增加了;Java、C#之类语言的虚拟机被迫完全使用C++改写,执行效率更不如C++了……

我知道我远没有资格评价C++,可有一些事情是很明显的,那就是哪种语言都不会完全被取代的,因为哪一种语言都不是完美的,都是一系列理想和现实妥协的结果。其实追根溯源,OO思想的出现就是为了避免70年代就开始了的软件危机,力图让软件更工程化,代码的复用程度更高,而C++作为最早开始广泛使用的类OO语言,当然是推动了软件开发的发展,可要说取代C语言,我觉得肯定是不可能的。人们对于C语言效率的印象是没办法磨灭的。
当C语言推出时,它灵活的语法、强大的功能和可以与汇编代码相堪的执行效率让很多汇编语言的程序员出逃到C语言阵营。C++为了接手已有的C语言程序员可谓下了很多功夫,语法几乎和C语言同出一辙,让很多人感觉C语言没有存在的价值了,什么东西C++中都有了。
我感觉C++作为一种类OO语言,它的价值在于它体现出的面向对象的思想,如果让它做C语言做的事情完全是委屈了它。而一涉及到面向对象,C++代码编译出的机器码的效率肯定不如C语言(有时我觉得这根本没法比较,但如果非要比较运行效率的话…),因为这要牵扯访问权限、继承、多态和运行时绑定和运行时类型识别(RTTI)等等OO特性,尤其是种种运行时行为,靠C语言是肯定不行的,但这也就造成了机器码的复杂和执行效率的欠缺,这是必然的,是开发效率对运行效率的必然妥协。用C语言做一个大型的项目足以让人发疯,而用C++则轻松得多,再用现代的Java和C#就更方便快捷,如果使用动态的Python和Ruby就更添一份灵活,但执行效率呢?显而易见是C>C++>(Java|C#)>(Python|Ruby)。而且面向对象的程序通病时占用内存大,尤其涉及到一些函数参数的传递,比如STL里一些容器的设计都要求被装载到容器内的对象支持复制型构造函数,这等于复制了原有对象的所有细节然后装在容器里,自然更耗费内存。所以在一些对硬件资源要求苛刻的环境里,C语言仍是大有用武之地。

越说越乱越表达不出自己的意见。写了这么多乱七八糟没有条理的东西,我只想说,被淘汰的只能是思想,语言只是思想的载体,它能承载各种思想,只要你肯去做。