delphi能走下去吗? 用DELPHI有一段时间了,但是感觉它是夹缝中的东东?在JAVA于.NET大比拼的年代,它还能走多久? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 走不远估计几年还是能撑下来的但是相信borland会在这几年有所行动的做好跳的准备,然后等着看吧 阿德, 说这么丧气的话干嘛, 我认为现在市场上最牛的开发工具就是Delphi!!!!!!!!!!!!!!!!!!!!!!1. VB 小儿科非面向对象,要不是MS撑着它能占领市场?2. VC 已经不适合时代的需要,虽然她很牛,但是不适合快速开发3. PB 功能单一, 只能在数据库方面发展4. BCB 由于Borland的错误决策让这么一个好产品....唉不说了5. Java 只是MS 的的反对者们吹捧出来的一个不伦不类的东西, 让它做一般的应用软件,KAO去死吧5. C# Java的变种,调用API还他妈像VB一样声明, 指针还要写在什么安全代码里面不爽, 它完全是抄袭Delphi, 下流!7. Delphi 以后支持.net, 前途广大, 大量的第三控件支持, 支持最大多数的技术, 大量的可利用源代码,编译速度一流, 为什么Delphi不好, 都是刚入门的菜鸟们以讹传讹传来的, 我倒没怎么发现Delphi有那么多Bug, Delphi用的久的人是不会随便讲些不负责任的话我最后想说的是, 即使Borland 倒了, Delphi不会倒, Delphi就是现在最好的最棒的开具! 支持Delphi,很优秀。VC做底层好一点,但是Delphi也可以 还能撑几年,没有问题,转向.net是必然 还能撑几年,没有问题,转向.net是必然 Delphi完全应该Open Source,这样我对它更有信心。现在完全在Borland的控制下,而Borland自己都不知道自己要干嘛。 做底层(尤其是嵌入式操作系统,单片机,大型数据库),我认为还是c/c++的天下,搞B/S当然是Java和.net的天下了,不过delphi转向.net也已经是必然趋势了。所以我们不必为delphi的未来担心,况且深入探索vcl对培养程序员的思维是非常有帮助的,这种思维方式的培养,是独立于语言的,学什么都一样。 to hqsee() ( ) : 都B/S时代了,还Delphi,-------------------------说你小子是白痴一点都不为过, 还对你客气了 to hqsee() :都B/S时代了,还Delphi.--------------------------------说你什么好呢??看看书,了解一下在来说好不好,你以为Delphi可以开发什么呀???真是压了好一会才让我没有骂人的。 vc和delphi在我看都很优秀!支持DELPHI! 今天真火了,我想帮助所有想学好Delphi的人, 我有Object Pascal 最权威的电子书, Borland Delphi帮助完全中文, 看了它你将再也不是菜鸟了, 你深深为之振憾, 我还想说你看了这本书你认为其它的书都是垃圾, 要的先支持一下, up一下, 说I love Delphi你就可以得到这本书(不说的没有), 我的email [email protected], 要的跟我索取, 我明天发给你们, 今天太忙了 如果你还对Delphi的能力怀疑,那么请看本文!注:本文转载,出处不详。 偶然来找一个文件,却发现这里关于VC++和Delphi的讨论很是激烈。看了大家写的一些文章,觉得有些看法正确,有些就很偏颇甚至错误(也许无知?很抱歉我这样说:-)。我无意与任何人争论,更愿意把这看成是技术上的讨论。应该本着公正,不带偏见的态度(这并不意味着非要平分秋色,一切应以事实为准)。我用过除tp1以外的所有版本的Turbo Pascal,所有版本的Turbo C/Borland C++,所有版本的Delphi和C++ Builder;以及msc 5.0/6.0,msc/C++ 7.0和visual C++ 4.2/5.0。不敢说有多高的水平,至少也算有一点经验吧。下面就谈一下我的看法。 1. 编译器 应该说Borland的编译器是最好的。因为Borland有全世界最好的编译器开发组(虽然anders hejlsberg离开了)。从技术上来讲,Borland领先任何竞争对手至少2~3年。一般来说,Borland的编译器总是能生成更小的代码并且通常(并不是在任何情况下)更快的代码。 紫云英、曾登高在文章中说VC++编译的程序小,这其实是使用了动态连接的结果 。m$把VC++的运行库(msvcrt*.dll,msvcp*.dll, mfc*.dll,你看看这些文件加在一起有多大)在安装Windows时就放在了system/system32目录中了。两位说“协商接口”的问题,恐怕是对某些英文文章的理解错误。m$就是不愿意在Windows中带上其他公司的运行文件,没有技术上的原因。 其实Delphi/C++ Builder不论在动态连接或静态连接的情况下,生成的程序都要比VC++的小。比如mdi的例子程序:在Delphi/C++ Builder中选new ... | project s |mdi application,在VC++中用mdi app wizard;生成的程序功能是非常类似的。 下面是比较结果: (Delphi打开优化,C++ Builder使用最大速度优化,VC++ 5使用最小代码优化) Delphi 3 Delphi 5 C++ Builder 5 VC++ 5 dynamic link 21k 35k 44k 70k static link 253k 398k 467k 490k 凡是使用了应用类库的程序(不管是mfc,owl,vcl以及新的clx框架)都要比不使 用的大不少。这是因为目前的智能连接(smart link)技术还只能针对全局变量/过程,而不能用于对象结构。哪怕你只使用了某个类(或被这个类间接引用)的一个属性或方法,这个类以及它所引用的所有类都全部被连接到exe中。目前所有的编译器都没有解决这个问题。 (ps: 其实能生成最小代码(真编译)的高级语言编译器是Turbo Pascal,不信你写程序比较一下: program test; begin writeln('hello, world.'); end. 生成的exe不到1.5k。而同样的c程序: #include main() { printf("hello, world.\n"); } 最精悍的c/C++编译器生成的代码也有6k。 那么几个编译器生成的代码质量又如何呢? 举一个例子,比如我们在编程时经常用到的for循环语句: (1) object Pascal: procedure foo; var i, j: integer; begin for i := 0 to 15 do j := j + i; end; (2) C++ void foo(void) { int i, j; for (i = 0; i < 16; i++) j = j + i; } Delphi 3生成的代码(打开优化): 字节数 时钟周期 00424aa9 33c0 xor eax,eax 1 00424aab 40 inc eax 1 00424aac 83f810 cmp eax,0x10 1 00424aaf 75fa jnz -0x06 0 (可并行) ----------------- 8 3 C++ Builder 5生成的代码(最大速度优化): 00401535 33c0 xor eax,eax 1 00401537 40 inc eax 1 00401538 83f810 cmp eax,0x10 1 0040153b 7cfa jl -0x06 0 (可并行) ----------------- 8 3 visual C++ 5生成的代码(最大速度优化): 27: for (i = 0; i < 16; i ++) 00401205 mov ecx,dowrd ptr [j] 1 00401208 xor eax,eax 0 (可并行) 28: { 29: j = j + i; 0040120a add ecx,eax 1 0040120c inc eax 1 0040120d cmp eax,10h 1 00401210 jl foo(0x0040120a)+0ah 0 (可并行) 00401212 mov dword ptr [j],ecx 0/1 (取决于上一条指令的 分支预测情况) 30: }; ----------------- 16 4.2 (假定分支预测准确度80%) VC++ 5的最小代码优化生成也有11个字节: 27: for (i = 0; i < 16; i ++) 00401205 xor eax,eax 1 28: { 29: j = j + i; 00401207 add dword ptr [j],eax 1 0040120a inc eax 1 0040120b cmp eax,10h 1 0040121e jl foo(0x00401207)+7 0 (可并行) 30: }; ----------------- 11 4 注: (1) Delphi/C++ Builder的结果是用Turbo debugger直接反汇编的,VC++ 5的结果是从集成环境的源级调试得到的。 (2) 时钟周期数以pentium处理器为例,实际上,对于没有并行执行单元的cpu(比如386/486和nx586等)VC++ 5生成的代码速度还要更慢一些。 (3) 分支预测准确度源自intel的"pentium optimization reference"。不过与具体程序密切相关,一般来说程序中的条件转移指令越密集则分支预测准确度越低。 可以看出,Delphi/C++ Builder的这段程序有1~1.2个时钟周期的优势。这主要是因为Delphi/C++ Builder的编译器比较智能,根本不编译无用的废语句。 (有趣的是,对于这段程序而言,VC++ 5的最大速度优化反而不如最小代码优化生成的代码运行速度快。) 不要以为1~1.2个时钟周期不算什么,整个程序的快与慢就是这样一个个时钟周期积累出来的。而且就这几条指令而言相当于快25%~28.6%,是非常可观的数字。我没有用VC++ 6测试(我从VC++ 5以后不再使用vc了,因为C++ Builder 5能完全兼容vc --- 这种兼容性从C++ Builder 3开始就有了,不过一开始并不完善),不知道是否有改进。有人有兴趣的话请测试一下。 有兴趣的话,可以去jake's code efficiency challenge(http://www.xnet.com/~johnjac)看一看。那有代码运行性能挑战。目前Delphi/C++ Builder在6项测试中保持5项 领先。 (ps:Delphi 2就曾在1996年的PC week的性能测试中击败过VC++ 4.2) 2. 语言特性 首先我不想评价所谓“Pascal是玩具语言”这种无知的说法。某些连basic都用不好的人是不可能正确评价其它语言的优劣的。至于“只配高中生使用”就更加可笑了:peter norton没上过大学,id software的johncarmack没上过大学,你不服气?!请不要嘲笑高中生,大多数程序员可能永远也达不到这些“高中生”的水平。创造性工作需要的是天才,你认为天才相当于什么学位?:-) (1) 预处理,宏以及.h文件 object Pascal不支持预处理,其实是不需要。无法直接编译源代码的编译器才需要预处理器的支持(用于翻译/规范源程序(也包括.h之类)以利于编译)。预处理器的出现是因为当初ken thompson和dennis ritchie要在只有256k内存的pdp-11上实现c编译器难度很大,才采取的折衷办法。现代大多数c/C++产品已经把预处理器包含在编译器中了。 (ps:c中采用尽可能短的关键字/运算符也是由于这个历史原因) 至于macro和.h则应该说是垃圾特性,只是由于兼容性的考虑才保留下来的。ansi/iso c/C++规范中明确建议:“不要使用macro和.h,应该使用程序中的常量定义和函数替代”。因为macro和.h不是c/C++的语言特性(这是真的!),没有明确统一的语法定义。还会导致编译速度降低,另外由于macro在每个使用的地方被展开(不是调用),大量使用macro会使生成的代码臃肿。 (2) 集合,子界类型 C++不支持这些object Pascal的原生类型(编译器能直接识别的)。但可以用类来模拟,毕竟C++的对象结构是最复杂灵活的(ada除外)。不过性能有损失。 (3) 枚举类型 object Pascal不支持为每个枚举元素指定值。例如: c/C++中可以定义:enum aweek {sun = 1, mon, tue ...}; object Pascal中只能定义:aweek = (sun, mon, tue ...); (4) 数组 c/C++不支持object Pascal中指定下标的数组,下标只能从0开始。 (5) 结构 object Pascal不支持struct(在Pascal中称为record)中的位域(bitfield)。bit field 可以bit为单位(不需要整字节)来存储结构成员,可以减小结构的存储空间。不过存取效率会有所降低。 (6) 字符串 字符串处理是object Pascal的强项之一。能够支持灵活高效的串处理。严格意义上讲,c/C++不能算支持原生的字符串类型。char *和char[]更近似于用户自定义类型,因为编译器不支持字符串的内存自动分配和回收,需要用户自己调用malloc()和free()。object Pascal也支持c/C++风格的字符串(称为PChar)。 不过string类型更加强大。从实现上来看,object Pascal的string类型使用前缀表示串长度(1字节前缀的shortstring和4字节前缀的long string,两种string自动兼容,并且long string也兼容PChar),c/C++中的char *和char[]使用后缀chr(0)表示串结束。不同的表示方法对串处理性能有很大的影响:对于大量,复杂的字符串操作,用object Pascal可以写出比c/C++快几十倍的程序(许多用Pascal写的Pascal编译器,比如free Pascal,Pascal pro等,虽然技术水平一般,但编译速度也很快,在某种程度上也得益于 Pascal的字符串处理效率)。比如取串长度函数length/strlen(),object Pascal的实现只需要一条mov指令,而c/C++的实现则需要进行重复串扫描直到找到结尾0为止。object Pascal的string类型在支持unicode字符方面也有优势。要知道c/C++的字符串给现代操作系统支持unicode字符带来了很大的困扰,比如串'abc'的unicode表示为:41 00 42 00 43 00,这使c/C++程序根本无法处理这种字符串。虽然修改编译器可以很容易解决这个问题,但光修改编译器是不够的,还要修改操作系统,否则以前的大量c/C++程序根本无法在新操作系统上使用(这简直是灾难 --- 你连notepad都没了,怎么办?:-)。Windows采用凡是涉及字符串处理的api都提供两套的解决方案。比如textout,有用于处理ascii字符的textouta和用于处理unicode字符的textoutw。而unix/linux采用另一种办法:凡是涉及字符串处理的api都使用utf8压缩编码(一种类似于rtf的编码方法:凡是ascii字符都直接存储,多字节字符则用\进行转义),虽然(勉强)保证了兼容性却也代价不小。 (ps:C++中的string/ansistring是用类模拟的,所以性能...) (7) 多重继承 毫无疑问,object Pascal不支持多重继承;并且也看不出Borland有增加这一特性的意向(其实增加是轻而易举的)。object Pascal通过接口(interface)实现多重继承.interface不仅可以引入用object Pascal实现的对象,也可以引入其他语言实现的com/dcom/corba对象。你真的需要多重继承吗?我想大多数程序员和我一样都从来没有使用过多重继承(连vcl这么强大灵活的体系结构都根本没有用到多重继承)。 (ps:java和Delphi一样不支持多重继承,也使用interface来实现多重继承。其实这并不奇怪:jdk 1.2和 java 2主要是由Borland开发的,sun只挂名而已。不信你看java类库是不是和vcl很象。:-) (8) 对象模板 object Pascal不支持对象模板。因为对象模板不过是宏的语言实现而已(宏本身不是c/C++的语言特性)。 (9) 重载 object Pascal支持函数/过程的重载,不支持运算符重载。C++全部支持。 (ps:我个人倾向于object Pascal应该增加对运算符重载的支持) (10) 位及逻辑操作 object Pascal和c/C++在这方面没什么差别。c/C++的&,|,~,^,>>,<<,&&,||,!等效于object Pascal的and,or,not,xor,shr,shl(and,or,not,xor既用于位操作也用于逻辑操作)。不过c/C++不支持逻辑xor(a xor b = a and notb or not a and b,还是可以实现的)。 (11) 风格 其实这是我更倾向于使用Delphi的一个重要原因(由于工作的原因,我也经常使用C++和汇编)。就象有些文章所说的:“object Pascal和C++是同一重量级的语言”,确实难分轩轾,差别反而主要是在风格上。C++强调灵活,而object Pascal更注重整洁和优美。《程序设计语言:设计与实现》一书的作者也称赞Pascal是“一种极优美的语言”。有人因此认为Pascal“笨拙”。其实应该是“大道至简”。我认为即使用C++写程序也还是工工整整的好,不要卖弄技巧。只有水平不高不低的程序员才喜欢卖弄技巧(水平太低的卖弄不了,太高的又不愿卖弄了)。就象有人评李昌镐的棋“平淡”,但马晓春再怎么“鬼才”也只能甘拜下风。 上面说的其实都是C++ vs object Pascal。不过也适用于VC++ vs Delphi。 (ps:VC++其实并未实现全部ansi/iso C++ 95规范(目前的最新标准)的特性(所以有人戏称之为c+)。而C++ Builder则完全兼容ansi/iso C++95规范,并支持at&t(c的诞生地)和unix v的全部C++扩展特性。有人称“m$坚持工业标准,Borland随意修改”,这是不对的。Delphi也全兼容ansi/iso Pascal 1983/92规范,以及apple object Pascal (用过codewarriorprofessional的应该知道apple的object Pascal)。) 3. 功能及其他 (1) 易用性 毫无疑问Delphi有巨大优势,这不用多说了吧。 (ps:Delphi的真正伟大之处在于并不因为易用而降低技术水准。你需要复杂性就有复杂性,你需要灵活性就有灵活性;不用可视化也一样写程序(可视化只是object Pascal 对象结构的另一面),不用vcl也一样写程序) (2) 适用范围 VC++几乎能做任何硬件允许的工作。Delphi也能。(“不!!!”,我知道你会这样说,你会举出vxd。:-) Delphi不能写vxd(其实如果你用Delphi生成obj,再用m$的link连接,是可以的)是有原因的(你见过非m$的工具能生成vxd的吗?watcom?symantec?gnu?...),但不是技术上的原因。vxd的le(linear executable)文件格式最早出现在Windows 3.0中,格式很简单(比ne和pe格式都要简单),基本上是内存映象文件。但m$不知道出于什么动机就是不允许其他公司的软件生成它的这种(专利)格式。Delphi是可以写Windows nt的sys和新的wdm(Windows driver model)驱动程序的,这些使用普通的dll格式。 (ps:从法律角度讲,你自己写一个程序,未经m$允许生成ms word文件也是不行的) (ps:玩过“奇迹时代”(age of wonders,http://www.epicgames.com)吗?是用Delphi 3写的。画面和速度都优于m$的“帝国时代”。不过我不喜欢玩策略类游戏,我喜欢的是duke3d和QUAKE系列,还有tomb raider系列。:-) (3) 集成开发环境 Delphi的ide更简洁/好用一些。 (4) 数据库支持 在这方面除了Delphi的兄弟C++ Builder/jBuilder恐怕只有power Builder能(勉强)与Delphi相比。不过pb的性能和使用范围就差得太远了(要不怎么叫poor Builder呢 ?:-)。 (ps:我的印象是现在大多数基于网络/大型数据库的c/s和多层结构的应用都是用Delphi/jBuilder开发 的) (5) 网络功能 Delphi也有一定的优势。尤其是在Internet开发方面。 (6) 组件支持 Delphi除了基于object Pascal的vcl/clx外,也支持基于com/dcom的组件(比如activex),另加corba支持。VC++只支持支持基于com/dcom的组件。 (7) 应用框架/设计思想 vcl比mfc至少领先一代,这也毋须多言。mfc充其量不过是对owl的(一种不太成功的)模仿而已,从设计思想上看甚至还不如owl。作为一种语言的基本类库(不论可视与否),应该从大处着眼,力求简洁有效,保持一定的弹性和抽象度(抽象意味着从功能出发,比如vcl中的tcanvas就是对Windows中dc(device context)的一种极好的抽象,比起mfc中的设计高明了何止一点半点)。而不是面面俱到,一一照搬apis(不幸的是,m$的程序员多年以来一直在不辞劳苦地做这项工作)。看看mfc的某些类,简直惨不忍睹:通常除了省了hwnd和dc之类的参数(已经作为类的私有数据保存了),其方法(method)简直就是Windows api的翻版。这样做有什么意义呢?Windows api不就摆在那里吗?比如说,使用mfc中的线程类还不如直接调用createthread/exitthread/resumethread/setthreadpriority之类的api更方便快速呢。(ps:用过Delphix(http://www.yks.ne.jp/~hori/)吗?Directx这么繁杂的结构可以用object Pascal封装得如此之好再次证明了vcl体系结构的强大) (8) 调试 两者相差无几。VC++的源级调试更用户友好一些,而Delphi/C++ Builder对多线程程序的调试支持更好。 (ps:要比单独的调试工具,Borland的Turbo debugger可就要比m$的codeview强多了) (9) 运行环境/系统需求 应该说差不多。VC++的启动速度确实要快于Delphi(这主要是相对于Delphi 4+而言,Delphi 3的启动还是很快的)。这很大程度上是由于一个事实:VC++主要是一个基于文本编辑器的传统开发环境。code war-riorprofessional不是启动更快吗?至于“一个数据库程序要带上3~5mb的bde运行文件”的说法,这可能是由于在安装制作工具(installsheild,wise之类)中使用了“全部bde安装”(默认)而不是“部分bde安装”。如果你只使用access,dbase,foxpro,paradox之类的桌面数据库,只需要几百k的运行文件就可以了。用m$的工具开发的数据库程序也要带上一大堆odbc,dao,jet,ado,msde之类的运行文件。在Delphi 5中,如果使用adoexpress,interbase express访问数据库的话,可以不带bde。(ps:不管怎么说,Borland在Delphi/C++ Builder的启动速度方面还是要努力改进!) (10) 产品质量/稳定性 有文章称“VC++的质量好,稳定性高”。真的是这样吗?visual studio的service pack不是都出到4了吗?什么是service pack?主要不就是bug fix + patch吗?!Borland的工具也并不完美,Delphi 3的vcl中确实存在“内存漏洞”,会导致用d3开发的程序有时(并不总是)退出后不能释放分配的内存。VC++的问题也不少:ie是用VC++写的吧,上网时多启动几个,开开关关,最后全关闭,看看你的系统资源剩下多少了?还经常导致“general protection error”。ultra edit是用VC++写的吧,也有同样的问题。其实说到底,程序质量好不好,运行稳定不稳定,主要取决于开发者的水平/责任心。比如说tomb raider系列和QUAKE系列游戏同是用VC++开发的,但画面质量和运行速度显然QUAKE系列更胜一筹。象美国航空航天局(nasa),俄罗斯宇航局(rsa),美洲银行(bankof america,资产超过5000亿美元的大银行),其他诸如american air-lines,at&t,bmw,compaq,bbc television,british telecom等大型机构/公司都在用Delphi开发复杂的,企业级(可笑的是,有人居然称“用vc开发企业级的桌面应用”,殊不知企业级应用和桌面应用是相对而言的)的应用系统(在http://community.Borland.com(Borland社团站点)上有关于用Delphi和C++ Builder开发的产品介绍),如果有人还要说“...稳定和可靠是硬道理,只好忍痛割爱了”,那他恐怕只好自制开发工具。 (ps:关于Delphi与某些显卡驱动冲突的问题,是由于某些显卡(如s3 virge gx)的老版本驱动程序不能正确处理Windows公用控制中的imagelist的绘制方法造成的,在这种情况下所有在imagelist中使用多个图象的程序都会有问题)(ps:至于“一看到很多优秀的共享软件冒出具有Delphi特色的错误异常就感到悲哀”,建议此人先搞清楚你看到的“错误异常”消息是这些软件本身出错呢,还是运行时的异常处理消息(比如“没有找到指定文件”或“索引超出范围”之类)再说。Delphi中有完善的异常处理,所以很多程序员不再写错误处理,而放手让编译器去处理。我认为这不是一个好习惯,至少弹出的消息对话框可能与你的程序所用的语言/风格不一致。让人家误会了不是?:-) (11) 帮助/文档 VC++的帮助和文档确实要比Delphi/C++ Builder的丰富一些。不过这不应当包括msdn,因为msdn是一套独立的产品,并不是专门给VC++准备的,况且其中包括了相当多的Windows技术资料。作为一名程序员,不管用什么开发工具,可以(也应当)有一套msdn。Windows数据结构/apis是用c风格描述的这一点可能对Delphi程序员来说略有不便,不过Delphi中已经包括了大多数转换;另外,如果一个程序员连转换.h文件这么简单的工作都做不了的话,他(她)可能也做不了什么象样的开发。Internet上的一个志愿者组织(www.Delphi-jedi.org/)在这方面也做了大量工作,在他们的站点上有几乎全部有用的c/C++库.h的object Pascal翻译。(ps:Delphi/C++ Builder程序员为什么不可以买一套msdn呢?毕竟我们还在用m$的操作系统,总不至于连Windows技术资料都不要了吧) (ps:从msdn看m$msdn中的技术资料主要是以compiled html(.chm)格式存放的,但m$把全部.chm放在disc #1,而把索引文件(.chi)单独放在disc #2。这样一来就无法从光盘上直接看这些文件。要么安装,要么手工把相应的.chm和.chi拷贝到一起。我看不有什么技术上的理由(谁知道请告诉我)不把一半.chm和.chi放在一张盘,而另一半放在第二张盘。这至少反映出m$内部某些人的阴暗心理) (12) 国际化支持 VC++中已经包括了十多种语言的rtl资源,Delphi中需要自己做资源本地化。虽然franch,german之类的版本中也包括english资源。:-< (13) 应用领域 VC++在Windows设备驱动开发(毕竟是m$ Windows)和某些桌面应用(比如游戏)开发中用得较多。Delphi更多应用在数据库/多层结构,多媒体和Internet开发等方面。 (ps:VC++在游戏开发中用得较多我看主要是价格因素,游戏使用专用界面,通常不涉及数据库和inter-net(即使Internet play也不过是简单的tcp连接,并且Directp lay中已包括此项功能),昂贵的Delphi和C++ Builder显示不出优势。只需要$79的VC++标准版,Directx sdk(可免费下栽),opengl文档(也是免费的),至多再加一套msdn即可.比如QUAKE,全是手写的c代码,连C++特性都很少用到。Borland也认识到了这一问题,所以发布了免费的C++编译器) (14) 价格 m$的开发工具确实便宜(相对而言),不过是否物有所值,只能看你干什么用了。 (ps:别指望你买的toyota能有ferrari的性能。:-) (15) 前景 有人认为m$财大气粗,Borland难以对抗。我看不能这么简单下结论。m$有它自己的问题:法律诉讼,人才流失,资源分散,四面出击(m$现在连鼠标,键盘,游戏杆, 玩具 都生产)。而Borland/inprise集中精力在开发工具,中件产品(如midas,visibroker和application server)和企业应用/管理环境(如apPCenter和securityservice)上,应该还是大有可为的。况且Borland和m$之间并非纯粹的竞争关系,Borland开发工具给m$Windows带来的收益要远大于和m$开发工具竞争带来的损失。毕竟对m$来说,开发工具只占其收入的很少一部分,即使不搞开发工具也只不过是个面子问题,于m$无损。m$在它面临垄断/不正当竞争指控的时候,因为长期侵犯知识产权而赔偿给Borland一亿美元(称为“授权费”),这多少也可以看作是一种和解的举动吧。另一种经常听到的论调是“m$的产品市场份额大,Borland能撑得住吗?”,这其实也有很多问题。鉴于m$出于竞争的目的,经常虚报数字,影响市场(m$的律师在法庭上承认m$曾夸大过其ie和office的市场占有率);m$自己宣传的其开发工具的市场占有率也很值得怀疑。m$还有重复计算的问题,比如卖掉一套visual studio,在计算vb,vc,vj等的销售量时都计算在内。其实很多人/公司买visual studio只用其中的一两种。其实Borland产品的销售量还是很大的,尤其是在欧洲,北美和澳大利亚,在亚洲...(是因为d版太多了)。另外,每个公司都有自己的产品/市场定位,你能因为toyota,ford,volkswagen卖的多就说ferrari,maclaren,benz不行了吗? 4. 结论 Delphi(其实应该说Borland产品)在技术上有优势,VC++(其实应该说m$产品)也占有相当的市场份额。(ps:说了半天等于没说。:-)(ps:m$的c#(读c sharp)能取得突破吗?我看不会。因为m$产品通常达不到所宣传的性能;而且一种不符合标准(c#不兼容任何一种语言标准,虽然据称更接近c)的产品也很难取得成功。j++就是一例) 5. 附:我所知道的Borland和m$的故事 (1) Bill Gates是如何拿到IBM订单的1979年,tim paterson写了最初的DOS并以$1000的价格卖给了digi-talreserch。当时apple的apple i和apple ii销势很好,所以IBM在1980年也决定搞PC。Billgates知道后,认为是个机会,就以$5000从digital reserch买下了DOS,并逼着手下人在一间没有空调的小黑屋里日夜不停加以修改。m$当时是个小公司,只有十几个人,名叫micro-soft。所以尽管DOS的开价($20000加每拷贝$30授权费)比cp/m-86(指用于intel8086/8088的版本,不是指年代)的开价($100000加每拷贝$70授权费)便宜不少,IBM的人还是倾向于使用cp/m-86。据“比尔.盖茨的秘密”(Bill Gates' secrets)一书的作者说,Bill急得团团转,只好求助于他妈妈。Bill的母亲时任华盛顿大学校长,与当时的IBM董事长john opal是大学同学(据说...)。Bill这一招果然有效,没多久就拿到了IBM的订单,从此DOS成了IBM PC上的首选操作系统。 (2) Borland的名字和历史 Borland听起来不象一个公司的名字,倒象一个国家的名字。1982年,philippe kahn带着3000美元从巴黎到了美国,除去机票钱已所剩无几,只好租人家的车库小阁间住。kahn在硅谷干了一段时间,并以mit(et in time,恰好与麻省理工学院的缩写相同)为名开了一家公司。1983年,kahn和anders hejlsberg(丹麦人,Turbo Pascal编译器的主要作者)合作开发了Turbo Pascal,并赊帐在《新闻周刊》上登了一份彩页广告。Turbo Pascal在PC开发工具中是一个里程碑式的产品,它第一次把编译时间由分缩短到秒,并且其$49的价格在当时也是创纪录的(当时的一份编译器动辄数千美元,便宜的也要几百美元,还不好用)。Turbo Pascal在不到两年的时间里销售了超过130万套(考虑到当时的PC数量,这是一个非常惊人的数字),Borland从此创立。kahn在解释为什么以Borland命名时说“我们要起一个与众不同的名字,其他公司都是叫这个micro,那个soft什么的”。不过据认为这个名称与德国或北欧的某些地名有关(kahn的父亲是德国人,而且Borland的很多开发人员是北欧人)。 (3) anders hejlsberg为什么去了m$1996年,anders hejlsberg离开Borland去了m$。在此之前,m$曾多次企图挖走anders,但都没有成功。据信anders去m$(主要)不是钱的问题,虽然m$的开价也相当有吸引力:130万美元年薪外加股票期权和分红,总计超过300万美元。主要原因是anders和Delphi开发组的其他成员在修改编译器的问题上发生了争执; 还有,据Borland内部人讲,anders认为自己不再是“不可缺少的人”。 虽然anders hejlsberg去了m$,我仍然尊敬他是一个天才,Turbo Pascal的主要作者,Delphi的奠基者。 (ps:anders从1999年初就不在j++组了,而去做com+的开发。m$的人讲的) (4) m$产品的秘密 <1> msc最初是从at&t买的授权; <2> vb的1,2,3版实际上不是m$开发的,而是cooper software开发的。john cooper 在m$时未受重用,离开后m$倒要花钱请他开发产品,真有点黑色幽默的味道; <3> ms sql server最初是买sybase的产品,6.5以前的ms sql server和sybase根本就是一回事; <4> Windows 95的主要技术负责人(名字我不记得了,不过在dejanews(www.deja.com)上可能还能找到有关文章)是1990年从Borland跳到m$的,不过他在1998年已经离开m$,开了自己的公司; <5> Windows nt的开发组整个是从dec挖来的,是以前做dec vms的那些人。所以 在win32平台上有很多vms的痕迹,比如说coff目标文件格式。 (5) .net到底是什么,Bill Gates也不知道,请看对Bill Gates的采访: 记者:现在,市场仍然对.net感到困惑。... .net的实质到底是什么? 盖茨:.net是我们对下一代Internet的设想。... 举个简单的例子,.net不仅允许你查看自己喜爱的棒球队的时间安排,并且还能够对这个时间安排进一步加以利用。 (???究竟怎样“进一步加以利用”?为什么不说?难道现在的软件不能“进一步加以利用”?)=============以上是转载文章 我刚学编程,我就觉得DELPHI好, I love delphi[email protected] 支持delphi,但我现在没有机会做了用了几年可是最后还是找了一个机械的工作不知道下场会怎样呢?辛苦!!!! I love delphi so it's very good . upI love delphi[email protected]多谢 DWGZ() 为delphi爱好者提供如此好的帮助!!!!!!! 工具这东西!熟悉就是好!关键在思想!I Love Delphi! i love Delphi我一直认为Delphi比较好 看看李维的《Borland传奇》你就什么都明白了。 UPI love delphi[email protected] UPI love delphi very much![email protected] UPI love delphi [email protected] 呵呵,DWGZ看来是狂热的DELPHI爱好者啊.不过你说C#抄DELPHI是下流这一点我不认同,因为C#的开发负责人就是DELPHI之父Anders啊,所以相似也在情理中.至于以后用什么工具我是无所谓的,看市场演变再说,兄弟们也不用着急。只要基本功好学什么都快。 支持Delphi,不过都了解一些还是有好处的。 I LOVE DELPHI[email protected] 虽然我在用PB干活,但还是很愿意来感受一下气氛,不错,有机会换DELPHI的工作试一下, 呵呵,来报道了。[email protected][email protected]谢谢,DWGZ! 永远支持DElphi[email protected][email protected]谢谢,DWGZ! 永远支持DElphi[email protected] DWGZ(),你小子别在这里煽动思想。什么I love delphi。delphi仅仅就是一个工具,而学会使用工具的方法才是最重要的,delphi能走多远走多远,我才不管,我把基础知识,基本的开发方法,各种应用知识都学到。什么cpp java 什么perl python,什么pascal basic,我都能上手。她走不远我走得远。不要因为爱,就包容一切,delphi有那么多不足之处。M$开发环境的得优点不去看…… delphi的缺点不去看。反而反过来看。唉,你这叫爱吗?这样可以弥补不足吗?优点就在那里了,不值得再想,怎么弥补缺点吧。VS.net 2003的开发环境那么舒服,相对于delphi的那个…… 要不是用习惯了,真的不爽。开始就是这个样子,一直都没有变,就不能换个形式?delphi里面,找一个声明的出处,那么慢,慢的出奇,按住ctrl找,还这么久……没有VB那种自动把首字母大写的东西,自动加空格,自动缩近,没有VC.net里面可以展开缩回代码的方法。搞得那么多人写垃圾代码!我头都大了!这种事情在borland对那些牛人来说是举手之劳,他们不知道为什么……启动一次把那么多控件一次性驻入内存,搞得内存占用量那么大,我的delphi7一开就占了56兆的内存。与其说学习delphi还不如说,学习一种适应集成开发环境的过程和方法。与其说我在使用Object Pascal,还不如说,我在学习面向过程,还有面向对象编程……学习太具体化了就失去了意义。delphi迟早有终结的一天,但是我们顺应潮流的前提下要把自己的命运攥在手里!这个问问题的人就是那种杞人忧天的人,害怕一个靠山倒了就没有了饭吃!作为中国人来讲,我们是被动的,我们被动的使用他们的编译器,集成开发环境。我们没有自己的,我们没有自己的东西。就因为这点,我不爱delphi……我被动的使用,被别人牵着鼻子走,我讨厌这个。只要我们国家出了一种IDE,我就支持到底。可惜啊。 Delphi现在来说,还是很错的!但是将来如何就不知道了! 不过我想 .net 和java的选择还是必须的。 iw549可以给我证明,在EX-EX和老外们交流的时候,那些家伙们中间,有些用delphi3 delphi4!甚至有个家伙再问delphi2的一些事情。照样能开发许多好东西。看我们,更新换代的这么快,毫无意义。害怕以后的delphi走不远了……俗话说得好:一招鲜吃遍天。还有一句俗话说得好:不怕千招会,就怕一招精!能赚钱就是硬道理,能提高自己的水平就是大道理。好了,你们继续,我走人…… 昨天忍不住把《勇敢的心》又看了一遍,真的是经典。大家还记得威廉华莱四临死前竭力吼出的的那个单词吗?他说的是:“delphi!!.....” UPI love delphi [email protected]我坚决支持delphi up I love delphi 更爱delphi神庙:)[email protected] 我也觉得delphi是目前最好的开发工具,虽然现在用C#搞web开发,但时时想起用delphi的日子 i love delphi 坚决支持delphi[email protected] DELPHI!确实是个不错的开发工具,我虽然没有从事过开发工作...我对DELPHI的了解不亚于一般的开发者..我支持DELPHI..不过进军.NET是DELHPI的唯一,政治课本里有句话:发展才是硬道理. delphi是当今国际上开发MIS最块的工具,VB呢?是最容易的开发工具VC是当前最强的开发工具,你选择什么呢??? I Love Delphi!Email:[email protected] 我们这里的选择: vb,开发数据库,主要是以sql server2000为核心,兼容性相当好 vc,底层处理,现在开发的图像识别,同步监控用的,感觉用vc写这类东东很简单,也很方便。 delphi,开发程序界面,感觉上手挺快,出来的界面挺漂亮。 这就是选择,不会说哪个好哪个烂了吧? 呵呵,老早就看这个帖子了,DWGZ和reallike的确是老冤家,哈哈无论到哪里都要对立。不过,根据我的判断,这两个家伙都只是技术上的对立,前几天DWGZ还委托我给reallike发资料呢,值得大家学习呀。reallike,你可以叫我549,也可以叫我lw549,可是iw549是谁呀。怎么把我的名字改了,该打! 个人认为一个程序员需要做好两件事:1.精通一到二门语言 开发软件是表现程序员水平的唯一途径,如果对语言不够精通,写出来的代码必然很烂。只有精通了一门语言,你才能把自己的思维表达出来。2.学好基础知识 基础知识是必要的,比如tcp/ip、比如操作系统、比如数据库理论,无论你进行哪方面的开发,都需要理论做基础。如果说掌握开发工具是练就刀法的话,学习理论就是修炼你的内功内功强的人用什么招式都不会很弱。而内功一般的人即使拥有nb的葵花宝典也未必能有过人的武功。我比较侧重后者,但是不是说前者就不重视,我是比较爱钻牛角尖的。呵呵。 Anders编写的Pascal编译器是Borland最宝贵的财富之一。Borland绝对不会轻易放弃这个财富。Borland最近推出新的BCBX,清晰的表明了一点,在以后,BCB和Delphi将走向完全不同的发展道路,特别是从BCBX完全摈弃了基于Object Pascal的VCL,开发全新的Framework这一点上看,Borland就象当年推出OWL那样,是下了狠心的。而且绝对值得期待。从短期的发展来看,在未来一段时间内,如果考虑整个开发语言的系统,.NET的风头必然会超过Java。原因很简单,.NET还比较单纯,不象现在的Java,一大堆的概念和工具。但是由于Java已经有了那么多的用户群,所以在.NET发展到一定程度,各种概念和工具也开始向如今的Java那样“乱花渐欲迷人眼”的时候,就是Java回头杀一枪的时候到了。所以,我估计虽然近期Java会受到一点打击,但是最终Java和.NET肯定会打个平局。再来看所谓的原生语言开发。C/C++一直是所有平台下程序开发的首选。关键是选择怎样的开发工具?BCB和VC的争夺不用我来说。但是Borland为什么要在推出BC#B之后,又推出BCBX呢?显然,Borland已经明确的看到了一点:那就是即使在当前所谓的分布式、Web Service风靡的年代,原生程序的开发仍然会在长期内占据绝对垄断和绝对优势的地位。而Borland一贯的作风就是不会明确的放弃一个语言而专注于一个语言。所以,它几乎支持所有的语言开发。结合以上两点,我能得到这样一些结论和想法和大家一起探讨:一、Borland到底更注重Delphi还是C++系列的工具,目前还不明了。因为毕竟现在无论BCBX还是BC#B,都还没有真正有那么多的市场反馈。Borland还很难判断他们的棋是走对了还是走错了。二、但是不管如何,Delphi必将在很长的时间内持续发展!而真要到讨论Delphi能否走下去的问题,恐怕是在5年以后了。以上管见。 喜欢Delphi,主要是因为它的语言优美,严谨,但聪明的程序员都不会在一棵树上吊死! i love delphi[email protected]正在學習中,看了上面的討論,我會繼續努力!!!謝謝! 如何显示带有自定义标题的对话框 路过的各位大哥大姐们,有力地出力,没力地捧个场吧 怎样判断数据库服务器中有指定的临时表?如果有,临时表怎样删除? QUERY调用存储过程问题寻求帮助 谁有类式CheckboxList的控件 请熟悉shell编程的朋友进来帮帮忙,分不是问题,Up者有分 大家晚上好,我有个问题要请教各位一下。 关注(高分)!!!!!!!!!!!!!!!!! vc和delphi高手请进!古怪的问提! 使用webbrowser如何不下载图片? 请帮忙看MEMO里的内容应该使用那种类型的字段保存??? 典型数据库查询问题,数据库程序设计者必读!
做好跳的准备,然后等着看吧
2. VC 已经不适合时代的需要,虽然她很牛,但是不适合快速开发
3. PB 功能单一, 只能在数据库方面发展
4. BCB 由于Borland的错误决策让这么一个好产品....唉不说了
5. Java 只是MS 的的反对者们吹捧出来的一个不伦不类的东西, 让它做一般的应用软件,KAO去死吧
5. C# Java的变种,调用API还他妈像VB一样声明, 指针还要写在什么安全代码里面不爽, 它完全是抄袭Delphi, 下流!
7. Delphi 以后支持.net, 前途广大, 大量的第三控件支持, 支持最大多数的技术, 大量的可利用源代码,编译速度一流, 为什么Delphi不好, 都是刚入门的菜鸟们以讹传讹传来的, 我倒没怎么发现Delphi有那么多Bug, Delphi用的久的人是不会随便讲些不负责任的话
我最后想说的是, 即使Borland 倒了, Delphi不会倒, Delphi就是现在最好的最棒的开具!
现在完全在Borland的控制下,而Borland自己都不知道自己要干嘛。
搞B/S当然是Java和.net的天下了,不过delphi转向.net也已经是必然趋势了。
所以我们不必为delphi的未来担心,况且深入探索vcl对培养程序员的思维是非常有帮助的,这种思维方式的培养,是独立于语言的,学什么都一样。
-------------------------
说你小子是白痴一点都不为过, 还对你客气了
up一下, 说
I love Delphi
你就可以得到这本书(不说的没有), 我的email [email protected], 要的跟我索取, 我明天发给你们, 今天太忙了
注:本文转载,出处不详。
偶然来找一个文件,却发现这里关于VC++和Delphi的讨论很是激烈。看了大家写的一些文章,觉得有些
看法正确,有些就很偏颇甚至错误(也许无知?很抱歉我这样说:-)。我无意与任何人争论,更愿意把这看成
是技术上的讨论。应该本着公正,不带偏见的态度(这并不意味着非要平分秋色,一切应以事实为准)。我用
过除tp1以外的所有版本的Turbo Pascal,所有版本的Turbo C/Borland C++,所有版本的Delphi和C++
Builder;以及msc 5.0/6.0,msc/C++ 7.0和visual C++ 4.2/5.0。不敢说有多高的水平,至少也算有一点
经验吧。下面就谈一下我的看法。
1. 编译器
应该说Borland的编译器是最好的。因为Borland有全世界最好的编译器开发组(虽然anders hejlsberg
离开了)。从技术上来讲,Borland领先任何竞争对手至少2~3年。一般来说,Borland的编译器总是能生成更
小的代码并且通常(并不是在任何情况下)更快的代码。
紫云英、曾登高在文章中说VC++编译的程序小,这其实是使用了动态连接的结果 。m$把VC++的运行库
(msvcrt*.dll,msvcp*.dll, mfc*.dll,你看看这些文件加在一起有多大)在安装Windows时就放在了system/
system32目录中了。两位说“协商接口”的问题,恐怕是对某些英文文章的理解错误。m$就是不愿意在
Windows中带上其他公司的运行文件,没有技术上的原因。
其实Delphi/C++ Builder不论在动态连接或静态连接的情况下,生成的程序都要比VC++的小。比如mdi的
例子程序:在Delphi/C++ Builder中选new ... | project s |mdi application,在VC++中用mdi app
wizard;生成的程序功能是非常类似的。
下面是比较结果:
(Delphi打开优化,C++ Builder使用最大速度优化,VC++ 5使用最小代码优化)
Delphi 3 Delphi 5 C++ Builder 5 VC++ 5
dynamic link 21k 35k 44k 70k
static link 253k 398k 467k 490k
凡是使用了应用类库的程序(不管是mfc,owl,vcl以及新的clx框架)都要比不使 用的大不少。这是因为
目前的智能连接(smart link)技术还只能针对全局变量/过程,而不能用于对象结构。哪怕你只使用了某个类
(或被这个类间接引用)的一个属性或方法,这个类以及它所引用的所有类都全部被连接到exe中。目前所有的
编译器都没有解决这个问题。 (ps: 其实能生成最小代码(真编译)的高级语言编译器是Turbo Pascal,不信
你写程序比较一下:
program test;
begin
writeln('hello, world.');
end.
生成的exe不到1.5k。而同样的c程序:
#include
main()
{
printf("hello, world.\n");
}
最精悍的c/C++编译器生成的代码也有6k。
那么几个编译器生成的代码质量又如何呢?
举一个例子,比如我们在编程时经常用到的for循环语句:
(1) object Pascal:
procedure foo;
var
i, j: integer;
begin
for i := 0 to 15 do j := j + i;
end;
(2) C++
void foo(void)
{
int i, j;
for (i = 0; i < 16; i++) j = j + i;
}
Delphi 3生成的代码(打开优化): 字节数 时钟周期
00424aa9 33c0 xor eax,eax 1
00424aab 40 inc eax 1
00424aac 83f810 cmp eax,0x10 1
00424aaf 75fa jnz -0x06 0 (可并行)
-----------------
8 3
C++ Builder 5生成的代码(最大速度优化):
00401535 33c0 xor eax,eax 1
00401537 40 inc eax 1
00401538 83f810 cmp eax,0x10 1
0040153b 7cfa jl -0x06 0 (可并行)
-----------------
8 3
visual C++ 5生成的代码(最大速度优化):
27: for (i = 0; i < 16; i ++)
00401205 mov ecx,dowrd ptr [j] 1
00401208 xor eax,eax 0 (可并行)
28: {
29: j = j + i;
0040120a add ecx,eax 1
0040120c inc eax 1
0040120d cmp eax,10h 1
00401210 jl foo(0x0040120a)+0ah 0 (可并行)
00401212 mov dword ptr [j],ecx 0/1 (取决于上一条指令的
分支预测情况)
30: };
-----------------
16 4.2 (假定分支预测准确度80%)
VC++ 5的最小代码优化生成也有11个字节:
27: for (i = 0; i < 16; i ++)
00401205 xor eax,eax 1
28: {
29: j = j + i;
00401207 add dword ptr [j],eax 1
0040120a inc eax 1
0040120b cmp eax,10h 1
0040121e jl foo(0x00401207)+7 0 (可并行)
30: };
-----------------
11 4
注:
(1) Delphi/C++ Builder的结果是用Turbo debugger直接反汇编的,VC++ 5的结果是从集成环境的源级
调试得到的。
(2) 时钟周期数以pentium处理器为例,实际上,对于没有并行执行单元的cpu(比如386/486和nx586等)
VC++ 5生成的代码速度还要更慢一些。
(3) 分支预测准确度源自intel的"pentium optimization reference"。不过与具体程序密切相关,一
般来说程序中的条件转移指令越密集则分支预测准确度越低。
可以看出,Delphi/C++ Builder的这段程序有1~1.2个时钟周期的优势。这主要是因为Delphi/C++
Builder的编译器比较智能,根本不编译无用的废语句。 (有趣的是,对于这段程序而言,VC++ 5的最大速度
优化反而不如最小代码优化生成的代码运行速度快。) 不要以为1~1.2个时钟周期不算什么,整个程序的快与
慢就是这样一个个时钟周期积累出来的。而且就这几条指令而言相当于快25%~28.6%,是非常可观的数字。我
没有用VC++ 6测试(我从VC++ 5以后不再使用vc了,因为C++ Builder 5能完全兼容vc --- 这种兼容性从C++
Builder 3开始就有了,不过一开始并不完善),不知道是否有改进。有人有兴趣的话请测试一下。
有兴趣的话,可以去jake's code efficiency challenge(http://www.xnet.com/~johnjac)看一看。那有
代码运行性能挑战。目前Delphi/C++ Builder在6项测试中保持5项 领先。
(ps:Delphi 2就曾在1996年的PC week的性能测试中击败过VC++ 4.2)
首先我不想评价所谓“Pascal是玩具语言”这种无知的说法。某些连basic都用不好的人是不可能正确
评价其它语言的优劣的。至于“只配高中生使用”就更加可笑了:peter norton没上过大学,id software的
johncarmack没上过大学,你不服气?!请不要嘲笑高中生,大多数程序员可能永远也达不到这些“高中生”
的水平。创造性工作需要的是天才,你认为天才相当于什么学位?:-)
(1) 预处理,宏以及.h文件
object Pascal不支持预处理,其实是不需要。无法直接编译源代码的编译器才需要预处理器的支持(用于
翻译/规范源程序(也包括.h之类)以利于编译)。预处理器的出现是因为当初ken thompson和dennis ritchie要
在只有256k内存的pdp-11上实现c编译器难度很大,才采取的折衷办法。现代大多数c/C++产品已经把预处理器
包含在编译器中了。
(ps:c中采用尽可能短的关键字/运算符也是由于这个历史原因)
至于macro和.h则应该说是垃圾特性,只是由于兼容性的考虑才保留下来的。ansi/iso c/C++规范中明确
建议:“不要使用macro和.h,应该使用程序中的常量定义和函数替代”。因为macro和.h不是c/C++的语言特
性(这是真的!),没有明确统一的语法定义。还会导致编译速度降低,另外由于macro在每个使用的地方被展
开(不是调用),大量使用macro会使生成的代码臃肿。
(2) 集合,子界类型
C++不支持这些object Pascal的原生类型(编译器能直接识别的)。但可以用类来模拟,毕竟C++的对象结构
是最复杂灵活的(ada除外)。不过性能有损失。
(3) 枚举类型
object Pascal不支持为每个枚举元素指定值。例如:
c/C++中可以定义:enum aweek {sun = 1, mon, tue ...};
object Pascal中只能定义:aweek = (sun, mon, tue ...);
(4) 数组
c/C++不支持object Pascal中指定下标的数组,下标只能从0开始。
(5) 结构
object Pascal不支持struct(在Pascal中称为record)中的位域(bitfield)。bit field 可以bit为单位(不
需要整字节)来存储结构成员,可以减小结构的存储空间。不过存取效率会有所降低。
(6) 字符串
字符串处理是object Pascal的强项之一。能够支持灵活高效的串处理。严格意义上讲,c/C++不能算支
持原生的字符串类型。char *和char[]更近似于用户自定义类型,因为编译器不支持字符串的内存自动分配
和回收,需要用户自己调用malloc()和free()。object Pascal也支持c/C++风格的字符串(称为PChar)。 不
过string类型更加强大。从实现上来看,object Pascal的string类型使用前缀表示串长度(1字节前缀的
shortstring和4字节前缀的long string,两种string自动兼容,并且long string也兼容PChar),c/C++中
的char *和char[]使用后缀chr(0)表示串结束。不同的表示方法对串处理性能有很大的影响:对于大量,复
杂的字符串操作,用object Pascal可以写出比c/C++快几十倍的程序(许多用Pascal写的Pascal编译器,比
如free Pascal,Pascal pro等,虽然技术水平一般,但编译速度也很快,在某种程度上也得益于 Pascal的
字符串处理效率)。比如取串长度函数length/strlen(),object Pascal的实现只需要一条mov指令,而c/C++
的实现则需要进行重复串扫描直到找到结尾0为止。object Pascal的string类型在支持unicode字符方面也有
优势。要知道c/C++的字符串给现代操作系统支持unicode字符带来了很大的困扰,比如串'abc'的unicode表
示为:41 00 42 00 43 00,这使c/C++程序根本无法处理这种字符串。虽然修改编译器可以很容易解决这个
问题,但光修改编译器是不够的,还要修改操作系统,否则以前的大量c/C++程序根本无法在新操作系统上
使用(这简直是灾难 --- 你连notepad都没了,怎么办?:-)。Windows采用凡是涉及字符串处理的api都提供
两套的解决方案。比如textout,有用于处理ascii字符的textouta和用于处理unicode字符的textoutw。而
unix/linux采用另一种办法:凡是涉及字符串处理的api都使用utf8压缩编码(一种类似于rtf的编码方法:
凡是ascii字符都直接存储,多字节字符则用\进行转义),虽然(勉强)保证了兼容性却也代价不小。
(ps:C++中的string/ansistring是用类模拟的,所以性能...)
(7) 多重继承
毫无疑问,object Pascal不支持多重继承;并且也看不出Borland有增加这一特性的意向(其实增加是轻
而易举的)。object Pascal通过接口(interface)实现多重继承.interface不仅可以引入用object Pascal实
现的对象,也可以引入其他语言实现的com/dcom/corba对象。你真的需要多重继承吗?我想大多数程序员和
我一样都从来没有使用过多重继承(连vcl这么强大灵活的体系结构都根本没有用到多重继承)。
(ps:java和Delphi一样不支持多重继承,也使用interface来实现多重继承。其实这并不奇怪:jdk 1.2和
java 2主要是由Borland开发的,sun只挂名而已。不信你看java类库是不是和vcl很象。:-)
(8) 对象模板
object Pascal不支持对象模板。因为对象模板不过是宏的语言实现而已(宏本身不是c/C++的语言特性)。
(9) 重载
object Pascal支持函数/过程的重载,不支持运算符重载。C++全部支持。
(ps:我个人倾向于object Pascal应该增加对运算符重载的支持)
(10) 位及逻辑操作
object Pascal和c/C++在这方面没什么差别。c/C++的&,|,~,^,>>,<<,&&,||,!等效于object
Pascal的and,or,not,xor,shr,shl(and,or,not,xor既用于位操作也用于逻辑操作)。不过c/C++不支持
逻辑xor(a xor b = a and notb or not a and b,还是可以实现的)。
(11) 风格
其实这是我更倾向于使用Delphi的一个重要原因(由于工作的原因,我也经常使用C++和汇编)。就象有些
文章所说的:“object Pascal和C++是同一重量级的语言”,确实难分轩轾,差别反而主要是在风格上。C++
强调灵活,而object Pascal更注重整洁和优美。《程序设计语言:设计与实现》一书的作者也称赞Pascal是
“一种极优美的语言”。有人因此认为Pascal“笨拙”。其实应该是“大道至简”。我认为即使用C++写程序
也还是工工整整的好,不要卖弄技巧。只有水平不高不低的程序员才喜欢卖弄技巧(水平太低的卖弄不了,太
高的又不愿卖弄了)。就象有人评李昌镐的棋“平淡”,但马晓春再怎么“鬼才”也只能甘拜下风。
上面说的其实都是C++ vs object Pascal。不过也适用于VC++ vs Delphi。
(ps:VC++其实并未实现全部ansi/iso C++ 95规范(目前的最新标准)的特性(所以有人戏称之为c+)。而
C++ Builder则完全兼容ansi/iso C++95规范,并支持at&t(c的诞生地)和unix v的全部C++扩展特性。有人称
“m$坚持工业标准,Borland随意修改”,这是不对的。Delphi也全兼容ansi/iso Pascal 1983/92规范,以
及apple object Pascal (用过codewarriorprofessional的应该知道apple的object Pascal)。)
(1) 易用性
毫无疑问Delphi有巨大优势,这不用多说了吧。
(ps:Delphi的真正伟大之处在于并不因为易用而降低技术水准。你需要复杂性就有复杂性,你需要灵
活性就有灵活性;不用可视化也一样写程序(可视化只是object Pascal 对象结构的另一面),不用vcl也一
样写程序)
(2) 适用范围
VC++几乎能做任何硬件允许的工作。Delphi也能。(“不!!!”,我知道你会这样说,你会举出vxd。:-)
Delphi不能写vxd(其实如果你用Delphi生成obj,再用m$的link连接,是可以的)是有原因的(你见过非m$的工
具能生成vxd的吗?watcom?symantec?gnu?...),但不是技术上的原因。vxd的le(linear executable)文
件格式最早出现在Windows 3.0中,格式很简单(比ne和pe格式都要简单),基本上是内存映象文件。但m$不知
道出于什么动机就是不允许其他公司的软件生成它的这种(专利)格式。Delphi是可以写Windows nt的sys和新
的wdm(Windows driver model)驱动程序的,这些使用普通的dll格式。
(ps:从法律角度讲,你自己写一个程序,未经m$允许生成ms word文件也是不行的)
(ps:玩过“奇迹时代”(age of wonders,http://www.epicgames.com)吗?是用Delphi 3写的。画面和
速度都优于m$的“帝国时代”。不过我不喜欢玩策略类游戏,我喜欢的是duke3d和QUAKE系列,还有tomb
raider系列。:-)
(3) 集成开发环境
Delphi的ide更简洁/好用一些。
(4) 数据库支持
在这方面除了Delphi的兄弟C++ Builder/jBuilder恐怕只有power Builder能(勉强)与Delphi相比。不过
pb的性能和使用范围就差得太远了(要不怎么叫poor Builder呢 ?:-)。
(ps:我的印象是现在大多数基于网络/大型数据库的c/s和多层结构的应用都是用Delphi/jBuilder开发
的)
(5) 网络功能
Delphi也有一定的优势。尤其是在Internet开发方面。
(6) 组件支持
Delphi除了基于object Pascal的vcl/clx外,也支持基于com/dcom的组件(比如activex),另加corba支
持。VC++只支持支持基于com/dcom的组件。
(7) 应用框架/设计思想
vcl比mfc至少领先一代,这也毋须多言。mfc充其量不过是对owl的(一种不太成功的)模仿而已,从设计
思想上看甚至还不如owl。作为一种语言的基本类库(不论可视与否),应该从大处着眼,力求简洁有效,保
持一定的弹性和抽象度(抽象意味着从功能出发,比如vcl中的tcanvas就是对Windows中dc(device context)
的一种极好的抽象,比起mfc中的设计高明了何止一点半点)。而不是面面俱到,一一照搬apis(不幸的是,
m$的程序员多年以来一直在不辞劳苦地做这项工作)。看看mfc的某些类,简直惨不忍睹:通常除了省了hwnd
和dc之类的参数(已经作为类的私有数据保存了),其方法(method)简直就是Windows api的翻版。这样做有
什么意义呢?Windows api不就摆在那里吗?比如说,使用mfc中的线程类还不如直接调用createthread/
exitthread/resumethread/setthreadpriority之类的api更方便快速呢。(ps:用过Delphix(http://www.
yks.ne.jp/~hori/)吗?Directx这么繁杂的结构可以用object Pascal封装得如此之好再次证明了vcl体系结
构的强大)
(8) 调试
两者相差无几。VC++的源级调试更用户友好一些,而Delphi/C++ Builder对多线程程序的调试支持更好。
(ps:要比单独的调试工具,Borland的Turbo debugger可就要比m$的codeview强多了)
(9) 运行环境/系统需求
应该说差不多。VC++的启动速度确实要快于Delphi(这主要是相对于Delphi 4+而言,Delphi 3的启动还
是很快的)。这很大程度上是由于一个事实:VC++主要是一个基于文本编辑器的传统开发环境。code war-
riorprofessional不是启动更快吗?至于“一个数据库程序要带上3~5mb的bde运行文件”的说法,这可能是
由于在安装制作工具(installsheild,wise之类)中使用了“全部bde安装”(默认)而不是“部分bde安装”。
如果你只使用access,dbase,foxpro,paradox之类的桌面数据库,只需要几百k的运行文件就可以了。用
m$的工具开发的数据库程序也要带上一大堆odbc,dao,jet,ado,msde之类的运行文件。在Delphi 5中,
如果使用adoexpress,interbase express访问数据库的话,可以不带bde。(ps:不管怎么说,Borland在
Delphi/C++ Builder的启动速度方面还是要努力改进!)
(10) 产品质量/稳定性
有文章称“VC++的质量好,稳定性高”。真的是这样吗?visual studio的service pack不是都出到4了
吗?什么是service pack?主要不就是bug fix + patch吗?!Borland的工具也并不完美,Delphi 3的vcl
中确实存在“内存漏洞”,会导致用d3开发的程序有时(并不总是)退出后不能释放分配的内存。VC++的问题
也不少:ie是用VC++写的吧,上网时多启动几个,开开关关,最后全关闭,看看你的系统资源剩下多少了?
还经常导致“general protection error”。ultra edit是用VC++写的吧,也有同样的问题。其实说到底,
程序质量好不好,运行稳定不稳定,主要取决于开发者的水平/责任心。比如说tomb raider系列和QUAKE系
列游戏同是用VC++开发的,但画面质量和运行速度显然QUAKE系列更胜一筹。象美国航空航天局(nasa),俄
罗斯宇航局(rsa),美洲银行(bankof america,资产超过5000亿美元的大银行),其他诸如american air-
lines,at&t,bmw,compaq,bbc television,british telecom等大型机构/公司都在用Delphi开发复杂的,
企业级(可笑的是,有人居然称“用vc开发企业级的桌面应用”,殊不知企业级应用和桌面应用是相对而言
的)的应用系统(在http://community.Borland.com(Borland社团站点)上有关于用Delphi和C++ Builder开发
的产品介绍),如果有人还要说“...稳定和可靠是硬道理,只好忍痛割爱了”,那他恐怕只好自制开发工具。
(ps:关于Delphi与某些显卡驱动冲突的问题,是由于某些显卡(如s3 virge gx)的老版本驱动程序不能
正确处理Windows公用控制中的imagelist的绘制方法造成的,在这种情况下所有在imagelist中使用多个图
象的程序都会有问题)(ps:至于“一看到很多优秀的共享软件冒出具有Delphi特色的错误异常就感到悲哀”,
建议此人先搞清楚你看到的“错误异常”消息是这些软件本身出错呢,还是运行时的异常处理消息(比如
“没有找到指定文件”或“索引超出范围”之类)再说。Delphi中有完善的异常处理,所以很多程序员不再
写错误处理,而放手让编译器去处理。我认为这不是一个好习惯,至少弹出的消息对话框可能与你的程序所
用的语言/风格不一致。让人家误会了不是?:-)
VC++的帮助和文档确实要比Delphi/C++ Builder的丰富一些。不过这不应当包括msdn,因为msdn是一套
独立的产品,并不是专门给VC++准备的,况且其中包括了相当多的Windows技术资料。作为一名程序员,不
管用什么开发工具,可以(也应当)有一套msdn。Windows数据结构/apis是用c风格描述的这一点可能对Delphi
程序员来说略有不便,不过Delphi中已经包括了大多数转换;另外,如果一个程序员连转换.h文件这么简单
的工作都做不了的话,他(她)可能也做不了什么象样的开发。Internet上的一个志愿者组织
(www.Delphi-jedi.org/)在这方面也做了大量工作,在他们的站点上有几乎全部有用的c/C++库.h的object
Pascal翻译。(ps:Delphi/C++ Builder程序员为什么不可以买一套msdn呢?毕竟我们还在用m$的操作系统,
总不至于连Windows技术资料都不要了吧)
(ps:从msdn看m$msdn中的技术资料主要是以compiled html(.chm)格式存放的,但m$把全部.chm放在disc
#1,而把索引文件(.chi)单独放在disc #2。这样一来就无法从光盘上直接看这些文件。要么安装,要么手工
把相应的.chm和.chi拷贝到一起。我看不有什么技术上的理由(谁知道请告诉我)不把一半.chm和.chi放在一张
盘,而另一半放在第二张盘。这至少反映出m$内部某些人的阴暗心理)
(12) 国际化支持
VC++中已经包括了十多种语言的rtl资源,Delphi中需要自己做资源本地化。虽然franch,german之类
的版本中也包括english资源。:-<
(13) 应用领域
VC++在Windows设备驱动开发(毕竟是m$ Windows)和某些桌面应用(比如游戏)开发中用得较多。Delphi
更多应用在数据库/多层结构,多媒体和Internet开发等方面。
(ps:VC++在游戏开发中用得较多我看主要是价格因素,游戏使用专用界面,通常不涉及数据库和inter-
net(即使Internet play也不过是简单的tcp连接,并且Directp lay中已包括此项功能),昂贵的Delphi和C++
Builder显示不出优势。只需要$79的VC++标准版,Directx sdk(可免费下栽),opengl文档(也是免费的),至
多再加一套msdn即可.比如QUAKE,全是手写的c代码,连C++特性都很少用到。Borland也认识到了这一问题,
所以发布了免费的C++编译器)
(14) 价格
m$的开发工具确实便宜(相对而言),不过是否物有所值,只能看你干什么用了。
(ps:别指望你买的toyota能有ferrari的性能。:-)
(15) 前景
有人认为m$财大气粗,Borland难以对抗。我看不能这么简单下结论。m$有它自己的问题:法律诉讼,
人才流失,资源分散,四面出击(m$现在连鼠标,键盘,游戏杆, 玩具 都生产)。而Borland/inprise集中精
力在开发工具,中件产品(如midas,visibroker和application server)和企业应用/管理环境(如apPCenter
和securityservice)上,应该还是大有可为的。况且Borland和m$之间并非纯粹的竞争关系,Borland开发工
具给m$Windows带来的收益要远大于和m$开发工具竞争带来的损失。毕竟对m$来说,开发工具只占其收入的很
少一部分,即使不搞开发工具也只不过是个面子问题,于m$无损。m$在它面临垄断/不正当竞争指控的时候,
因为长期侵犯知识产权而赔偿给Borland一亿美元(称为“授权费”),这多少也可以看作是一种和解的举动吧。
另一种经常听到的论调是“m$的产品市场份额大,Borland能撑得住吗?”,这其实也有很多问题。鉴于m$出
于竞争的目的,经常虚报数字,影响市场(m$的律师在法庭上承认m$曾夸大过其ie和office的市场占有率);
m$自己宣传的其开发工具的市场占有率也很值得怀疑。m$还有重复计算的问题,比如卖掉一套visual
studio,在计算vb,vc,vj等的销售量时都计算在内。其实很多人/公司买visual studio只用其中的一两种。
其实Borland产品的销售量还是很大的,尤其是在欧洲,北美和澳大利亚,在亚洲...(是因为d版太多了)。另
外,每个公司都有自己的产品/市场定位,你能因为toyota,ford,volkswagen卖的多就说ferrari,maclaren,
benz不行了吗?
Delphi(其实应该说Borland产品)在技术上有优势,VC++(其实应该说m$产品)也占有相当的市场份额。
(ps:说了半天等于没说。:-)(ps:m$的c#(读c sharp)能取得突破吗?我看不会。因为m$产品通常达不到所宣
传的性能;而且一种不符合标准(c#不兼容任何一种语言标准,虽然据称更接近c)的产品也很难取得成功。
j++就是一例)
5. 附:我所知道的Borland和m$的故事
(1) Bill Gates是如何拿到IBM订单的1979年,tim paterson写了最初的DOS并以$1000的价格卖给了digi-
talreserch。当时apple的apple i和apple ii销势很好,所以IBM在1980年也决定搞PC。Billgates知道后,认
为是个机会,就以$5000从digital reserch买下了DOS,并逼着手下人在一间没有空调的小黑屋里日夜不停加
以修改。m$当时是个小公司,只有十几个人,名叫micro-soft。所以尽管DOS的开价($20000加每拷贝$30授权
费)比cp/m-86(指用于intel8086/8088的版本,不是指年代)的开价($100000加每拷贝$70授权费)便宜不少,
IBM的人还是倾向于使用cp/m-86。据“比尔.盖茨的秘密”(Bill Gates' secrets)一书的作者说,Bill急得团
团转,只好求助于他妈妈。Bill的母亲时任华盛顿大学校长,与当时的IBM董事长john opal是大学同学(据
说...)。Bill这一招果然有效,没多久就拿到了IBM的订单,从此DOS成了IBM PC上的首选操作系统。
(2) Borland的名字和历史
Borland听起来不象一个公司的名字,倒象一个国家的名字。1982年,philippe kahn带着3000美元从巴黎
到了美国,除去机票钱已所剩无几,只好租人家的车库小阁间住。kahn在硅谷干了一段时间,并以mit(et
in time,恰好与麻省理工学院的缩写相同)为名开了一家公司。1983年,kahn和anders hejlsberg(丹麦人,
Turbo Pascal编译器的主要作者)合作开发了Turbo Pascal,并赊帐在《新闻周刊》上登了一份彩页广告。Turbo
Pascal在PC开发工具中是一个里程碑式的产品,它第一次把编译时间由分缩短到秒,并且其$49的价格在当时也
是创纪录的(当时的一份编译器动辄数千美元,便宜的也要几百美元,还不好用)。Turbo Pascal在不到两年的
时间里销售了超过130万套(考虑到当时的PC数量,这是一个非常惊人的数字),Borland从此创立。kahn在解释
为什么以Borland命名时说“我们要起一个与众不同的名字,其他公司都是叫这个micro,那个soft什么的”。
不过据认为这个名称与德国或北欧的某些地名有关(kahn的父亲是德国人,而且Borland的很多开发人员是北欧
人)。
(3) anders hejlsberg为什么去了m$1996年,anders hejlsberg离开Borland去了m$。在此之前,m$曾多次
企图挖走anders,但都没有成功。据信anders去m$(主要)不是钱的问题,虽然m$的开价也相当有吸引力:130万
美元年薪外加股票期权和分红,总计超过300万美元。主要原因是anders和Delphi开发组的其他成员在修改编译
器的问题上发生了争执;
还有,据Borland内部人讲,anders认为自己不再是“不可缺少的人”。 虽然anders hejlsberg去了m$,
我仍然尊敬他是一个天才,Turbo Pascal的主要作者,Delphi的奠基者。
(ps:anders从1999年初就不在j++组了,而去做com+的开发。m$的人讲的)
(4) m$产品的秘密
<1> msc最初是从at&t买的授权;
<2> vb的1,2,3版实际上不是m$开发的,而是cooper software开发的。john cooper 在m$时未受重用,离
开后m$倒要花钱请他开发产品,真有点黑色幽默的味道;
<3> ms sql server最初是买sybase的产品,6.5以前的ms sql server和sybase根本就是一回事;
<4> Windows 95的主要技术负责人(名字我不记得了,不过在dejanews(www.deja.com)上可能还能找到有关
文章)是1990年从Borland跳到m$的,不过他在1998年已经离开m$,开了自己的公司;
<5> Windows nt的开发组整个是从dec挖来的,是以前做dec vms的那些人。所以 在win32平台上有很多vms的
痕迹,比如说coff目标文件格式。
(5) .net到底是什么,Bill Gates也不知道,请看对Bill Gates的采访:
记者:现在,市场仍然对.net感到困惑。... .net的实质到底是什么?
盖茨:.net是我们对下一代Internet的设想。...
举个简单的例子,.net不仅允许你查看自己喜爱的棒球队的时间安排,并且还能够对这个时间安排进一步加
以利用。
(???究竟怎样“进一步加以利用”?为什么不说?难道现在的软件不能“进一步加以利用”?)
=============以上是转载文章
[email protected]
用了几年可是最后还是找了一个机械的工作
不知道下场会怎样呢?
辛苦!!!!
I love delphi
[email protected]
多谢 DWGZ() 为delphi爱好者提供如此好的帮助!!!!!!!
I love delphi
[email protected]
I love delphi very much!
[email protected]
至于以后用什么工具我是无所谓的,看市场演变再说,兄弟们也不用着急。只要基本功好学什么都快。
[email protected]
不错,有机会换DELPHI的工作试一下,
[email protected]
[email protected]
谢谢,DWGZ!
[email protected]
[email protected]
谢谢,DWGZ!
[email protected]
我坚决支持delphi
[email protected]
坚决支持delphi
[email protected]
VB呢?是最容易的开发工具
VC是当前最强的开发工具,
你选择什么呢???
Email:[email protected]
vc,底层处理,现在开发的图像识别,同步监控用的,感觉用vc写这类东东很简单,也很方便。
delphi,开发程序界面,感觉上手挺快,出来的界面挺漂亮。
这就是选择,不会说哪个好哪个烂了吧?
不过,根据我的判断,这两个家伙都只是技术上的对立,前几天DWGZ还委托我给reallike发资料呢,值得大家学习呀。reallike,你可以叫我549,也可以叫我lw549,可是iw549是谁呀。
怎么把我的名字改了,该打!
1.精通一到二门语言
开发软件是表现程序员水平的唯一途径,如果对语言不够精通,写出来的代码必然很烂。
只有精通了一门语言,你才能把自己的思维表达出来。
2.学好基础知识
基础知识是必要的,比如tcp/ip、比如操作系统、比如数据库理论,无论你进行哪方面的开发,都需要理论做基础。如果说掌握开发工具是练就刀法的话,学习理论就是修炼你的内功
内功强的人用什么招式都不会很弱。而内功一般的人即使拥有nb的葵花宝典也未必能有过人的武功。我比较侧重后者,但是不是说前者就不重视,我是比较爱钻牛角尖的。呵呵。
[email protected]
正在學習中,看了上面的討論,我會繼續努力!!!
謝謝!