我想了很久,为什么Delphi作稍微底层一些的东西比C++好。
原因
1、Delphi的源文件组织和工程组织方式要比C++好,而且方便。在作稍微大一点的项目的时候,源文件的管理要比c++的方便,C++的各种符号、名称的管理比较烦人。
2、Delphi如果在头文件齐全的时候,使用API会方便一些,不是函数本身,而是一些函数用到的结构声明,一些类型声明,Delphi的相对简洁,C++当中一个Handle就会有很多的不同的声明,其实都是一个32位的值。而且使用不同的库可能会有相同的东西不同的声明,会比较费解。
3、Delphi中没有讨厌的宏展开。C++中的宏展开,除非你不求甚解,否则要看明白还真的很费事。特别是嵌套了好几层的。有些宏还非常容易弄错。
4、C++中容易让人集中到语言细节上,容易把程序员的注意力引向语言细节,而不是考虑实际的项目需求。特别是做一些新的开发,往往碰到没有用到过的类,宏定义,模版,这时候对这些东西理解往往不是集中在对项目需求的关联上,而是集中在对这些东西实现和使用的语法细节上。
5、在windows写Com写系统服务,不管是用ATL还是MFC都比Delphi的封装差远了。MFC庞大,ATL诡异而且费解。delphi实现一个com的代码规模和ATL实现相当,但是,逻辑上就直白的多了!
探讨。
问题点数:20、回复次数:84Top
1 楼zhmnsw(糖醋鼻子)回复于 2006-12-20 22:33:26 得分 1
一个面向应用,一个面向系统
区别一目了然Top
2 楼YouTuBe(天不言自高,地不言自厚,人不言自无能,水不言自下流)回复于 2006-12-20 22:35:58 得分 1
哦Top
3 楼kwer(理想生活:白天种地,晚上上网 ) (▲▲▲▲▲▲)回复于 2006-12-20 23:20:27 得分 1
不清楚,最好是能混合编程。jf
Top
4 楼maozefa(阿发伯)回复于 2006-12-20 23:39:16 得分 1
原则上同意楼主观点。
我最开始就学C,后来C++出来后,搞了一段C++,用的都是Borland的,感觉很好,谁知以后C++越来越。。。都不想说,怕挨骂。Delphi出来后,用了一下,还行,所以就用Delphi,感觉也不错。
首先声明,我不大懂理论,我不知道面向系统和面向应用的区别在哪?只知道系统有大小之分,有层次之分,一个较大的应用本身就是一个系统!如果说较底层的,自然是ASM和C,OO的东西显然不太适合做;如果只是API方面的应用,我和楼主观点相同,C++还不如Delphi.Top
5 楼ly_liuyang(Liu Yang LYSoft http://lysoft.7u7.net)回复于 2006-12-21 09:06:05 得分 1
偶不喜欢C/C++这个语言
可是很多底层开发仍然需要C/C++
没办法呢~
事实上Pascal确实是严谨的语言~Top
6 楼Could(翻墙鹦鹉)回复于 2006-12-21 09:42:02 得分 1
Delphi适合快速开发界面,拉几个控件上去就搞定,非常方便。但是做非界面的东西就吃力了,要哈希表没哈希表,要正则表达式没正则表达式,基本上就是要什么没什么。
一种语言要生存发展,其最重要的就是要不断地改进。delphi 在十年前可能是先进的,但是这十年来它改进了多少?由于在设计的时候没有象java那样的接口,也没有多重继承,所以vcl库里面的很多东西已是冗余之极,刚开没有深入的时候还无所谓,后来稍微熟悉了就感觉有点烦了,每次遍历个什么的时候都得for i:=0 to xxx.count-1 do这样来一遍,而c++可以针对集合写通用的算法。
或许Delphi当初出现的目的真的只是VB Killer?如果真是这样的话,它的目的肯定已经达到了。但是如果也真是这样的话,Delphi永远只是比VB强一点而已。
10年时间,对Delphi来说可能真是从生到死,虽然现在还没死,但是显然Delphi现在已经过了鼎盛时期了。但是10年对c++来说,只是一小步。c++在出现近十年以后才开始标准化,而标准化的过程本身又用了十余年,第二代标准出来又需要十余年。这就是c++,学会它可能只要半年,但是掌握它却要用一生的时间。
Delphi适合做Project,不适合做software。大多数软件本身来说确实也需要很复杂的界面,但是对于这些软件来说,界面的开发只占整个软件比例的少部分,更重要的时候那些在界面背后的事情,而这些却不是Delphi的强项。
曾经的c++由于没有标准化,什么都得自己写,不是面向大众用户的,但是标准化以后这种现状已经大大改观,stl库的出现是一个不可复制的神话,等到std99出来以后,将有更多易用的库被包含在标准c++之中,到时候c++用户会再次增多。
我也比较喜欢Delphi,并且用它出色的完成了工作上的项目。我喜欢编程,所以我也喜欢c++,因为我知道,如果有一种语言能够陪着我一起慢慢变老的话,那就是c++。
很多人不喜欢强大的美国,但是它存在,并且引领这个世界;
很多人不喜欢c++,但是它也存在,它就是编程语言星球上的美国。Top
7 楼maozefa(阿发伯)回复于 2006-12-21 09:46:50 得分 1
C和C++还是很大区别的,个人觉得C还是不错的,C++就像现在的大牌明星,名气不小,可被人们炒坏了,特别是什么泛型、什么STL,被有些人吵得太热,好像你不懂STL,就是不懂C++,其实不就是个几个头文件代码吗,完全可以不用!我学C++时,根本就没这个东西,很多新手觉得C++难学,很大部分原因就是钻了这方面的牛角尖。Top
8 楼Could(翻墙鹦鹉)回复于 2006-12-21 10:05:07 得分 1
回复人:maozefa(阿发伯) ( 一星(中级)) 信誉:110 2006-12-21 09:46:50 得分:0
C和C++还是很大区别的,个人觉得C还是不错的,C+ +就像现在的大牌明星,名气不小,可被人们炒坏了,特别是什么泛型、什么STL,被有些人吵得太热,好像你不懂STL,就是不懂C++,其实不就是个几个头文件代码吗,完全可以不用!我学C++时,根本就没这个东西,很多新手觉得C++难学,很大部分原因就是钻了这方面的牛角尖。
=======================================================================
C++决不是一种炒作,如果是仅仅是炒作的话,那么多软件干吗要冒险用c++来写?
同是贝尔试验制造的,C++决不是要消灭C。
至于你说你不会STL别人就说你不会C++,别人要那样说也不是完全错误。
另外,这里不是C讨论区,讨论这个离题了,
lz说的是Delphi & C++Top
9 楼CDSoftwareWj(95927)回复于 2006-12-21 10:14:59 得分 1
不太同意楼主的观点,其实C++更灵活,你说的大部分都不是C++的缺点,反而是优点
只是目前,好多不太会用C++的人,用C++写东东,伤人伤已,怪自己没掌握
还有更多的人都是在把C++当“更好的C”来使,比如我 -_-||| C++博大精深不得不服Top
10 楼maozefa(阿发伯)回复于 2006-12-21 10:30:33 得分 1
to Could(翻墙鹦鹉)
============================================================================
我不想又在这里作无谓的语言之争,只是按自己的感受写了几句,也不是针对你的,是有感于你的楼上写的,不过写完了,发在你的回复后面了。
每种语言既然存在而且有市场,至少证明它在有些方面还是有优势的。只不过随着时代的进步变迁发生某些变化而已。Delphi由于Borland自己的原因没有进一步发展,现在看来确实萎缩了,C++又何尝不是?
声明:我没有说C++本身是炒作,而是说被人们象抬明星似的进行炒作,特别是STL等。炒作的本质就是宣传,只不过过度就不好了,我上面说有些新手连C++的皮毛都不会,就开始“研究”泛型、STL、模式等等,未免有些本末倒置。
Top
11 楼zhmnsw(糖醋鼻子)回复于 2006-12-21 10:32:42 得分 1
to Could(翻墙鹦鹉)
-------------------------------------------------
看来你还真把delphi用成了VB,无法沟通了,继续coding...Top
12 楼Could(翻墙鹦鹉)回复于 2006-12-21 10:37:32 得分 1
回复人:maozefa(阿发伯) ( 一星(中级)) 信誉:110 2006-12-21 10:30:33 得分:0
to Could(翻墙鹦鹉)
============================================================================
我不想又在这里作无谓的语言之争,只是按自己的感受写了几句,也不是针对你的,是有感于你的楼上写的,不过写完了,发在你的回复后面了。
每种语言既然存在而且有市场,至少证明它在有些方面还是有优势的。只不过随着时代的进步变迁发生某些变化而已。Delphi由于Borland自己的原因没有进一步发展,现在看来确实萎缩了,C++又何尝不是?
声明:我没有说C++本身是炒作,而是说被人们象抬明星似的进行炒作,特别是STL等。炒作的本质就是宣传,只不过过度就不好了,我上面说有些新手连C++的皮毛都不会,就开始“研究”泛型、STL、模式等等,未免有些本末倒置。
==========================================
我没说不许你发表意见,论坛上面本身就是畅所欲言的,
但是这篇帖子是楼主讨论delphi&c++的帖子,
如果你要讨论c++&c的话,可以单独开帖,
去c++版或者c版。
另外:我倒是没觉得谁在大肆宣传stl啊?其实可能是你自己的心理在作祟。如果一个人反感什么东西,哪怕别人只在他耳边说一句,他都会觉得别人说了一千遍,可能你这种感觉也是如此吧。
确实有你说的那么一些新手,但是老手应该对新手持宽容的态度吧,学习的道路本来就是曲折的,你说他门本末倒置,但是如果这些新手坚持学下去,总有一天他们会走到正确的路上来的吧,你说是不是呢?Top
13 楼CDSoftwareWj(95927)回复于 2006-12-21 10:39:46 得分 1
maozefa(阿发伯) 说:“是”
OK,打完收功...Top
14 楼maozefa(阿发伯)回复于 2006-12-21 10:42:25 得分 1
借CDSoftwareWj(95927) 的一句话改一下:
好多不太会用Delphi的人,用Delphi写东东,伤人伤已,怪自己没掌握。
加一句,很多人以为Delphi就只是拖拖元件而已,元件不能满足他的要求,就大声嚷嚷,其实,在Windows下,C/C++能干的,Delphi照样也能干。Top
15 楼CDSoftwareWj(95927)回复于 2006-12-21 10:46:11 得分 1
还有 Could(翻墙鹦鹉) 你说的这里
-------------
由于在设计的时候没有象java那样的接口,也没有多重继承,所以vcl库里面的很多东
西已是冗余之极,...
-------------
不对,其它的观点还在理,希望你再想想,
1.D没有java那样的接口么?
2.没有多重继承,不是错,反而是现在的潮流,Java和C#不也是单根继承的吗?
3.VCL是一个时代的高度,现在有好多东西可以挖,可以看看 李维的关于VCL的那本书
很好Top
16 楼CDSoftwareWj(95927)回复于 2006-12-21 10:51:39 得分 1
当年我也SB过....也狂过....也盲人摸象过.... hehe^^
弄的现在都不知道什么是对的了,估计没有对错,存在既合理,只能根人的喜好有关系Top
17 楼zhmnsw(糖醋鼻子)回复于 2006-12-21 10:59:34 得分 1
to Could(翻墙鹦鹉)
------------------------------------------------
又见M$的教徒..哈哈
话说当年~~
M$拿他的VB和DELPHI比效率
VB连接了一个本地数据库
delphi连接了一个远程数据库
测试完毕,结果为VB效率比delphi高
其实挺喜欢你这样的人的,把delphi用成VB,然后去宣扬delphi的垃圾,coding之余,还有笑料看,生活真美好...
评论一个东西需要先了解它...不然...
楼上的实在,赞一个...Top
18 楼maozefa(阿发伯)回复于 2006-12-21 11:07:21 得分 1
其实,楼上各位,上面我已经说了,我们大可不必又作语言之争,喜欢什么,是自己的爱好,并不需要强加给别人。我反复说过,我说的只是自己的感受。Could(翻墙鹦鹉) 有一句说的不错,我不太喜欢STL,我认为它太复杂,太庞大,如果需要用也无非不可,但是投入很大精力去深究它,好像不值,至于把他神化,就更不必要了。我认为编程、驾驭语言本身就是艺术,简单就是艺术。
(再次声明,个人感受,不要扔臭鸡蛋)。Top
19 楼Could(翻墙鹦鹉)回复于 2006-12-21 11:14:46 得分 1
回复人:CDSoftwareWj(95927) ( 两星(中级)) 信誉:107 2006-12-21 10:46:11 得分:0
?
还有 Could(翻墙鹦鹉) 你说的这里
-------------
由于在设计的时候没有象java那样的接口,也没有多重继承,所以vcl库里面的很多东
西已是冗余之极,...
-------------
不对,其它的观点还在理,希望你再想想,
1.D没有java那样的接口么?
2.没有多重继承,不是错,反而是现在的潮流,Java和C#不也是单根继承的吗?
3.VCL是一个时代的高度,现在有好多东西可以挖,可以看看 李维的关于VCL的那本书
很好
======================================
我说的是Delphi在设计的时候没有象java那样的接口,或是多重继承。现在流行的面向对象的语言,凡是很成功的,要么有接口,比如说java,C#等,要么支持多重多重继承,比如说C++、python等,唯独Delphi既不支持接口,又不支持多重继承。接口或者多重继承有什么用呢?它们对面向对象为何那么重要呢?看看设计模式就会明白了。
回答你的问题:
1、Delphi中接口是后来才引进的,采用的是Windows的com接口,和java中的接口不能等同,关于这点,我曾经在borland的新闻组上问过,borland的工程师也给我了耐心的回答,并且告诉我,delphi的结口做不到java那样的效果。退一万步来说,即使Delphi后来成功地增加了java那样的接口,其原先的那些类已经写好了,如果重写那些东西,不断花费的代价大,Delphi的使用者来说也是一场灾难。——所以说最初设计没到位是很痛苦的事情。
2、接口和多重继承的目的是一样的,你没有体会我的意思,我是把接口和多重继承相提并论的。
3、我看过那本书,在做项目的时候我也经常跳到vcl的源码里面去看看,因为有时候
delphi的文档还不如源码那么一目了然。
一叶障目,不见泰山。
当初我只会Delphi,有空的时候看看vcl,看看indy的源码,还曾经修改过其中的某些细节来供自己使用,我觉得delphi就是No.1;
后来看java,然后再看看jdk的源码,跨平台却又是在运行时候动态画出来的swing构架真是独一无二,清晰完善的集合和流框架更是让人叹为观止,于是我看国人难得的大作《java与模式》,知道什么是设计模式,才知道前人的智慧,真是不可限量。
后来接触的是c++,以前学校学的是c,一直把c++当c用,后来看到stl,看stl源码剖析,亲自使用过stl中的算法,才知道什么是方便;看范型,才知道是什么东西可以将代码重用到极致,真是不用不知道,一用吓一跳。不过我的感觉远不止吓一跳那么简单,应该说是“惊呆了”。
Delphi是我大二的时候开始学习的,从我开始学习的那天开始,就马不停蹄没有松懈过,每天坚持至少写300行,节假日未中断,3年下来写过的Delphi超过20万行,就算每天都是做些拖拖拉拉的东西,我相信把1+1=2做一千遍也是有心得的。
有空的时候也用delphi来做些工具练习一下,比如说:
http://could.net.googlepages.com/emailspiler
http://could.net.googlepages.com/mp3monkey
最近正在找工作,如果有人能为我推荐,将不胜感激。
Top
20 楼zhmnsw(糖醋鼻子)回复于 2006-12-21 11:23:08 得分 1
to Could(翻墙鹦鹉)
我说的是Delphi在设计的时候没有象java那样的接口,或是多重继承。现在流行的面向对象的语言,凡是很成功的,要么有接口,比如说java,C#等,要么支持多重多重继承,比如说C++、python等,唯独Delphi既不支持接口,又不支持多重继承。接口或者多重继承有什么用呢?它们对面向对象为何那么重要呢?看看设计模式就会明白了。
----------------------------------------------------
再一次证明你根本就不了解delphi,别在这找抽了劝你...
你拿delphi1跟JAVA比,也不怕被人抽死...
我们没有怀疑你的水平
但我们严重怀疑你的delphi水平,非常严重...
楼下的,认为这场争论有意思吗?谢谢Top
21 楼zhmnsw(糖醋鼻子)回复于 2006-12-21 11:24:51 得分 0
另外仔细看看李维的那本书,VCL用了多少设计模式你数数,怕你内存溢出哦...Top
22 楼ls_d88(拖鞋)回复于 2006-12-21 11:25:45 得分 0
没有,一种语言的存在必然有她存在的理由和空间。Top
23 楼zhmnsw(糖醋鼻子)回复于 2006-12-21 11:28:44 得分 0
to Could(翻墙鹦鹉)
Delphi是我大二的时候开始学习的,从我开始学习的那天开始,就马不停蹄没有松懈过,每天坚持至少写300行,节假日未中断,3年下来写过的Delphi超过20万行,就算每天都是做些拖拖拉拉的东西,我相信把1+1=2做一千遍也是有心得的。
-------------------------------
我也是大二学的delphi,但到现在代码只写了2、3万行
为什么?足够了,20万行也只证明你是CPP的产物(注:CPP不是那个CPP,是COPY/PASTE/PRINT谢谢)到现在,我的代码越写越少,做的东西却越来越多,前几天做的管理系统,只用了2000多行就搞定了,基本没有冗余的注释,这在以前,需要上万行代码。
20万行代码你写了多少东西呢,可不可以让我们观摩一下捏?Top
24 楼zhmnsw(糖醋鼻子)回复于 2006-12-21 11:31:53 得分 0
Could(翻墙鹦鹉)让我想起了身边的JAVA程序员...难道是通病?
能用代码解决一个树型结构的移位,就感觉JAVA真是NB的要死!
唉...
你JAVA的很多东西都被别的语言搞颠了,只是他们不愿意这样说出来...真是...
Top
25 楼zhmnsw(糖醋鼻子)回复于 2006-12-21 11:34:01 得分 0
前两天我那学JAVA的同学还采着我的衣领狂摇我,边摇边嚷:JAVA能够实现把对象变成字符串,传出去,然后再变回对象,太神奇了!太疯狂了!JAVA简直是上帝!
脖子到现在还疼呢...Top
26 楼zswang(伴水清清)(专家门诊清洁工)回复于 2006-12-21 11:40:01 得分 0
想了很久所以接分没有赶上。Top
27 楼w95927w(D版第一铁公鸡^^)回复于 2006-12-21 12:11:57 得分 0
汗~~ 穿马甲路过...Top
28 楼cimil(竖然起劲)回复于 2006-12-21 12:12:36 得分 0
又是这种争论,一点新意也没有,烦不烦啊Top
29 楼GARNETT2183(KingWolves (http://kevin-lu.blogspot.com))回复于 2006-12-21 12:23:45 得分 0
闪人。。。。Top
30 楼Bearzmc()回复于 2006-12-21 12:27:05 得分 0
真正的程序员使用权C++,聪明的程序员使用delphi!!Top
31 楼dadi0189(冰雨)回复于 2006-12-21 12:30:58 得分 0
继续争吧,没事,Top
32 楼wudi_1982(向伴水学习|胃出血,住院中)回复于 2006-12-21 12:33:46 得分 0
无语Top
33 楼ilovechao1314(有点晕了)回复于 2006-12-21 12:50:55 得分 0
...................................................Top
34 楼greengrince(踏雪而行)回复于 2006-12-21 12:57:42 得分 0
要想厉害练九阴真经,c++,delphi,java算个乱Top
35 楼greengrince(踏雪而行)回复于 2006-12-21 13:00:38 得分 0
说什么什么不好不牛,你有本事把那个不牛的东西设计和开发出来 我就跪你面前拜Top
36 楼cime63(流浪的孩子)回复于 2006-12-21 13:12:45 得分 0
站点查询Top
37 楼fengfeiwuwq(寒烟翠)回复于 2006-12-21 13:33:55 得分 0
江湖上又掀起了一阵腥风血雨Top
38 楼zhu_wj(∽∽∽∽∽)回复于 2006-12-21 13:55:28 得分 0
感觉 Could(翻墙鹦鹉) 讲的比较客观,不错。Top
39 楼liuliuxd(我信赖)回复于 2006-12-21 13:57:11 得分 0
关注Top
40 楼yinxd6112(自由的飞)回复于 2006-12-21 14:37:30 得分 0
delphi是由开源的正则表达单元的,不知道的不要乱说,让大家以为delphi很菜Top
41 楼lxpws(你被耍了)回复于 2006-12-21 15:15:01 得分 0
10年以前还可以争一争Top
42 楼hanyufeng(寒雨丰)回复于 2006-12-21 15:43:40 得分 0
江湖上又掀起了一阵腥风血雨Top
43 楼xinai0521(爱之风)回复于 2006-12-21 15:55:13 得分 0
唉,又不是这样的话题,语言不是问题,关键是思维,解决问题的思路..
各位高人不要争论C++与Delphi在开发上面哪个好一些...不同的语言在开发不同东西上面是有差别的!..
说一句现实的话!!!!客户要求用平台和什么的开发语言去做.你不用吗?..出局!!!
(别向我丢东西)~_~
Top
44 楼ly_liuyang(Liu Yang LYSoft http://lysoft.7u7.net)回复于 2006-12-21 16:13:43 得分 0
原来这里有热闹看哦~
只说说俺自己的经验:
Delphi拥有大量的第三方控件,几乎设计方方面面,有免费的也有商业的
这是RAD的优势所在
至于接口,俺用得确实不多,也不怎么清楚~偶用Delphi做系统应用的居多,在相对底层的环境下,连OO都不需要多用
再底层的东西,俺只能用C写的
呵呵~我用得最多的是Win32 API~,做得最多的是Internet应用软件和桌面程序
偶连T-SQL语句都不熟练啊Top
45 楼w95927w(D版第一铁公鸡^^)回复于 2006-12-21 16:34:29 得分 0
LY 不用OO~~~ 就能写出好程序 哇哈哈哈Top
46 楼akirya(坏[其实偶不是什么所谓的坏人])回复于 2006-12-21 16:44:51 得分 0
stl这个东西也是为了复用才出现的,如果不会用,大可不用。Top
47 楼xyh2007()回复于 2006-12-21 17:01:40 得分 0
顶~~~~~~~Top
48 楼hai1039(天下)回复于 2006-12-21 17:12:52 得分 0
打20年前就不喜欢delphi(pascal), 因为begin end难看Top
49 楼ly_liuyang(Liu Yang LYSoft http://lysoft.7u7.net)回复于 2006-12-21 17:34:36 得分 0
老兄,不需要多用并不等于不用啊~
汗一下-_#!
偶喜欢pascal
所以也用Lazarus做一些小工具(ARM/Linux/PPC上面的)Top
50 楼warrior740(学习中进步)回复于 2006-12-21 17:50:57 得分 0
每种语言都有他的缺点和优点,如果要追求完美,那就别去弄,不去学
看个人兴趣,喜欢哪种语言就往哪个方向发展,喜欢是没理由的Top
51 楼Dickson(沧海冷心)回复于 2006-12-21 17:53:58 得分 0
楼主爱DELPHI,不断的努力让大家对DELPHI继续保持信心.我很佩服.和我一直深爱VB一样...虽然VB继续升级,但是VB.NET和VB6的区别还是很大....象自己的娃不光被人家把脸换了,还换了脑子..唉,谁让现在NET流行呢。.Top
52 楼zuoansuifeng(左岸)回复于 2006-12-22 08:43:04 得分 0
看了这么多言论 我只想说 不管DELPHI也好,C++也好 在你手里能用的翻手为云,覆手为雨 你就NB了Top
53 楼elite01(极度)回复于 2006-12-22 10:18:15 得分 0
我支持delphi,永远的delphiTop
54 楼fim(阿初)回复于 2006-12-22 10:19:56 得分 0
同意楼主部分观点,特别是讨厌的宏,C++把宏用得确实是过头了。但是底层开发,还应是c/c++比较爽,很多底层的头文件Delphi是没有的,看了msdn后,还要把上面的例子翻译一遍,才能用。
Could(翻墙鹦鹉)应该是个高手,不过是跨语言的,对Delphi的特性包括一些第三方控件明显不熟。Top
55 楼onemonth(CSDN真烦)回复于 2006-12-22 11:03:37 得分 0
C和C++还是很大区别的,个人觉得C还是不错的,C+ +就像现在的大牌明星,名气不小,可被人们炒坏了,特别是什么泛型、什么STL,被有些人吵得太热,好像你不懂STL,就是不懂C++,其实不就是个几个头文件代码吗,完全可以不用!我学C++时,根本就没这个东西,很多新手觉得C++难学,很大部分原因就是钻了这方面的牛角尖。
-------------------------------------------------------------------
不懂stl,还真不能算懂了c++。delphi只支持oo,但是如果你把GP当作了可用可不用的东西,那就表明了你现在还根本就不懂什么是设计,连oo的设计都没搞明白。如果你真的明白了oo,你就知道多么迫切的需要GP的概念了。Top
56 楼onemonth(CSDN真烦)回复于 2006-12-22 11:07:50 得分 0
楼主说的问题,要么是楼主不懂c++,要么还站在拖控件的角度看问题。Top
57 楼Could(翻墙鹦鹉)回复于 2006-12-22 16:03:55 得分 0
fim(阿初) ( 一星(中级)) 信誉:100 2006-12-22 10:19:56 得分:0
?
同意楼主部分观点,特别是讨厌的宏,C++把宏用得确实是过头了。但是底层开发,还应是c/c++比较爽,很多底层的头文件Delphi是没有的,看了msdn后,还要把上面的例子翻译一遍,才能用。
Could(翻墙鹦鹉)应该是个高手,不过是跨语言的,对Delphi的特性包括一些第三方控件明显不熟。
------------------------------------------------
我不是什么高手,
对Delphi的和某些第三方控件确实不是很熟,
但是请问你是从哪里看出来的呢?
从我前面的发言中可以看出我对delphi的哪些地方和哪些第三方控件不熟呢?
麻烦你帮我指出来,我回去好好学习一下。
Top
58 楼fim(阿初)回复于 2006-12-25 13:59:09 得分 0
但是做非界面的东西就吃力了,要哈希表没哈希表,要正则表达式没正则表达式,基本上就是要什么没什么。
-----------------------------------------------------------
哈希表你可以借鉴TIniFile的实现(或者到SF网找DCLX),正则的话找TRegExpr,基本上就是要什么有什么:)
所以vcl库里面的很多东西已是冗余之极,刚开没有深入的时候还无所谓,后来稍微熟悉了就感觉有点烦了,每次遍历个什么的时候都得for i:=0 to xxx.count-1 do这样来一遍,而c++可以针对集合写通用的算法。
-----------------------------------------------------------------------
先把集合算法实现一下,一次性写成一个类,然后公布一个回调函数即可,或者找第三方Container库。
Delphi中接口是后来才引进的,采用的是Windows的com接口,和java中的接口不能等同,关于这点,我曾经在borland的新闻组上问过,borland的工程师也给我了耐心的回答,并且告诉我,delphi的结口做不到java那样的效果。退一万步来说,即使Delphi后来成功地增加了java那样的接口,其原先的那些类已经写好了,如果重写那些东西,不断花费的代价大,Delphi的使用者来说也是一场灾难。——所以说最初设计没到位是很痛苦的事情。
-------------------------------------------------------------------------
一开始接口的出现是与COM联系在一起的,这取决于当时的环境,无可厚非,但是Delphi5之后已经成了Object Pascal的程序语言通用机制,并不只限于使用在COM之中。你可以举个例子来证明java的接口到底有多神奇,它是怎么让Delphi的接口对这样的实现无能为力的?
我从来不否认C++的强大,但也无须贬低Delphi来抬高C++。
Top
59 楼callzjy((草魚))回复于 2006-12-25 19:10:15 得分 0
我从来不否认C++的强大,但也无须贬低Delphi来抬高C++。Top
60 楼sltyj()回复于 2006-12-25 23:00:17 得分 0
爱用啥用啥,争毛。想说服自己还是别人?有意义吗?Top
61 楼yelovedong(a nice persion)回复于 2006-12-26 09:55:22 得分 0
好什么呢?没感觉到.Top
62 楼chijingde(AD)回复于 2006-12-26 10:06:36 得分 0
1、Delphi的源文件组织和工程组织方式要比C++好,而且方便。在作稍微大一点的项目的时候,源文件的管理要比c++的方便,C++的各种符号、名称的管理比较烦人。
.....这个从何说起......
2、Delphi如果在头文件齐全的时候,使用API会方便一些,不是函数本身,而是一些函数用到的结构声明,一些类型声明,Delphi的相对简洁,C++当中一个Handle就会有很多的不同的声明,其实都是一个32位的值。而且使用不同的库可能会有相同的东西不同的声明,会比较费解。
你自己都说了,要在头文件齐全的时候才更方便
要是头文件不齐全的时候呢?哪个方便?
3、Delphi中没有讨厌的宏展开。C++中的宏展开,除非你不求甚解,否则要看明白还真的很费事。特别是嵌套了好几层的。有些宏还非常容易弄错。
不求甚解,都能用,是不是侧面说明了什么?
4、C++中容易让人集中到语言细节上,容易把程序员的注意力引向语言细节,而不是考虑实际的项目需求。特别是做一些新的开发,往往碰到没有用到过的类,宏定义,模版,这时候对这些东西理解往往不是集中在对项目需求的关联上,而是集中在对这些东西实现和使用的语法细节上。
这个问题对于新手来说,用Delphi也会发生
5、在windows写Com写系统服务,不管是用ATL还是MFC都比Delphi的封装差远了。MFC庞大,ATL诡异而且费解。delphi实现一个com的代码规模和ATL实现相当,但是,逻辑上就直白的多了!
恩,谈到封装确实是这样
MFC不太喜欢
不过ATL的COM代码,比起delphi生成的,我觉得更有助于了解COM
Top
63 楼chijingde(AD)回复于 2006-12-26 10:15:19 得分 0
之前也很排斥
现在因为工作原因硬着头皮用了一阵子
发现其实也不错
各有各的优点
以后多了个选择,也挺不错Top
64 楼kerbcurb()回复于 2006-12-26 10:22:18 得分 0
Apple MAC OS是用Pascal写的,谁用过?请谈谈感受Top
65 楼lw549(那个孩子他爹)回复于 2006-12-26 11:11:27 得分 0
写COM都用Attribute了,very easyTop
66 楼halfdream(哈欠)回复于 2006-12-26 11:49:37 得分 0
你们争你们的...
我来是因为好奇为什么AD的专家分这么少,性欲值却有358?
Top
67 楼hongqi162(失踪的月亮)回复于 2006-12-26 11:57:27 得分 0
飘过~~~~Top
68 楼unsigned(僵哥(发站内消息,请附上链接或问题说明,否则不予回复))回复于 2006-12-26 13:19:49 得分 0
如果楼主真的好好了了解了C/C++,也许就不会再有这和翻说法了.Top
69 楼jjwwang((空园歌独酌,春日赋闲居))回复于 2006-12-26 13:50:14 得分 0
用c++的时候,感觉delphi不怎么样.
用delphi的时候,感觉c++很烦.Top
70 楼Could(翻墙鹦鹉)回复于 2006-12-26 16:33:44 得分 0
感谢 fim(阿初),
我来回答你的问题:
哈希表你可以借鉴TIniFile的实现(或者到SF网找DCLX),正则的话找TRegExpr,基本上就是要什么有什么:)
-------------------------------------------------
TIniFile只是针对ini文件之类的极少量数据来的,数据量稍微一大,其速度之慢可能会超出你的想象,不信你试试。当然我说这个话是我早就试过。
为什么不用TRegExpr?首先是其是个名不见经传的第三方库,而且其版本还不到1.0,况且其已经超过二年没有更新了,拿来玩玩还可以,用在项目之中的话,你以为你们的项目负责人会批准你把你们的项目当成试验品?
其次,TRegExpr在采用unicode方式进行处理的时候效率很低,这点在其文档的某处也有说明。中国人用正则表达式,很可能就要处理中文,所以就非得用unicode比较好。当初我对TRegExpr也进行过几天几夜不停地测试过,发现其效率确实低,——当然我是要处理中文的。
先把集合算法实现一下,一次性写成一个类,然后公布一个回调函数即可,或者找第三方Container库。
------------------------------------------------------
这个不好说了,确实有这样的第三方库,我没有怎么测试过,不过对于一些旁门左道的东西,使用之前还要先花时间了解,否则根本就不敢放心使用。既然Delphi本来是个rad,就是要让别人开发速度快,但是本身库不能满足的时候,要转向第三方,在选用和测试第三方库的时候,又要用多少时间呢?这个时间难道就不应该算到开发时间里面去?在这样的时候rad岂不就是名不副实了?
一开始接口的出现是与COM联系在一起的,这取决于当时的环境,无可厚非,但是Delphi5之后已经成了Object Pascal的程序语言通用机制,并不只限于使用在COM之中。你可以举个例子来证明java的接口到底有多神奇,它是怎么让Delphi的接口对这样的实现无能为力的?
-----------------------------------------------
你真要我举例来说明此接口非彼接口?我说java只不过是个例子,多重集成和接口的作用是一样的,只不过是比接口更强大。java、C#里面有接口,python、c++有多重继承,为什么要有接口或者多重继承?如果用过的话,你不会问我这个问题,如果没用过的话,我一句话也不能让你明白。如果你还要举反例想要直到什么事情是java之类的接口可以做而delphi的接口做不到的,你可以去borland的新闻组上面问,相信有人会给你例子的。
你的最后一句:
我从来不否认C++的强大,但也无须贬低Delphi来抬高C++。
------------------
我何时贬低Delphi了?我说Delphi擅长快速开发用户界面,这个难道不是它的长处吗?
我也无需要“抬高”C++,因为我都用,在某个时候我选择我认为适当的工具。
贬低Delphi也好,抬高C++也好,都不是一个无名小卒可以做到的,我深知这点,所以我不会干那些没用的事情。如果有人认为我怀有那样的目的,那是这些人自己的心理在作祟,我无需理会。
平时一般不想来参与这些讨论,只是那天刚好有时间,看到此文,看到lz说他“想了很长时间”,所以才跑来凑个热闹。
Top
71 楼fim(阿初)回复于 2006-12-27 21:52:51 得分 0
to Could(翻墙鹦鹉)
看了你上面的观点,你似乎很反对在Delphi中使用第三方控件,可是,我查了你在C++版的提问,你却在使用C++的时候比较执着地寻找第三方控件, 并且我也发现你也会在使用这些类的过程中遇到难点而卡住,难道这些就不需要算在开发时间里?你不觉得是在用双重标准的眼光来看问题吗?
我们在做项目的时候,在许多情况下,都是在做权衡,尽量用简单方式去解决问题,有的时候为了开发进度必然要牺牲一些东西,比如性能,只要这是在一个可接受范围之内。
在尝试将一个第三方控件应用于项目中前,对其做些测试,是一件再正常不过的事,如果控件符合要求,那么这样的前期工作就会像砍柴前的磨刀那样有意义。
对于你说的接口,按你的意思来说,如果用过接口的话,我就应该赞同你的观点,要不然就是我不懂接口。你举不出例子,反而让我去问,我根本就不知道java的接口如何神奇,怎么知道如何发问呢?请贴出java代码,好让我与你分享java接口的强大,当然,我也想试着用Delphi实现它。
在我们看来Delphi优雅之极,你说VCL冗余之极,这不算贬低吗?我也在初学MFC,在我分析MFC源码的时候,我感到它封装的很简洁,一目了然,如果我偏激地说MFC封闭SDK粗糙之极,如何?呵呵:)
最后声明下,这个贴子我不回了,我也无意于这样的讨论。再说了,在网上试图说服一个人是一件很愚蠢的事:)
如果贴出java代码,我可以开贴到技术区继续讨论。Top
72 楼zwjchina(蒲石)回复于 2006-12-27 22:34:30 得分 0
语言之争其实还是有点意思的!
不然怎么这么多人参与呢。
强烈BS zswang(伴水清清)(专家门诊清洁工)
来了也不发表高论。要么干脆不来嘛。。。
那些飘过的,我也一并鄙视下。语言总有不同,总有特点。谈谈它们的不同,谈谈它们的优势、劣势,谈谈它们存在的原因又有何不可呢。
坦白的说,我现在用C++,就效率方面来讲,C++的确比Object Pascal更注重效率
比如:
struct和class基本是一致的,内存上没什么差别
但是一个TObject显然跟一个record差很多。
但是 宏是我最讨厌的C++特性,然而好多C++程序员缺热衷于用宏来表现自己的创造力。
我对C++语言纵容程序员这么做表示不满。
另外就是STL,怎么看都是加强了的宏。Top
73 楼shadowstar(CodeFast for Delphi & C++Builder)回复于 2006-12-27 23:14:08 得分 0
宏应该是属于C的东西,C++大多数情况下可以用模板,宏只是在某些特殊情况下有点用。
STL是由模板实现的,功能非常强大,用好了真是事半功倍,当然你可以不用。如果不用STL的话,C++的优势还真就少了很多。
其实我现在用Delphi,很遗憾Delphi缺少对模板的支持。
你知道 TObject 的实现吗?你知道 C++ class 的内部结构吗?
其实 TObject 和一个带有虚函数的 C++ class 所占用的内存是一样的。Top
74 楼Could(翻墙鹦鹉)回复于 2006-12-28 00:24:57 得分 0
to Could(翻墙鹦鹉)
看了你上面的观点,你似乎很反对在Delphi中使用第三方控件,可是,我查了你在C++版的提问,你却在使用C++的时候比较执着地寻找第三方控件,并且我也发现你也会在使用这些类的过程中遇到难点而卡住,难道这些就不需要算在开发时间里?你不觉得是在用双重标准的眼光来看问题吗?
我们在做项目的时候,在许多情况下,都是在做权衡,尽量用简单方式去解决问题,有的时候为了开发进度必然要牺牲一些东西,比如性能,只要这是在一个可接受范围之内。
在尝试将一个第三方控件应用于项目中前,对其做些测试,是一件再正常不过的事,如果控件符合要求,那么这样的前期工作就会像砍柴前的磨刀那样有意义。
=============================
我没说我反对用第三方,Delphi的第三方用户界面库很多,而且也很强大,比如说devexpress之类的。但是非界面的东西就少了,要找精品更是难于上青天。
我在c++里面问什么问题我自己都忘了,但是我平时的习惯就是在闲暇的时候多接触点东西,一来是打发时间,二来也开阔一下眼界。没事情的时候,我还专门去找这些东西,如果我发现稍微有点用,我就会对其作大量的测试,说不定以后可以用。当然写测试程序也是一件有趣的事情,有时候为了测试一个东西的性能,可以让它跑个几天,那就是为什么你一说TIniFile、TRegexpr我就可以告诉你它们有什么利弊。
最近常用c++,对C++的东西当然也要做些测试。不过c++有个好处是用c++的第三方库的时候不必冒太大的风险,因为早就有好多人测试过了。boost、loki、ace这些东西在其它的语言还不能忘其项背吧。
别人用Delphi都是为了提高开发进度的,快速开发嘛,如果找那些东西花费的太长,那用Delphi开发还比不上其它的工具吧?Delphi只是做界面快点而已。如果处理的逻辑太多,就会陷入一种“找不到合适的库”的困境。
对于你说的接口,按你的意思来说,如果用过接口的话,我就应该赞同你的观点,要不然就是我不懂接口。你举不出例子,反而让我去问,我根本就不知道java的接口如何神奇,怎么知道如何发问呢?请贴出java代码,好让我与你分享java接口的强大,当然,我也想试着用Delphi实现它。
===========================
如果用过接口(或者多重继承)的话,未必知道它们的作用。但是对于一个曾经用过Delphi的人,再接触到接口/多重继承的东西,只要和Delphi的单一继承以对比,就会明白它的意义。与其问别人要代码来用Delphi模拟,还不如自己去看看JDK的源码,只要看关于“集合”的部分就行了。因为在项目中建立模型的时候,类与类之间的关系经常就是“一对多”、“多对多”,这样的时候就需要使用集合类,我对此深有体会。Delphi中也有TList、TQueue、TStack之类的容器,但是这些容器有很多毛病:
1、效率低。这个是Borland的问题,这里不讨论这个。
2、规模小。就是类型不完整,堆、哈希表之类的就没有就没有。
3、没有统一的接口,每个类自己处理自己的。这就是我要告诉你的“冗余之极”的地方。你要例子,我就举个例子给你吧,你去试着把这个用Delphi实现一下,看你怎么实现。我只要一个最简单的操作find_max_of,就是从一个集合中找出某种类型(TYourOjbect)的对象的最大值。对象的大小是对象对应的类自己定义的(TYourObject有一个方法Compare,)。
现在假设Delphi里面有n种集合(TList、TStack、TQueue等等,共有n种),为了这样一个方法,你得写n个find_max_of方法出来,你明白了么?
如果以后你自己写了新的集合类,也要为你的新的集合类分别写一个find_max_of方法出来。
现在只是一个find_max_of而已,如果我用m个方法需要写呢?那你岂不是要把这些事情做n*m遍?而且做的是吃力不讨好的事情,因为没有丝毫扩展性。
对于这种find_max_of来说,纯粹的体力活,没有什么难度,但是有些东西不是所有人都可以写出来的,比如说stl里面的nthelement,在线性时间内找到第n小的元素。当然你可以说这个本来也不需要所有的人都会写,既然如此,这些应该是一种方便语言提供的强大类库应该提供的吧,否则那还叫什么Rad?还不如改名叫UI-RAD。
Delphi和Java都是95左右的产品吧,为什么java里面可以想到的,Delphi的那帮人就想不到?明显不是,因为Delphi只想做VB killer,而java却是要做easier c++,来吸引c++用户。可以看出,只有目光长远,才会成功。java不仅吸引了大批c++用户,还吸引了众多其它语言的用户和新用户,而vb killer呢?连vb都没有kill掉吧。
还有一个地方,我说要把对象放在集合里面,找出最大的。这个“最大”如何定义的呢?既然要写算法,肯定就是让任何对象都可以放进去。但是不是每个对象都有个可以比较的方法的啊,于是你要定义一个类,TComparable,它有一个虚函数compare,所有的需要放进容器进行比较的时候都要从这个类进行继承,这个问题就解决了。所以问题就来了,因为对于你自己的新类,你可以从这个类继承,但是别人写好的类呢?你怎么放?你不可能去把别人的父类改成你的TComparable吧?这个时候接口/多重继承就有用武之地了,明白么?
在我们看来Delphi优雅之极,你说VCL冗余之极,这不算贬低吗?我也在初学MFC,在我分析MFC源码的时候,我感到它封装的很简洁,一目了然,如果我偏激地说MFC封闭SDK粗糙之极,如何?呵呵:)
-------------------
vcl冗余不是我说的,是我相比之下认识到的。如果vcl那么优雅,为什么没几个“软件”采用vcl? Office就不用说了,为什么autocad、photoshop这些软件都要选用“粗糙”的mfc,而不是优雅的vcl?这些顶级软件的开发人员和领导者可不是那些只在论坛上争论的人了,为什么它们不选vcl呢?你能给你自己一个满意的答复么?
最后声明下,这个贴子我不回了,我也无意于这样的讨论。再说了,在网上试图说服一个人是一件很愚蠢的事:)
如果贴出java代码,我可以开贴到技术区继续讨论。Top
75 楼w95927w(D版第一铁公鸡^^)回复于 2006-12-28 09:10:54 得分 0
Delphi不是95年的产品 -_-|| 要更早, 之前还有Object Pascal,更早了!Top
76 楼julong88((无锋之刃))回复于 2006-12-28 09:16:59 得分 0
又开始论战了...
不过楼上诸位中偶个人认为的两个高手却都没有发表观点
都是说句废话或者不相干的话便闪。。。
奇怪Top
77 楼Could(翻墙鹦鹉)回复于 2006-12-28 09:21:50 得分 0
To fim(阿初):
你要我给你举例子,其实这样的例子很多,很多优秀的库里面都有大量的应用,但是要随手举一个简单的例子却不那么容易,因为肯定都要牵涉到好几个类。我刚才用google找到了两年前我在borland的新闻组上问的关于Delphi接口的问题,你可以看看:
http://groups.google.com/group/borland.public.delphi.language.delphi.general/browse_thread/thread/d55d7443038ca982/97cce58a53940240?lnk=st&q=ildg&rnum=37#97cce58a53940240Top
78 楼lxtnt()回复于 2006-12-28 09:25:42 得分 0
只感觉项目越大时,DELPHI的维护比C++要好的多。。。。Top
79 楼unsigned(僵哥(发站内消息,请附上链接或问题说明,否则不予回复))回复于 2006-12-28 10:11:09 得分 0
一个人不要什么都求越强,凡事都要有所偏向,一来给自己一点余地,二来给他人点空间.否则物竞择优,你可以淘汰别人,同时也就加速了自己的败亡.这是所谓对立事物的生存准则.
所以外界不可以仅凭着自己的认知度去衡量某一或多事物的优劣.人各有所忠,遇事择优而行,无优则择上,无上便择中.而此时的优劣,仅凭行事人的认知度,更确切地说是熟知度而评价.成与败不仅只是一种手段的竞争,更多的还是机遇与时间的竞争.人的时间很有限,而在这个有限的时间里可以使用的手段却是无限的.所以社会才会有虽质劣但以其速自为强的存在.就好比在楼上争论的各位,应该没有太多的人会认识在这众IDE当中VB是个强者吧?甚至可能有大部分早已经把它给忽略掉了,但是它还是有着众多的社会份额.也许是隐性的.洋房洋楼很好住,但是茅草棚照旧有人视为宜居.
大家可以各列其长,但是不必败他人之短.从而给后人以参考.这才是论坛所应当做的.竞争品和对立面是两个不同的概念,而这里讨论的只是一个有相当交叉的竞争品,各位都不是最终竞争的利益主人,万不必为其争长短而浪费口舌.Top
80 楼casual1001()回复于 2006-12-28 13:52:50 得分 0
工具而已嘛. 没有不好的工具,只有用不好工具的人. 有本事用VC/BC写个DEPHI,或用DEPHI写个VC/BC,也不用争了.Top
81 楼w95927w(D版第一铁公鸡^^)回复于 2006-12-28 16:33:42 得分 0
摆脱大家不要盲淫摸象了好不好,不要用自己看到的那一点来说别淫了OK?!
摆脱大家不要盲淫摸象了好不好,不要用自己看到的那一点来说别淫了OK?!
摆脱大家不要盲淫摸象了好不好,不要用自己看到的那一点来说别淫了OK?!
摆脱大家不要盲淫摸象了好不好,不要用自己看到的那一点来说别淫了OK?!
摆脱大家不要盲淫摸象了好不好,不要用自己看到的那一点来说别淫了OK?!
摆脱大家不要盲淫摸象了好不好,不要用自己看到的那一点来说别淫了OK?!
摆脱大家不要盲淫摸象了好不好,不要用自己看到的那一点来说别淫了OK?!
摆脱大家不要盲淫摸象了好不好,不要用自己看到的那一点来说别淫了OK?!
摆脱大家不要盲淫摸象了好不好,不要用自己看到的那一点来说别淫了OK?!
摆脱大家不要盲淫摸象了好不好,不要用自己看到的那一点来说别淫了OK?!
摆脱大家不要盲淫摸象了好不好,不要用自己看到的那一点来说别淫了OK?!
摆脱大家不要盲淫摸象了好不好,不要用自己看到的那一点来说别淫了OK?!
摆脱大家不要盲淫摸象了好不好,不要用自己看到的那一点来说别淫了OK?!
摆脱大家不要盲淫摸象了好不好,不要用自己看到的那一点来说别淫了OK?!Top
82 楼YouTuBe(天不言自高,地不言自厚,人不言自无能,水不言自下流)回复于 2006-12-28 16:57:01 得分 0
Delphi年代久远了
Java是站在巨人的肩上的
不是一个时代的产物Top
83 楼YouTuBe(天不言自高,地不言自厚,人不言自无能,水不言自下流)回复于 2006-12-28 17:02:47 得分 0
Delphi是改造了Pascal语言
不能象新生的java那样来要求Top
84 楼zhmnsw(糖醋鼻子)回复于 2006-12-28 18:08:02 得分 0
但是非界面的东西就少了,要找精品更是难于上青天。
--------------------------------------
仅凭这句话就可以证明说话的人在臆断。只是delphi的界面控件太多了,比较看非界面的东西太少了,而C/C++的界面控件实现比较困难,根本不具可比性
看来当年那个softman11又要出现了,大家小心Top




