多媒体和网络时代中,C++,Delphi,Java,还是C#?
在应用领域,C/C++不算高级语言,对硬件和系统程序员才算。虽然C++首脑任务坚称C++的地位不会有太大变化,但.NET和Java的对抗很可能最终将其踢出主赛局。
在多媒体、游戏等领域,据gamedev.net的资料,此领域以C++为主流。PS2,XBox等纯游戏机上只有C/C++可用,几乎所有的大游戏公司用C++,但近两年有一些采用其他语言的尝试。总的来说,大部分是C++,有一些是用的Delphi,一小部分是VB,很少的Java。从很久之前起,个人和小团体开发用VB的就较多,基本上都是不喜欢C/C++的人,现在因为考虑移植能力而转向Delphi和Java,当然也有转用C++的。最近由于新技术出现较多,基于C++的支持库变得更为复杂,于是出现很多对于Java替代C++的可行性的讨论,有比较可靠的说法是在较好的优化下配合最新的JIT,可以达到同等C++程序速度的1/4,图形密集程序在使用OpenGL生接口时与同等C++程序速度差不多,但Java3D接口很慢。现在有微软在力推.NET平台,C++在此没有什么优势,可能对今后的局势有较大的影响。
Pascal前途难料,苹果出了基于FreeBSD核心的MacOS X,这回是彻底的C/C++系统了,CodeWarrior放弃了Pascal编译器的开发,主推C++、Objective-C、Java,只剩下Pascal社区和民间的编译器在撑腰呐喊。Borland的OP倒是火得很,可惜Pascal没有严格标准,没有其他编译器能很好的兼容Borland的OP。
网络,当前商家的淘金之地,继浏览器之争之后,微软又被Sun的Java抢了先,不得不和与他一样的behemoth抢夺地盘。C++默默地筑造着网络的基础。
C++:在传统领域,如算法研究、数据计算、各种底层系统,几乎就是C/C++的天下,尤其在Unix类机器上。由于编程资源非常集中,以致很难不选择C++。C++有统一的标准,各种硬件平台都有它的编译器。有几年历史的大公司的软件也大多是基于C++的,大量的编程库资源也是基于C/C++的。理论上,C++能做任何事情。C++有强大的类型定义能力,如无所不包的对象模型、算符重载、模版、宏,可以对自己做扩充和定义;另一方面,也导致C++异常复杂、难维护,且编译速度很慢。因此也有很多人把C++当成更好的C用,不用C++中的复杂功能,这在游戏编程中很常见,因为他们更愿意把大部分精力放在实现感兴趣的功能而不是代码上。而兴趣在程式上的人则偏爱竭尽语言的能力,写出各种高明的代码,很可能是非常难懂的代码,但非常高效好用,例如C++标准模版库。在新兴领域,C++的处境就比较艰难,没有统一的高层工具库,而且工作量很大,而且是不必要又不得不的大。而且C++背后的权威人物Bjarne Stroustrup(就是在C++中加入dynamic_case<type>“这种丑陋语法”的人,用他自己的话说:P)拒绝改进C++语言,只推动改进C++库。所以C++的地位基本稳定的固定,既不会消亡,也不会扩大。其他评价:黑客级人物必用,不适合入门教学用途。
Delphi:确切的说是Object Pascal。简单直观而又强大是最直接的理由。不需要去花多少心思考虑语言实现,想什么写什么,而又不失C++的高效,甚至某些部分执行速度快过C++,如部分字符串操作和文件读写缓冲等,编译速度狂快(由语言特性决定)。包含大量好的新语言特性,拥有既简洁又强大的运行库和对象库,直接集成COM、Corba、网络组件、数据库,支持Windows、Linux,并即将支持.NET平台。在Delphi社区,对Delphi的支持是近乎狂热的,成员们拿出自己最得意的源代码来共享,如果你是新手,又想快速成为高手,Delphi是最佳选择。但你来自C++背景,你会对begin..end、不能随处声明变量、没有++运算符等感到反感;如果你喜欢复杂的代码且很熟悉STL并大量使用,你会因Delphi没有模版而失望。Delphi提供了大部分的系统API接口,但也有很多欠缺,Delphi社区提供了大量的API接口或封装,如DirectX(Delphi不需要导入库和静态库,百兆的C/C++SDK的Delphi版只有几兆:P)、OpenGL1.2的接口和封装,但一般会有几种不同的版本,质量好坏不一,当然也未必比Borland提供的差,事实上Borland也用社区提供的源代码。只有Borland一家做OP的编译器,没有业内标准,没有其他选择,虽有可部分兼容OP的FreePascal,可没有了Delphi的库的编译器的吸引力就少了大半。由于Delphi刚兴起没几年,使用它的公司还不多,组织倒有不少。如果你将找工作,一定弄清你要工作的领域是否多用Delphi,如数据库领域就是。其他评价:节省你一大笔时间,可以给你充分的机会改进你的程序或出去玩;)。
Java:由C++简化而来。Sun对Java语言的设计上的确有很大创新,当年博得一致的喝采。语言并不必须复杂才能强大,就像在微软还是英雄的年代Bill Gates说他能用Basic做到C能做到的任何事情。Java也正是如此。由虚拟机执行Java程序,不依赖于平台,这是给程序员的一大福音。尤其对于互联网,Java是具有天生的资质。但由于Sun的一些失误,也使Java有了些不好的名声和导致Java没有达到预期的前景。一是Sun的虚拟机速度太慢且不好的垃圾收集算法导致宝贵的内存资源极度浪费,除非空闲物理内存大于程序所需全部内存,否则系统就会严重受垃圾收集的影响,这个弊病遭到强烈的抨击。现在的虚拟机技术要比以前强了不少,我个人觉得其他厂商提供的Java虚拟机都比Sun的好。二是糟糕的类库。Sun对PC的了解远不如对他们的高端服务器和工作站,设计的类库也是浓烈的Sun的味道,而且各部分风格不一,似乎是很多缺少交流的人写出的。熟悉PC编程的人会觉得极为罗索冗长且怪异低效,以致出现很多其他替代类库(微软就做了两套)。这个问题到1.2版出台时才有些改善。三是Sun拒将Java交给标准局,做虚拟机需Sun授权。因此,Java现在集中在电子商务领域,由于其跨平台能力,其地位基本上是不可替代的。其他评价:网络应用必学。
C#:新品种的C++,被称作C++--。可以说迎合了大部分C++程序员的愿望,即保持C++的强大又做了适度的简化,同时加入了时髦的语言特性,基于.NET平台,简单的说,太棒了。但是等等,C#并不完美,如果你是C++程序员,你未必完全喜欢它。而且由于C#是新东西,还没有多少资源可用。总之,这里还是未开垦的土地,虽然很有吸引力,但你必须对是否踏进这片土地非常谨慎。如果你是决心跟着微软走的,而且已有编程经验,那么可以放心地拿起C#。其他评价:将来很可能是Java的劲敌,微软的主要开发工具。