C vs. C++ vs. Java vs. PHP
其实,我不懂Java,这篇文章只是随便侃侃。
这个学期选了Craig Chase教授的C++课程,主要是关于template, generic programming, garbage collection, template meta programming 和一点C++内存管理的知识。学期有三个projects,第二个比较有趣,是实现一个生命游戏的模拟器,模拟一个pool中的各种生命类型的class,有些类似联网游戏中的server/client。
Chase教授提到了好程序的判断标准,有几个选择
1. The program is correct (程序是正确的)
2. The program is efficient (程序是有效率的)
3. The program is easy to read (程序易于修改)
4. The program is easy to understand (程序易于阅读)
他说,在一个实际的软件工程中,第一个选择不是好程序的标准,因为这是不可能实现的
达到各方面绝对正确需要无限的时间和人力;第二个选择不是我们最想要的,最终可能会需要,但不是最重要的;正确的选择是第三个,程序易于修改,这样会缩短debug的周期,同时便于完善以提高运行效率;第四个选择实际上是第三个的一部分。
这门课改变了我对C++的观点,那就是C++程序的效率并不比C差,运行效率取决于算法。首先C++能够很容易实现的一些oop问题,用C实现会很丑陋,而且效率不会比C++好;其次C++的generic programming可以减少大量的重复劳动并降低出错的几率;还有C++的template metaprogramming将一些run time的计算放在了compile time并且大量使用inline会提高运行效率。STL的container class已经对一些基本的数据结构和算法做了优化,除非是针对特殊的数据使用手工编写的算法,STL做的已经很好。
这里有一篇C++鼓吹者的文章,很值得一看,充分说明了算法才是决定运行效率的关键。(不过里面对程序行数的比较是不是太吹毛求疵了,我可以用Mathematica几行搞定相似的算法,呵呵)
还有一个比较有趣的网页在这里,比较了各种语言的的程序包运行效率并做成了benchmark,从这个比较中可以看出在某种特定的加权下单从运行速度的角度C++是最好的,C紧跟其后。
在以往的数年里,Chase的这课的后半学期讲Java,这来自企业界对毕业生Java编程经验的要求。不过这个学期从头到尾都是C++,有人在期末问Chase要不要在期末考里加入Java的内容,Chase教授一脸阴险地说:知道你们不会Java,所以我会故意放点Java进去,好拉开大家的分数。不过最后也没喝到Chase的Java
于是,在考完后找了本teach yourself XXX in 24hours 的傻瓜书来看(xxx=java),发现C++和Java的区别包括
运行效率很多情况差一个量级
java语言自带garbage collector
java数据全都是指针放在heap上(dynamic allocate)
java不支持multiple inheritance
java没有模板类
我现在想到的用java的好处是平台无关和对求职有用,据说一行java代码比一行C++代码更值钱,呵呵。
于是转而看jsp,发现这是个鸡肋。搭建tomcat服务器+JDK发现已经巨繁无比,搭起来写个应用目录结构搞的和写desktop application一样罗嗦,有必要吗,终于忍不住了于是apt-get remove –purge了。如果是小型的网站,PHP足矣,学习曲线短,写的程序又易于维护(见之前讨论的好程序原则),如果是那种重荷载的工业级别的网络应用,为甚么要用J2EE呢,PHP前端+C++写的模块不更好吗,兼顾了效率和可维护性能。很容易就能找到用PHP写的不错的网站,但很难找到用JSP写的不慢的网站。不过,有一个说法是jsp程序员的薪水较高,这个其实容易理解,原因见我的这篇文章
罗嗦了半天,最后再抱怨下scim输入法,输了一堆错误的字符然后Ctrl+space后切换到英文,然后Ctrl+space再切换到中文,发现之前敲进去的那堆垃圾还在,需要狂按backspace删除才能输入想输的词语。真是不方便啊。我知道修改这个缺陷只要改几行源代码却不去动手做,这大概就叫做懒惰吧
唠叨完了,还是用俺的Fortran写并行程序吧,还是Fortran好啊,只用global data和stack不用heap,也不用为garbage collection 操心,多好 ![]()
阅读(1700 次)

十二月 21st, 2007 at 11:17 上午
谁说fotran没有heap来着……
十二月 21st, 2007 at 11:38 上午
F95里面有allocatable,不过我不用,因为变量一旦allocate,deallocate前就不能再次allocate了,远不如C的方便
十二月 21st, 2007 at 2:05 下午
可以allocate的多维数组呀,你居然不用,暴殄天物!应该把你打回去用f77,面壁思过
比c强多了,而且现在fortran也有指针的吧~