delphi与vc比较

   2023-03-15 16:52:11 网络270
核心提示:哈哈哈,借花献佛了~v~"Visual C++与Delphi之比较"最近在CSDN的论坛上的讨论非常火热,本文将以一个程序员的角度,从技术水平、功能、性能、易用性、稳定性、发展历程和前景等方面,以Visual C++6和Delphi5为代表

delphi与vc比较

哈哈哈,借花献佛了

~v~

"Visual C++与Delphi之比较"最近在CSDN的论坛上的讨论非常火热,本文将以一个程序员的角度,从技术水平、功能、性能、易用性、稳定性、发展历程和前景等方面,以Visual C++6和Delphi5为代表,尽可能客观地比较介绍Visual C++和Delphi这两大主流开发工具的优缺点,其中将涉及到语言、应用框架、控件、编译和连接、集成界面、调试、COM、数据库开发等。本文还将对如何选择使用这两个开发工具提出一些建议。

值得一提的是,由于C++Builder与Delphi同为Inprise公司产品,它们除了使用的语言不同,其余特性几乎都相同。因此本文对C++Builder程序员和学习者也有参考价值。

语言:存在即是合理

首先声明常被混淆的一点:VC和Delphi本身不是语言,而是开发平台。它们所用的语言分别是略作扩展的C/C++和Object Pascal。我在网上常看到有人问应该学C/C++还是VC,这个问题很好回答:如果你学VC你就必须得学C/C++,或者说你学会了VC也就学会了C/C++了。

言归正传,我们来比较一下C++和Object Pascal的优缺点。有人认为Object Pascal是"玩具语言",C++才是"专业语言",这是不对的。单从语言本身看,Object Pascal与C++属同一重量级。它们都是完全支持面向对象的语言,都扎根于"历史悠久"的面向过程的语言。C++是由C发展而来的,Object Pascal由Pascal进化而来。它们都有很强的灵活性,都有自己的特长和不足。比如说,Object Pascal不支持多重继承、模板、操作符重载、内联函数定义、预处理、宏、全局静态类变量、嵌套类定义,等等,而这些都是C++支持的。但同样地C++也不支持Object Pascal的虚构造函数、过程嵌套、内置集合类型、内置字符串类型、"finally"构造等等,在RTTI方面Object Pascal也比C++做得好。但这些并不重要,因为可以通过其它方式达到同样的目的,比如C++可以通过类扩展支持集合、字符串,Object Pascal可以通过"inte***ce"多重继承,等等。关键是二者都可以很好地完成你手头的任务,这就够了。

但是,仅仅比较语言本身是不够的,还得看它们的被接受和流行程度,学习曲线,发展前途,可移植性等,以及,很重要但常常被忽略的一点:与开发环境(指VC与Delphi)及其应用框架的"磨合"程度。

VC和Delphi作为开发平台,很重要的一点就是提供了一个"无所不包"的应用框架:VC的MFC和Delphi的VCL。MFC是用C++写的,VCL是用Object Pascal写的。当然,我们都知道,C++的使用范围比Object Pascal广得多,移植性也好得多。这本来是优点,但很有意思的是,正因为如此,微软写MFC时必须考虑最大限度减少对语言本身的改动,而把功夫下在源代码级,以便能尽可能支持ANSI等标准,结果导致MFC的封装复杂而不直观。(尤其是它对消息的封装,下文还会提到)。太多的宏定义和含义模糊且自动生成、不得改动的注释使MFC乃至VC让很多新手望而生畏,不敢"下水"深入学习。而Object Pascal几乎是Inprise"专用"的,不必考虑"标准"问题,因此Inprise写VCL时就把全部精力放在了结构与性能上,结果语言与框架的磨合程度非常好。VCL框架的结构清晰,VCL代码的可读性非常好。许多人说Delphi比较容易上手,也是这个缘故。天下没有白吃的午餐。你要工业标准吗?你要可移植性吗(关于可移植性和兼容性,下文会详细比较)?那么请面对MFC的"天书"级代码吧。

编译和连接:The Need For Speed

不同的语言带来的另一个不同是,编译和连接的速度的不同,以及执行速度的不同。Delphi的编译和连接速度,毫不夸张地说,比VC快几十倍。即使把VC的Incremental link选项打开,Delphi的编译和连接速度仍比VC快好几倍。并不是说微软的编译器不行,这是由C++的复杂性决定的。模板的处理、预处理和宏的展开都是很费时的。前文不是提到Object Pascal没有模板、预处理和宏吗?这本来是缺点,但带来的一个好处就是编译速度极快。至于编译完的二进制代码,在打开相同的优化选项的情况下,Delphi和VC执行速度并没有太大的差别。

为了克服编译的速度问题,C++编译器一般需要增强的连接器和预处理机制。但是预处理机制仍然存在若干问题:1)程序调试的断点行可能和代码行不同;2)没有将最新的代码信息综合进去;3)容易产生错误的逻辑;4)因为读错文件头而很容易产生类似"Unexpected End of File"的错误。

两个编译器有个共同点是都能识别无用的"死"代码,比如一个没有用的函数等等。编译后的程序将不包含这些多余的信息。Delphi在这方面作得更加出色。它可以让你在编辑器中可视化地提示出那行代码是"活"的、那行代码是"死"的。这样你就能整理出最精简的代码。Delphi在编译后将在左边显示一个小蓝点表示这行代码是"活"的。Visual C++做不到这点。

Delphi编译后可执行文件至少有200K(如果不使用VCL,仅仅使用WinAPI,文件的大小将大大缩小)但是Visual C++编程使用MFC编译后的可执行文件通常只有几十K,主要是因为微软已经将系统运行库包含在Windows系统了(Borland公司曾经和微软协商这个接口,但是微软利用操作系统的优势不愿意公开)。同样道理,使用BDE开发的的数据库程序必须附带3-5M的额外系统文件,也是非常不协调的。

非常有趣的是,Delphi能够使用由C++ Builder创建的的OBJ文件,但是使用上受很大的局限性。

最后,Visual C++的编译和连接时的错误信息比Delphi要详细和具体的多。特别是使用ATL开发更加如此。

应用框架:MFC?有KFC流行吗?

应用程序框架(Application frame),有时也称为对象框架。Visual C++采用的框架是MFC。MFC不仅仅是人们通常理解的一个类库(同样,Delphi的VCL也不仅仅是一个控件库,尽管它的名字叫"可视控件库")。你如果选择了MFC,也就选择了一种程序结构,一种编程风格。MFC早在Windows 3.x的时代就出现了,那时的Visual C++还是16位的。经过这些年的不断补充和完善,MFC已经十分成熟。但由于原型出现得比较早,MFC相比于VCL落后了一个时代。尽管微软对MFC的更新没有停止,我也经常读到"只要Windows不过时,MFC就不会过时"之类观点的文章,但就象Inprise(原Borland)的OWL框架的淡出一样,MFC的淡出也是早晚的事。其实MFC是和OWL同一个时代的产物。OWL已经不在了,MFC怎能不"居安思危"呢?如果MFC青春永驻,微软的开发人员也不会"私自"开发出基于ATL的WTL呀。当然,WTL的地位不能和MFC比,它并不是微软官方支持的框架,封装的功能也相当有限。但至少也反衬出了MFC存在的不足。

我们以为,最能体现一个应用程序框架的先进性的是它的委托模型,即对Windows消息的封装机制。对Windows API的封装就不用说了吧。大同小异,也没什么技术含量。如果高兴,你也可以自己写一个类库来封装。但对Windows消息驱动机制的封装就不是那么容易的了。最自然的封装方式是采用虚成员函数。如果要响应某个消息就重载相应的虚函数。但出乎我的意料,MFC采用的是"古老"的宏定义方法。用宏定义方法的好处是省去了虚函数VTable的系统开销(由于Windows的消息种类很多,开销不算太小)。不过带来的缺点就是映射不太直观。对于MFC,则是"太不直观"了。它的消息映射代码虽然是可见的,但"劝君莫碰"。好在VC的ClassWizard可以自动生成消息映射代码,使用起来还算方便。但和VCL的委托模型相比,MFC的映射方法就显得太落后了。而Delphi的Object Pascal因为没有"标准负担",语言引入了组件、事件处理、属性等新特性。由于功夫做在编译器级,生成的源代码就显得十分简洁。似乎VC是"让框架迁就语言",而Delphi是"让语言迁就框架"。

我想举一个对字符串操作的封装的例子来说明MFC和VCL的优缺点。在MFC中,CStringList类有加入、获取、删除等功能,但VCL的TStringList类除了上述功能还有排序、从逗号分隔的字串读入、流输入输出等功能。但同样的字符串替换功能,VCL的StringReplace要比MFC的CString::Replace慢2-3倍。总的来说,VCL的封装比MFC更为高层,更为抽象,但不可避免地带来的问题是某些部分执行效率比MFC略低。这就象低级语言(如汇编)的执行效率比高级语言(如Basic)高,但编程效率较低。鱼和熊掌不可兼得嘛。

VCL比之MFC的另一优点是对异常处理的支持,而一大缺点是对多线程支持差。VCL的大部分都不是针对多线程优化的。虽说VCL提供了简化多线程操作的类,但只是工作者线程(worker threads)使用起来比较简单。如果线程要和界面打交道的话事情就变得麻烦了,因为除了应用程序的主线程,任何线程不能访问任何可视的VCL部件。你不得不使用Synchronize方法等待主线程处理它的消息,然后在主线程中访问VCL部件。而MFC就没有这样的限制。

稳定性与完善程度:VC是老大哥

VC要比Delphi稳定和完善。VC的发展历史比Delphi长,微软的总体实力比Inprise强。VC的框架MFC经历了那么多年的发展和完善,功能非常全面,而且十分稳定,bug很少。其中你可能遇到的bug也更少。而且有第三方的专门工具帮助你避开这些bug。如此规模的一个类库,能做到这一点不容易。不要小看了这一点,很多专业程序员就是为这个选择VC的。因为尽管VCL比MFC的抽象程度高,封装较为高层,但由此带来的开发效率的提高对高手来说毕竟是有限的。而如果你遇到一个怪问题,调试了半天,发现不是你的代码有错,而是VCL的bug,你作何感想?虽说遇到这类问题的可能性很小,但对VCL的形象的影响可不小。Delphi的IDE太占资源,启动速度太慢,和某些显卡驱动程序冲突,VCL中有bug,调试器不够健壮,对不稳定的第三方控件没有防护措施 …… 问题多多,在这方面Delphi不如VC。希望Inprise能更上一层楼。顺便说一下,我们在网上看到有些人极言Delphi的不稳定,说几分钟出现20多次非法操作。Delphi的确不如Visual C++稳定,但也不至于如此呀。我估计是那位朋友的Delphi装了某些有问题的第三方控件,导致了Delphi的频频出错。不妨卸下那些控件试试?

可移植性:立足现实,放眼未来

Inprise正在开发Delphi的Linux版本,代号为Kylix。也许通过Kylix,用VCL构架编写的Windows程序向Linux移植成为可能。但这只是可能。因为在目前Inprise的兼容性工作做得并不好。低版本的Delphi不能使用高版本的VCL组件,而高版本的Delphi竟然不能使用低版本的VCL组件。真是岂有此理,我们很少看见软件有不向下二进制兼容的。如果Windows 98不能运行95的程序,Windows 95不能运行3.x的程序,Win 3.x不能运行DOS程序,你还会用Windows吗?如果Windows 95的程序必须经过重新编译才能在98下运行,98会卖得那么好吗?"同门兄弟"C++Builder和Delphi也不能互相使用对方的组件,甚至同一套VCL库的文件名也不一样。所以一个组件有for D1/D2/D3/D4/D5/C1/C3/C4/C5这些不同版本是常有的事,而且随着Delphi和C++Builder版本的升级可能还会增加。希望Inprise能先解决同门兄弟的兼容性问题。而微软的VC就没有这类问题。MFC1.0的程序也可以毫无障碍地在VC6.0下编译通过。

集成界面:宏观与微观

就大处说,VC的集成界面是不如Delphi的。Delphi仅仅一个Object Inspector就可以将VC的一堆Wizards比下去,何况它还有Code Explorer、ToDo List等。但从小处,又可以看出Delphi的不成熟。比如"自动完成"功能的智能化程度和提示详细程度不如VC,响应速度也没有VC快。

Visual C++所带的MSDN是一部"开发者的百科全书",信息庞大,查询方便,这方面比Delphi更专业。很多帮助项都有源程序示范。

Delphi的OpenTools是完全面向第三方的开放系统,开发者可以修改很多Borland公司自身的功能,从IDE的可扩充性上说Delphi更好。

调试:细微之处见真功

Visual C++和Delphi的调试功能都非常强大,同时都具有单步可视化调试、断点跟踪、运行时改变变量、鼠标指向可以得到变量值等等功能。对DLL的输入输出也能方便的管理,能够进行源码级别的调试。

相对而言,Visual C++能够更加方便地看到变量的变化情况,这包括对结构可以展开成数据树,从而了解每一个变量的值,每一步调试,变化了的变量会加红,从而使调试更加方便。另外,Visual C++的块内存察看比Delphi也要方便。

当然,Delphi也有很多体贴的细微之处,比如在线程调试的时候,Delphi能够很方便地察看线程的变化,Visual C++却必须要弹出一个模式对话框。

数据库开发:Delphi一枝独秀

数据库支持是Delphi的强项。这主要体现在Delphi与BDE的无缝集成,以及Delphi提供的那一大堆现成的数据库操作控件。这是VC望尘莫及的。目前Delphi支持BDE、ADO、Interbase三种数据库访问方式。所有的方式都能拖拉到应用程序中实现可视化操作。正是因为Delphi对数据库类的包装,使得用户操作数据库不像在Visual C++中必须从开始到最后都要干预。明显地提高了开发速度。

Delphi中使用WebBroker控件还能很方便地构造出基于数据库的Web页面,通过HTML管理Web数据库。 Visual C++访问数据主要通过ADO和OLEDB,很多ActiveX控件也能添加数据库功能。但是没有像Paradox这样的桌面数据库,Access相对功能太弱了。也许SQL Server是不错的选择。

COM:新技术的力量

COM是组件对象模型的缩写。它是OLE和ActiveX技术的基础,COM定义了一组API和一个二进制标准,让不同的编程语言、不同平台的彼此独立的对象相互进行通讯。

COM是Microsoft制订的行业标准。但Delphi也为COM提供了强大的语言支持。支持接口、variant、宽字符串功能。这些对COM的封装确实比C++更方便。比如在C++(没有类框架)进行COM编程时,变体定义为oaidl.h文件中的VARIANT结构。要处理变体,必须手工调整oleaut32.dll中VariantXXXX() API函数对其进行初始化和管理,如VariantInit()、VariantCopy()、VariantClear()等等。

Visual C++实现COM编程有一种特殊的方法就是使用ATL。ATL使用Visual C++特有的多重继承来实现COM接口。虽然不见得实现COM服务和控制更容易,但是ATL和最新COM技术的接口,基于模板的构造都比Delphi强。ATL更有利于建立小巧、快捷的COM组件程序。

按目前通用的观点,Visual C++应用到COM服务程序更有优势,Delphi应用到COM组件程序更合适。

昨天,今天,明天

技术的进步在很多时候是此消彼长的。当初Borland的Turbo C和Borland C++几乎是C/C++程序员唯一的选择。微软的Quick C(现在还有人知道这个产品吗?)和Microsoft C/C++从来也没有成为过主流。但Borland C++又流行了多少年呢?不久就被新崛起的Microsoft Visual C/C++压下去了。于是Inprise(原Borland)拣起了当年Turbo Pascal和Borland Pascal的辉煌(事实上Borland的成名作就是第一个Pascal编译器),全力推出了Delphi。Delphi当初推出时被称为VB杀手,但VB现在仍然活得挺好。毕竟微软是靠Basic起家的嘛,VB不是那么容易被打败的。Inprise想了想不和VB争了,使用Delphi的IDE和VCL配上C++语言,推出了C++Builder,又向Visual C++的市场发起了夹攻。C++Builder似乎是个不错的折衷选择了?再仔细想想!C++Builder的优点Delphi都有,但Delphi的优点C++Builder未必有。比如C++Builder的编译速度比VC还慢,哪能和Delphi比?而且因为VCL是Object Pascal写的,C++语言和VCL磨合得并不好。C++Builder的bug比Delphi还多,甚至Sample代码中还有错。VCL的部分功能不能使用,要靠嵌入pascal代码访问。C++Builder可用的第三方控件远没有Delphi多。

唉,真是金无足赤。Microsoft和Inprise,谁会笑在最后呢?

鱼和熊掌:艰难的选择

选择一个开发工具依赖于很多不同的因素,每个人都能因为某种语言的某个缺陷而放弃学习或使用这种语言。任何程序员都希望自己喜欢的工具能达到理想的境界,通过上面不完善的比较,我想大家都有自己的看法。我们认为影响大家选择开发语言的因素主要包括:

1) 哪门语言更容易入门?

学习一种语言需要投入大量的时间和精力。开发程序的开发成本是值得考虑的现实。一个熟练的Delphi程序员和一个熟练的VC程序员工作效率是一样的。但是,成为熟练的程序员必须很快掌握一门语言的技巧。不幸的是,目前熟练的Visual C++程序员是十里挑一。相对而言,Delphi更适合初学者。

2) 哪门语言有更多可继承的代码?

语言代码的可重用性是加快开发效率明显方面,从早期的过程、函数到现在的组件技术都是朝这个目标在奋斗。这两种语言对代码重用的理解是不一样的,Delphi主要通过VCL控件来实现代码重用,Visual C++实现起来就比较复杂。

3) 语言自身的本性。

就技术(主要指应用框架)来说,Delphi目前领先于Visual C++。但稳定性和健壮性的不足又让我对Inprise"想说爱你不容易"。而VC尽管发展到今日已十分完善,但MFC框架已是明日黄花了。如果不使用MFC,目前又没有合适的替代品。根据你的需要和实际情况做选择吧。实际上Visual C++和Delphi也不是简单竞争关系。它们在许多领域并不重叠,甚至是互补的。到底怎样取舍,要根据你的项目特性决定。如果你开发系统底层的东西,需要极好的兼容性和稳定性,选Visual C++吧。你可以只调用Windows的各种API,不用MFC。如果你写传统的Windows桌面应用程序,Visual C++的MFC框架是"正统"的选择;如果界面部分占这个应用程序代码比例较大的话,或者Delphi中有相关功能的控件的话,Delphi是事半功倍的选择。如果你为企业开发数据库、信息管理系统等高层应用("高层"是相对于"低层/底层"而言的,不是说技术高级或低级),而且有比较紧的期限限制,选Delphi比较好。如果你熟悉的语言是Object Pascal,又不打算学复杂的C++,那么Delphi几乎是唯一的选择。传统的观点是:Delphi适合编写Internet/Intranet、表格制图、数据库操作、高级用户界面等等。Visual C++适合编写设备驱动、COM服务程序、科学计算、控制台(console)程序、WinCE的应用和一些小的工具等等。应用范围的不同要求好的程序员同时精通这两门语言。

4) 语言的前景和可扩充性。

Delphi是Inprise的旗舰产品之一,前景应当还是比较乐观的,而且Inprise已经在向Linux进军了,而微软还迟迟没有动作。遗憾的是,Inprise公司Delphi的创始人已经跳槽到微软去主持Visual J++和C#项目了。但愿对Inprise冲击不会太大。

微软的Visual C++的前景又怎样呢?Visual Studio 7.0就要推出了。这一版本将加强网络开发的特性。看来微软虽然被判解体,开发实力可是一点没打折扣。

另外,虽说MFC已稍显落后,但不是说它不值得学。事实上,不学MFC就等于没学VC。利用MFC框架开发程序仍然是目前开发桌面应用的主流模式,而且还会保持相当长的时间。微软公司CEO史蒂夫·巴尔默(Steve Ballmer)曾说,.NET流行还得等2-3年。那么,MFC至少还有2-3年的生命空间。在技术日新月异的IT界,2-3年实在是很长一段时间了。好好把握吧。即使你不使用MFC框架,花点时间看一下MFC的封装机制对你熟悉C++的OOP机制和Windows底层功能也是很有好处的。而VCL的源代码是Object Pascal的,对C/C++程序员就没有这个"额外"的作用了。

TIFF、JPEG、CGM、EMF、PNG分别是什么格式的文件?

系统思考正反馈之比尔盖茨的正反馈理论

内容提要: 比尔盖茨在《未来之路》中介绍了他是如何通过正反馈理论打败所有竞争对手,使微软系统成为行业标准的。微软系统的低价策略使得比其他竞争对手卖出更多产品,而卖出的产品多,给他做兼容软件的厂家就多,从而增加了微软系统的影响,进而促进更多人购买微软系统,形成正反馈效应。

比尔•盖茨通过正反馈理论击败苹果操作系统,UNIX等众多实力强大的对少,使微软系统称为行业标准,自己也成为世界首富。

比尔·盖茨在他的书《未来之路》中写道:“事实标准常常通过经济机制在市场上发生演变,这种经济机制与推动商业成功的正向螺旋的概念十分相似,它使一个成功推动另一个成功,这一概念叫做正反馈,它说明事实标准之所以常常出现在人们寻求兼容性的时候的原因。

在一个发展的市场上,只要存在一种稍微优于竞争对手的做法,这时正反馈循环就开始了。这种情况最容易发生在下面这种高技术产品上,这种产品可以大量制造,而成本却很少增长,其一部分价值来源于他们的兼容性。家用录像游戏系统就是一个例证。这是一种有特殊目的的计算机,安装有一张供特殊目的用的操作系统,该操作系统形成了游戏软件平台。兼容性的重要性,还在于可利用的应用程序(例如这里的游戏程序)越多,则机器本身对用户来说就越有价值。同时,用户购买的机器越多,软件开发者就会为它开发越多的软件。一旦一台机器的推广到达了一个高水平,销售量就会不断上升。这时,正反馈循环就开始了。

计算机行业学到的最重要的教训之一是,计算及对其用户的价值大小取决于质量和可供计算机使用的各种应用软件。

但是最初的IBM个人计算机实际上可以选择装入3个操作系统——即我们的PC-DOS,CP/M-86和UCSD Pascal P-System。我们知道三个系统中只有一个能够成功,从而成为标准。我们需要向VHS录像带推入每一个录像带商店那样的同一类的力量,使MS-DOS也成为一个标准。我们看到有三种方法使MS-DOS名列前茅。

第一种就是要使MS-DOS成为最好的产品。第二种就是帮助别的公司编写以MS-DOS为基础的软件。第三种是要确保MS-DOS价格便宜。

我们和IBM做了一笔令人难以置信的交易——即只交低廉的一次性费用,就使该公司在所销售的许多计算机上使用微软公司的操作系统。这就使得IBM有了动力去推广MS-DOS,廉价地销售它们。我们的策略成功了。IBM以大约450美元的价格出售UCSD Pascal P-System,以175美元出售CP/M-86,而以60美元出售MS-DOS。

我们的目的不是要直接从IBM那里赚钱,而是要从出售MS-DOS特许权赚钱,有的计算机公司想要提供或多或少的与IBM个人计算机兼容的机器,我们就把MS-DOS的特许权出售给这些公司。IBM可以免费的使用我们的软件,但是它对未来的升级版软件并不能享有独占使用权和控制权。这使得微软公司做起了把软件平台的特许使用权出售给个人计算机工业的生意。结果IBM放弃了UCSD Pascal P-System和CP/M-86的升级版本。

用户们充满信心的购买IBM个人计算机,在1982年,软件开发者们开始抛出在这一DOS下运行的应用程序。每一个新的应用程序都增加了IBM个人计算机作为潜在的工业界的事实标准的实力。

一个正反馈的循环开始趋动个人计算机市场。一旦开了头,成千上万的应用程序出现了。不计其数的公司开始制造内置卡或“附件卡”,这些卡扩展了个人计算机的硬件能力,软件和硬件的珠联璧合所带来的好处使个人计算机的销售量远远超了IBM的预期销量——成百上千万地增加。正反馈循环为IBM循环出数十亿美元。有好几年,所有商用个人计算机中的半数以上是IBM的产品,其余的大多数产品也与它兼容。

在三年内,几乎所有的个人计算机竞争标准都消失了,唯一的例外是苹果公司的苹果二型(Apple II)和Mac机(Macintoch)。惠普,DEC,德州仪器和施乐公司,尽管在技术声望和用户方面都有很强的实力,但在80年代初期的个人计算机市场上均告败北。原因在于它们的机器缺乏兼容性,而且没有对IBM内部结构提供足够的重大改进。”

比尔·盖茨在《未来之路》中,详细的介绍了微软利用正反馈原理打败所有的其他操作系统而成为行业标准。

比尔·盖茨的正反馈思路是当微软的操作系统在市场上有较多一些份额,就会有较多的软件开发者为微软的操作系统编写应用软件,这样微软的操作系统的价值就会提高,就会有更多的人购买微软的操作系统,然后又有更多的软件开发者为微软系统编写应用程序,增加微软系统的价值,从而又再促进销售。最后形成正反馈,打败所有其他对手,成为行业标准。

比尔·盖茨提出三种方法来增加微软操作系统的市场份额的方法:“第一种就是要使MS-DOS成为最好的产品。第二种就是帮助别的公司编写以MS-DOS为基础的软件。第三种是要确保MS-DOS价格便宜。”

“我们和IBM做了一笔令人难以置信的交易——即只交低廉的一次性费用,就使该公司在所销售的许多计算机上使用微软公司的操作系统。这就使得IBM有了动力去推广MS-DOS,廉价地销售它们。我们的策略成功了。IBM以大约450美元的价格出售UCSD Pascal P-System,以175美元出售CP/M-86,而以60美元出售MS-DOS。”

在物理学中,我们知道:“合外力决定成果”。商品给消费者带来的利益是消费者购买的动力B,价格是消费者购买的阻力C,二者的合外力B-C决定了销售量这个成果Q,合外力的转化率为K。Q=K(B-P)是《可以量化的经济学》中提出的需求定律。微软使用了4种方法来增加销售量Q(如图7-14所示)。

“第一种就是要使MS-DOS成为最好的产品。第二种就是帮助别的公司编写以MS-DOS为基础的软件。”这两种方法增加了消费者购买MS-DOS系统的利益B,第1种是微软自身完善软件而增加的消费者利益,第2种是兼容软件增加的消费者利益B,通过Q=K(B-P)可知,增加B会而使销量Q增加。

“第三种是要确保MS-DOS价格便宜。”第3种方法降低价格,降低了消费者购买的成本P,通过Q=K(B-P)可知,降低P会而使销量Q增加。

通过与IBM这个巨头合作,获得了全世界的推广,增加盈余转化率K,通过Q=K(B-P)可知,增加K会而使销量Q增加。微软作为初创公司,负担不起全球推广这样巨大的营销费用。如果最开始微软没有和IBM进行合作,那么占据初始优势而最后形成正反馈效应的公司就不会是微软了。微软允许IBM以很低的费用使用微软的操作系统,从而使IBM有动力去推广微软的操作系统而不是其他家的。而由于IBM在个人商用电脑上的巨大成功,使微软的操作系统成为了行业标准。

微软通过将操作系统的特许权出售给其他IBM的兼容机厂商赚钱。

在这里作者以系统框图来分析微软的正反馈,并且介绍一条作者要在经济学中讲的重要原理:消费者盈余决定购买数量;而不是价格决定购买数量。

消费者盈余=消费者利益-价格。消费者利益指消费者购买某种产品或服务所获得的利益,也就是商品价值。消费者盈余与购买数量正相关,消费者盈余越多,购买数量越多(如图7-15所示)。

比尔·盖茨提出的增加销量的第一种方法是“就是要使MS-DOS成为最好的产品”,即增加操作系统带给消费者的利益,从公式:消费者盈余=消费者利益-价格可以看出,当价格不变时,增加消费者利益会增加消费者盈余,从而增加销量。

第二种方法是:“帮助别的公司编写以MS-DOS为基础的软件”。帮助其他公司编写与微软系统兼容的软件会提高微软系统的价值,即提高了消费者的利益,从公式可以推出,消费者盈余增加,购买量增加。

第三种方法是:“要确保MS-DOS价格便宜。”在消费者利益不变的情况下,降低价格会提高消费者盈余,从而增加销售量。

而比尔·盖茨的三种方法都用了,则消费者盈余会变的很大,购买量会增加很多,从而推动MS-DOS成为了行业标准。

在这3中方法中,微软允许IBM以很低的价格在其计算机上使用微软的操作系统,促使电脑界的巨人有动力去推广微软的操作系统,借着IBM的成功,而使自己的操作系统迅速成为行业标准,从而打败所有其他的操作系统。苹果系统,UNIX系统和其他操作系统的失败都是因为他们的兼容性不好,甚至于苹果公司自己的系统都不兼容,从而降低了消费者的利益。

摘自《可以量化的管理学》

软件编程

常见的扩展名】我就略说些经常遇到的,但并不是人人都认识的扩展名:

〔*.exe‖可执行文件;直接打开〕

〔*.rar‖一种压缩包;用WinRAR打开〕

〔*.zip‖一种压缩包;用WinRAR打开,或者WinXP也可以直接打开〕

〔*.iso‖虚拟光驱;用WinRAR打开,也可用其他虚拟光驱软件〕

〔*.doc‖word文档;用Office Word打开〕

〔*.ppt‖幻灯片; 用Office PowerPiont打开〕

〔*.xls‖电子表格;用Office Excel打开〕

〔*.wps‖WPS文档; 用金山WPS打开〕

〔*.txt‖文本文档;默认用记事本打开〕

〔*.lrc‖动态歌词;可以用记事本打开〕

〔*.rm,*.rmvb‖高清视频;可以用RealOnePlayer打开〕

〔*.mp3,*.wma,*.wav‖一些音乐〕

〔*.jpg,*.bmp,*.gif‖一些图片,其中gif可以是动态的〕

〔*.wfs‖Flash文件;可以用IE打开,也可用FlashPlayer打开〕

〔*.torrent‖BT文件;可以用BitComet打开〕

A

ACE:Ace压缩档案格式

ACT:Microsoft office助手文件

AIF,AIFF:音频互交换文件,Silicon Graphic and Macintosh应用程序的声音格式

ANI:Windows系统中的动画光标

ARC:LH ARC的压缩档案文件

ARJ:Robert Jung ARJ压缩包文件

ASD:Microsoft Word的自动保存文件;Microsoft高级流媒体格式(microsoft advanced streaming

format,ASF)的描述文件;可用NSREX打开 Velvet Studio例子文件

ASF:Microsoft高级流媒体格式文件

ASM:汇编语言源文件,Pro/E装配文件

ASP:动态网页文件;ProComm Plus安装与连接脚本文件;Astound介绍文件

AST:Astound多媒体文件;ClarisWorks“助手”文件

Axx:ARJ压缩文件的分包序号文件,用于将一个大文件压至几个小的压缩包中(xx取01-99的数字)

A3L:Authorware 3.x库文件

A4L:Authorware 4.x库文件

A5L:Authorware 5.x库文件

A3M,A4M:Authorware Macintosh未打包文件

A3W,A4W,A5W:未打包的Authorware Windows文件

B

BAK:备份文件

BAS:BASIC源文件

BAT:批处理文件

BIN:二进制文件

BINHex:苹果的一种编码格式

BMP:Windows或OS/2位图文件

BOOK:Adobe frameMaker Book文件

BOX:Lotus Notes的邮箱文件

BPL:Borlard Delph 4打包库

BSP:Quake图形文件

BUN:CakeWalk 声音捆绑文件(一种MIDI程序)

C

C0l:台风波形文件

CAB:Microsoft压缩档案文件

CAD:Softdek的Drafix CAD文件

CAM:Casio照相机格式

CAP:压缩音乐文件格式

CAS:逗号分开的ASCⅡ文件

CCB:Visual Basic动态按钮配置文件

CCH:Corel图表文件

CCO:CyberChat数据文件

CCT:Macromedia Director Shockwave投影

CDA:CD音频轨道

CDF:Microsoft频道定义格式文件

CDI:Philip的高密盘交互格式

CDM:Visual dbase自定义数据模块文件

CDR:CorelDRAW绘图文件;原始音频CD数据文件

CDT:CorelDRAW模板

CDX:CorelDRAW压缩绘图文件;Microsoft Visual FoxPro索引文件

CFG:配置文件

CGI:公共网关接口脚本文件

CGM:计算机图形元文件

CH:OS/2配置文件

CHK:由Windows磁盘碎片整理器或磁盘扫描保存的文件碎片

CHM:编译过的HTML文件

CHP:Ventura Publisher章节文件

CHR:字符集(字体文件)

CHT:ChartViem文件;Harvard Graphics矢量文件

CIF:Adaptec CD 创建器 CD映像文件

CIL:Clip Gallery下载包

CIM:SimCity 2000文件

CIN:OS/2改变控制文件用于跟踪INI文件中的变化

CLASS:Java类文件

CLP:Windows 剪贴板文件

CLL:Crick Software Clicker文件

CLS:Visual Basic类文件

CMD:Windows NT,OS/2的命令文件;DOS CD/M命令文件;dbaseⅡ程序文件

CPI:Microsoft MS-DOS代码页信息文件

CPL:控制面板扩展名,Corel颜色板

CPP:C++代码文件

CPR:Corel提供说明书文件

CPT:Corel 照片-绘画图像

CST:Macromedia Director Cast文件

CUR:Windows光标文件

D

DBF:dbase文件,一种由Ashton-Tate创建的格式,可以被ACT!、Lipper、FoxPro、Arago、Wordtech、Xbase和类似数据库或与数据库有关产品识别;可用数据文件(能被Excel

97打开);Oracle 8.1.x表格空间文件

DBX:DataBearn图像;Microsoft Visual FoxPro表格文件

DCT:Microsoft Visual FoxPro数据库容器

DCU:Delphi编译单元文件

DCX:Microsoft Visual FoxPro数据库容器;基于PCX的传真图像;宏

DIR:MacromediaDirector文件

DLL:动态链接库

DOC:frameMaker或frameBuilder文档;Word Star文档、Word

Perfect文档、Microsoft:Word文档;DisplayWrite文档

DOT:Microsoft Word文档模板

DPL:Borland Delph 3压缩库

DRV:驱动程序

DRW:Micrografx Designer/Draw;Pro/E绘画文件

DSF:Micrografx Designer VFX文件

DSG:DOOM保存的文件

DSM:Dynamic Studio音乐模块(MOD)文件

DSP:Microsoft Developer Studio工程文件

DSQ:Corel QUERY(查询)文件

DST:刺绣机图形文件

DSW:Microsoft Developer Studio工作区文件

DTA:World Bank(世界银行)的STARS数据文件

DTD:SGML文档类型定义(DTD)文件

DTED:地面高度数字数据(图形的数据格式)文件

DTF:Symantec Q&A相关的数据库数据文件

DTM:DigiTrakker模块文件

DUN:Microsoft拔号网络导出文件

DV:数字视频文件(MIME)

DWG:AutoCAD工程图文件;AutoCAD或Generic CADD老版本的绘图格式

DXR:Macromedia Director受保护(不可编辑)电影文件

E

EDA:Ensoniq ASR磁盘映像

EDD:元素定义文档(frameMaker+SGML文档)

EDE:Ensoniq EPS磁盘映像

EDK:Ensoniq KT磁盘映像

EDQ:Ensoniq SQ1/SQ2/Ks32磁盘映像

EDS:Ensoniq SQ80磁盘映像

EDV:Ensoniq VFX-SD磁盘映像

EFA:Ensoniq ASR文件

EFE:Ensoniq EPS文件

EFK:Ensoniq KT文件

EFQ:Ensoniq SQ1/SQ2/Ks32文件

EFS:Ensoniq SQ80文件

EFV:Ensoniq VFX-SD文件

EMD:ABT扩展模块

EMF:Windows增强元文件

EML:Microsoft Outlook Express邮件消息(MIME RTC822)文件

EXE:可执行文件(程序)

F

FAV:Microsoft Outlook导航条

FAX:传真类型图像

FCD:虚拟CD-ROM

FDF:Adobe Acrobat表单文档文件

FLA:Macromedia Flash电影

FND:Microsoft Explorer保存的搜索文件(Find applet)

FON:系统字体

FRT:Microsoft FoxPro报表文件

FRX:Visual Basic表单文本;Microsoft FoxPro报表文件

FXP:经Microsoft FoxPro编译的源文件

G

GDM:铃声、口哨声和声音板模块格式

GetRight:GetRight未完成的下载文件

GHO:Norton 克隆磁盘映像

GID:Windows 95全局索引文件(包括帮助状态)

GIF:CompuServe位图文件

GL:动画格式

GRP:程序管理组

H

HEX:Macintosh BinHex2.0文件

HLP:帮助文件;Date CAD Windows帮助文件

HPP:C++程序头文件

HQX:Macintosh BinHex 4.0文件

HT:HyperTerminal(超级终端)

HTM,HTML:超文本文档

HTT:Microsoft超文本模板

HTX:扩展HTML模板

I

ICO:Windows图标

IDX:Microsoft FoxPro相关数据库索引文件;Symantec Q&A相关数据库索引文件;Microsoft Outlook

Express文件

IMG:GEM映像

INF:信息文件

INI:初始化文件;Mwave DSP Synth的“nwsynth.ini” GMS安装;Cravis Ultrasound bank安装

INP:Oracle 3.0版或早期版本的表单源代码

INRS:INRS远程通信声频

INS:InstallShield安装脚本;X-Internet签字文件;Ensoniq EPS字簇设备;Cell/ⅡMAC/PC抽样设备

INT:中间代码,当一个源程序经过语法检查后编译产生一个可执行代码

IOF:Findit文档

IQY:Microsoft Internet查询文件

ISO:根据ISD 9660有关CD-ROM文件系统标准列出CD-ROM上的文件

ISP:X-Internet签字文件

IST:数字跟踪设备文件

ISU:InstallShield卸装脚本

IT:脉冲跟踪系统音乐模块(MOD)文件

ITI:脉冲跟踪系统设备

ITS:脉冲跟踪系统抽样,Internet文档位置

IV:Open Inventor中使用的文件格式

IVD:超过20/20微观数据维数或变量等级文件

IVP:超过20/20的用户子集配置文件

IVT:超过20/20表或集合数据文件

IVX:超过20/20微数据目录文件

IW:Idlewild屏幕保护程序

IWC:Install Watch文档

J

J62:Ricoh照相机格式

JAR:Java档案文件(一种用于applet和相关文件的压缩文件)

JAVA:Java源文件

JAR:Java档案文件(一种用于applet和相关文件的压缩文件)

JAVA:Java源文件

JFF,JFIF,JIF:JPEG文件

JPE,JPEG,JPG:JPEG图形文件

JS:Javascript源文件

JSP:HTML网页,其中包含有对一个Java servlet的参考

K

KAR:卡拉OK MIDI文件(文本+MIDI)

L

LAB:Visual dbase标签文件

LBT,LBX:Microsoft FoxPro标签文件

LDB:Microsoft Access加锁文件

LHA:LZH更换文件后缀

LOG:日志文件

LZH:LH ARC压缩档案

M

M1V:MPEG相关文件(MIME"mpeg"类型)

M3D:Corel Motion 3D动画文件

M3U:MPEG URL(MIME声音文件)

MAM:Microsoft Access宏

MAQ:Microsoft Access查询文件

MAR:Microsoft Access报表文件

MBX:Microsoft Outlook保存email格式;Eudora邮箱

MCW:Microsoft Word的Macintosh文档

MDB:Microsoft Access数据库

MDN:Microsoft Access空数据库模板

MDW:Microsoft Access工作组文件

MID:MIDI音乐

MMM:Microsoft多媒体电影

MOV:QuickTime for Windows电影

MP2:第二层MPEG音频文件

MP3:第三层MPEG音频文件

MPA:MPEG相关文件,MIME“mpeg类型”

MPE,MPEG,MPG:MPEG动画文件

MPP:Microsoft工程文件;CAD绘图文件格式

MPR:Microsoft FoxPro菜单(已编译)

MSI:Windows 安装器包

MSN:Microsoft 网络文档;Descent Mission文件

O

OBD:Microsoft Office活页夹

OBJ:对象文件

OBZ:Microsoft Office活页夹向导

OCX:Microsoft对象链接与嵌入定制控件

ODS:Microsoft Outlook Express邮箱文件

OFT:Microsoft Outlook模板

OPX:OPL扩展DLL(动态链接库)

OSS:Microsoft Office查找文件

OST:Microsoft Exchange / Outlook 离线文件

P

PAL:压缩文件

PART:Go!Zilla部分下载文件

PAS:Pascal源代码

PCS:PICS动画文件

PDF:Adobe Acrobat

可导出文档格式文件(可用Web浏览器显示);Microsoft系统管理服务器包定义文件;NetWare打印机定义文件

PHP,PHP3:包含有PHP脚本的HTML网页

PHTML:包含有PHP脚本的HTML网页;由Perl分析解释的HTML

PM5:Pagemaker 5.0文件

PM6:Pagemaker 6.0文件

PPS:Microsoft Powerpoint幻灯片放映

PPT:Microsoft Powerpoint演示文稿

PRF:Windows系统文件,Macromedia导演设置文件

PSD:Adobe photoshop位图文件

PSM:Protracker Studio模型格式;Epic游戏的源数据文件

PST:Microsoft Outlook个人文件夹文件

PWL:Windows 95口令列表文件

Q

QIF:QuickTime相关图像(MIME);Quicken导入文件

QT,QTM:QuickTime电影

QTI,QTIF:QuickTime相关图像

QTP:QuickTime优先文件

QTS:Mac PICT图像文件;QuickTime相关图像

QTX:QuickTime相关图像

R

RA:RealAudio声音文件

RAM:RealAudio元文件

RAR:RAR压缩档案(Eugene Roshall格式)

REC:录音机宏;RapidComm声音文件

REG:注册表文件

REP:Visual dbase报表文件

RES:Microsoft Visual C++资源文件

RM:RealAudio视频文件

RMF:Rich Map格式(3D游戏编辑器使用它来保存图)

ROM:基于盒式磁带的家庭游戏仿真器文件(来自Atari

2600、Colecovision、Sega、Nintendo等盒式磁带里的ROM完全拷贝,在两个仿真器之间不可互修改)

Rxx:多卷档案上的RAR压缩文件(xx=1~99间的一个数字)

S

SAV:游戏保存文件

SB:原始带符号字节(8位)数据

SBK:Creative Labs的Soundfont 1.0 Bank文件;(Soundb laster)/EMU SonndFont v1.x

Bank文件

SBL:Shockwave Flash对象文件

SCF:Windows Explorer命令文件

SCH:Microsoft Schedule+1

SCP:拨号网络脚本文件

SCR:Windows屏幕保护;传真图像;脚本文件

SFX:RAR自解压档案

SHTML:含有服务器端包括(SSI)的HTML文件

SPL:Shockwave Flash对象;DigiTrakker抽样

SQL:Informix SQL查询;通常被数据库产品用于SQL查询(脚本、文本、二进制)的文件扩展名

STM:.shtml的短后缀形式,含有一个服务端包括(SSI)的HTML文件;Scream Tracker V2音乐模块(MOD)文件

STR:屏幕保护文件

SWA:在Macromedia导演文件(MP3文件)中的Shockwave声音文件

SWF:Shockwave Flash对象

SYS:系统文件

T

T64:Commodore 64仿真器磁带映像文件

THEME:Windows 95桌面主题文件

TIF,TIFF:标签图像文件格式(TIFF)位图

TMP:Windows临时文件

TRM:终端文件

TXT:ASCⅡ文本格式的声音数据

TZ:老的压缩格式文件

V

VBA:Vbase文件

VBP:Microsoft Visual Basic工程文件

VBW:Microsoft Visual Basic工作区文件

VBX:Microsoft Visual Basic用户定制控件

VQE,VQL:Yamaha Sound-VQ定位器文件

VQF:Yamaha Sound-VQ文件(可能出现标准)

VRF:Oracle 7配置文件

VSL:下载列表文件(GetRight)

W

WAB:Microsoft Outlook文件

WAD:包含有视频、玩家水平和其他信息的DOOM游戏的大文件

WAL:Quake 2正文文件

WAV:Windows波形声形

WBK:Microsoft Word备份文件

WFM:Visual dbase Windows表单

WFN:在CorelDRAW中使用的符号

WIZ:Microsoft Word向导

WRL:虚拟现实模型

WWL:Microsoft Word内插器文件

X

XLK:Microsoft Excel备份

XLL:Microsoft Excel内插器文件

XLM:Microsoft Excel宏

XLS:Microsoft Excel工作单

XLT:Microsoft Excel模板

XLV:Microsoft Excel VBA模块

XLW:Microsoft Excel工作簿/工作区

Z

ZAP:Windows软件安装配置文件

ZIP:Zip文件

硬石技术论坛共享文档--软件编程部分免费下载

yjvs

编程是编定程序的中文简称,就是让计算机代码解决某个问题,对某个计算体系规定一定的运算方式,使计算体系按照该计算方式运行,并最终得到相应结果的过程。

以上就是关于delphi与vc比较全部的内容,如果了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

 
举报收藏 0打赏 0评论 0
 
更多>同类百科头条
推荐图文
推荐百科头条
最新发布
点击排行
推荐产品
网站首页  |  公司简介  |  意见建议  |  法律申明  |  隐私政策  |  广告投放  |  如何免费信息发布?  |  如何开通福步贸易网VIP?  |  VIP会员能享受到什么服务?  |  怎样让客户第一时间找到您的商铺?  |  如何推荐产品到自己商铺的首页?  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  粤ICP备15082249号-2