(这条文章已经被阅读了 113 次) 时间:2002-01-17 02:01:54 来源:胡元志 (逢一笑) 转载
我的回忆和有趣的故事》—C/C++圣战篇(上)
李维(台湾)
Borland C/C++的反击
我的小文《DELPHI探索》写作进度很难控制,其间隔的时间可能比较长, 为了在这段间隔的时间让大家看一
当Visual C++ 1.0在C/C++开发工具市场获得了空前成果的之后,Borland才从Borland C/C++ 3.1的胜利
梦中惊醒,思考如何面对Visual C++的猛烈功势。事实上当时的Borland如果脑袋清醒一点,好好看清当时
C/C++开发工具的市场,那么Borland应该会发现虽然Visual C++经过2年多的整军经武,实力已经大不前。
不过Borland C/C++ 3.1仍然在许多方面可以和Visual C++一争长短的。例如其时Visual C++的最佳化编译器
仍然落后Borland C/C++ 3.1一些,第2点是MFC仍然没有完整的封装Window API,而且MFC是以较低阶的方式
封装Window API,并不是很物件导向,也不是很容易使用。事实上以我的观点来看,我认为就是因为MFC不好
用,因此Visual C++才需要在整合发展环境中提供以视觉化方式产生MFC程序码的功能,第3是Visual C++ 当
时并没有很好的封装资料结构的Container Class,而Borland C/C++却有非常好用的BIDS类别库。第4,也
是最重要的,Borland C/C++ 3.1仍然拥有绝大的市场,而且几乎所有的周边公用程序,Shareware等都是使用
Borland C/C++ 3.1开发的。因此如果Borland不要急,好好的开发下一代的C/C++开发工具,即使Microsoft
Visual C++能够掠夺一些市场佔有率,但是如果下一代的Borland C/C++能够像Borland C/C++ 3.0一样立刻拉
开和Visual C/C++的距离,那么Borland在C/C++市场仍将拥有王者的地位。
可惜的是,也许Philippe Kahn在和Microsoft的FoxPro For Window一役中被吓到了,因此急於在Visual
C/C++ 1.0之后立刻推出新的Borland C/C++以扳回颜面。但是Philippe Kahn忘了,在这段时间之内Borland失
去了许多的人材,Eugene Wang也离开了,更重要的是在过去近3年的时间之内,Borland几乎没有持续的开发
下一代的Borland C/C++,在短时间之内如何能够仓促的推出产品呢?
但是Philippe Kahn可管不了这么多了,急忙找来了Carl Quinn等人便要求立刻开发出下一代的Borland
C/C++,於是Borland C/C++ 4.0就在这么鸭子赶上架下匆忙的开发了。Borland在开发Borland C/C++ 4.0时犯
了许多的大忌。首先在这么短的时间内Borland决定全新发展整合发展环境,第2是把OWL完全重写,第3是大幅
修改最佳化编译器,第4是整合当时棘手的VBX,Borland居然让16位元和32位元的程序能够同时使用16位元,
丑陋的VBX。
上面所说的每一项都是大工程,Borland早应该在Borland C/C++ 3.1之后便开始做这些工作,现在要在短
短的一年多的时间内重新开发一个这么複杂的C/C++开发工具,几乎是不可能的工作。但是在Philippe Kahn的
要求之下,这些Borland的工程师还是硬着头皮做了出来。
不过我必须很沈痛的说,当时我在Beta测试Borland C/C++ 4.0时便和台湾Borland的人说,如果Borland仓
促推出Borland C/C++ 4.0的话,那么不但不会对Visual C++产生任何的影响,反而是自杀的行为,因为臭虫实
在太多了,整个整合发展环境的反应也很缓慢,它的最佳化编译器更是笑话,错误百出,真是像当时恶名昭彰
的Microsoft C 4.0一样。我还开玩笑的说,是不是因为Microsoft从Borland挖了大量的Borland C/C++人才,
因此好胜的Philippe Kahn也还以颜色,从Microsoft反挖Microsoft C的人,却不幸的挖到了Microsoft C 4.0
的人。
但是很显然的Borland并没有听到我的,或是其他Beta测试人的心声,在Visual C++ 1.0推出后的1年多,
Borland C/C++ 3.1后的4年,Borland终於推出了新一代的Borland C/++ 4.0,这个肩负和Visual C++ 1.0对抗
的C/C++开发工具。
在Borland C/C++ 4.0刚推出之际,Borland确实为4.0做了极大的造势,我记得在当时所有重要的电脑杂
志中,例如Byte,PC Magazine,Dr. Bob等,都有4.0整页的广告。这个广告的内容是以一个巨大的猫头鹰为
主,再搭配蓝色底色系的Borland C/C++ 4.0为主,选用巨大的猫头鹰当然是因为OWL的原因,只可惜我现在找
不到那幅广告了。
图1
痛失江山的Borland C/C++ 4.0
当时Borland使用了如下的广告用词 : 『Visual Is Only A Facial Facade』来讽刺Visual C/C++只提供
了产生MFC程序码的基本精灵,而Borland除了也提供相对应的AppExpert精灵能够提供类似的功能以产生使用
者选择的OWL程序码之外,Borland C/C++ 4.0的整合发展环境还提供了视觉化的3面版视窗,能够让程序师完
整的掌握整个专案的情形。
例如在下图中便是当初令人眼睛为之一亮的AppExpert:
图2
还记得Borland提供的AppExpert吗?
下图则是当时Borland C/C++的註册商标,3面版视窗开发环境。看到下图又令我想起当初使用C/C++写程序
的日子,下方程序码面版清楚的显示了我在1995年於鼎新工作时写的智慧型Window排程系统,时间过得是真快
啊。
图3
令人怀念的Borland C/C++ 4.0整合发展环境,三面版视窗
当时Borland C/C++ 4.0的3面版整合发展环境真是开创了一个新的局面,因为这个整合发展环境允许程序
师知道每一个应用程序定义的视窗讯息,并且能够立刻的显示在下方的程序码视窗中,的确是非常的方便,也
比当时Visual C/C++的整合发展环境来得先进。再加入Borland较为先进的编译器技术和架构更好的C/C++
Framework-OWL,照理说Borland C/C++ 4.0应该会获得极大的胜利,那么为什么最后会以失败收场呢?
没错,在Borland C/C++ 4.0刚推出之后订单的确如雪片般飞来,销售情形非常好,因为这毕竟是Borland
在睽违了数年之后的大作,许多Borland的用户都迫不及待的昇级,就像当初我也是拚命的要求台湾Borland要
第一个给我Borland C/C++ 4.0。但是在Borland C/C++ 4.0推出一段时间之后,市场的反应就急速的冷却下来,
因为各种负面的批评不断涌现,这主要的原因当然是因为Borland C/C++ 4.0的品质实在不好,就像前面我在
Beta测试时说的,由於Borland太急於推出4.0,因此并没有在最后阶段修正许多的错误,又没有经过最后系统
微调的工作,又太大胆的加入太多先进的技术,造成了整个产品的不稳定,而造成了大错。
下面几点应该是造成当初Borland C/C++ 4.0滑铁卢的主要原因:
*整合发展环境方面-臭虫太多,容易当掉而且反应速度缓慢
*编译器方面-最佳化玩得过火,产生错误的编译程序码
*OWL方面-採用全新的多重继承架构,虽然是正确的做法,却和Borland C/C++ 3.1中的OWL不相容,造成许
多程序师无法昇级C/C++专案
*VBX方面-大胆的採用在16/32位元都能使用VBX的技术,造成一些VBX无法顺利的在Borland C/C++ 4.0中使用
我想其中最可惜的就是OWL了,因为OWL 2.0在各方面都有一流的表现,实在是MFC强劲的竞争对手,OWL 2.0
也获得了各方一致的肯定和称讚。无奈的是由於OWL 2.0做了从基本架构的改变,这是为了解决当初OWL 1.x使用
了不标准的C/C++编译器技术的问题,但是这造成了原本Borland C/C++程序师极大的困扰,因为昇级不易。对於
新的C/C++使用者来说又因为Borland C/C++ 4.0本身不稳定的因素而却步,因此造成了OWL 2.0叫好不叫座的下
场,真是可惜了OWL小组的努力。
我记得当时我的专案有使用FarPoint的SpreadSheet VBX元件,由於一直无法顺利的在Borland C/C++ 4.0中
使用,并且会造成应用程序的当掉,最后追踪执行程序码却发现应该是Borland C/C++ 4.0的问题,因此最后只好
在咒骂中放弃使用4.0,而回到Borland C/C++ 3.1。我当时想,对於我这个长期使用Borland产品的人都无法忍受
4.0的品质,其他的程序师又怎能使用这个产品。我想这就是为什么后来4.0全面溃败的原因,因为Borland推出了
根本不堪用的产品。
在我於Borland工作的时间,有一次在新加坡和现在Borland开发者关系部门的副总裁David Intersimone谈起
这一段往事,David也很感慨这一段往事,David直呼『We screwed it up!』,『It’s a mess』。David并且说
当时整个Borland C/C++开发小组都很混乱,和以往Borland C/C++ 3.0/3.1的开发小组比起来实在是差太多了,
除了因为一些重要的人物相继离开Borland,而且Microsoft也挖走一大票人之外,Philippe Kahn的直接介入,造
成人事不和也有很大的原因。
图4
David I.说『We Screwed it up!』 ,『It’s a mess』
在Borland C/C++ 4.0快速失利之后,Borland也体认到问题的严重性,因此立刻的着手开发Borland
C/++ 4.0的Patch,当时是称为Service Pack。但是在稍后的4.01版中并没有完全的解决问题,一直要到4.02
才稍为解决一些严重的问题,无奈时不我予,拖的时间太长,市场已经起了巨大的变化。
在Borland C/C++ 4.0失利之后,立刻造成了严重的后果,首先是Borland C/C++的市场大量且快速的流
失,让Visual C/C++快速的成长。第二点是当初Borland C/C++ 3.1在公用程序市场打下的江山也拱手让人,
原本许多硬体厂商也使用Borland C/C++ 3.0/3.1撰写驱动程序也开始转换到Visual C/C++,而严重的是在应
用程序市场方面由於4.0的品质以及稍后OLE的关系,也开始大量的开始转为使用Visual C/C++来撰写应用程序。
Borland在3个主要的应用市场接连败退,C/C++的江山注定将易主,其势已不可挽。
Borland C/C++,Visual C/C++,Watcom C/C++和Symantec C/C++的缠斗
自Borland C/C++ 4.0一役大败之后,Borland在C/C++市场上建筑的巨大堡垒似乎再也不是牢不可破了。
Visual C/C++固然在不断的接收Borland C/C++失去的市场,此时在C/C++市场上也加入了另外两个坚强的对手,
那就是Symantec C/C++和Watcom C/C++。
Symantec C/C++的发展史
说起这两个对手也都是个个来头不小,先说Symantec C/C++吧。它的Think C/C++在Macintosh上便是非常
有名的编译器,因此早在C/C++领域便有深厚的基础。在Symantec并购了PC上第一个C/C++编译器Zortech C/C++
之后,Syman-tec进入PC的开发工具市场也是箭在弦上了,只可惜的是其时Symantec还未找到一个在PC上有丰富
经验的开发工具领导者。
也许是上天注定要引起稍后的C/C++编译器大战吧,此时Borland C/C++ 3.1的幕后支柱Eugene Wang刚好和
Philippe Kahn闹翻,离开了Borland。Symantec见此时不可失,立刻重金延揽Eugene Wang到Symantec,为Sy-
mantec推出第一个C/C++开发工具。在1993年左右吧,Symantec C/C++在Eugene Wang的掌舵之下推出了第一个
Symantec C/C++版本,立刻便获得了市场的好评。自此之后Symantec C/C++军心大振,不断的继续改善,也逐
渐的获得了不小的C/C++市场,隐然成为可以对抗Borland C/C++,Visual C/C++的另一山头。当时Symantec
C/C++是以最华丽,先进的整合发展环境获得市场的高度认同,在C/C++编译器最佳化方面的表现也不会输给其
他的编译器。
当时我在RUN!PC上写C/C++的文章,因此Symantec C/C++也有和我连络,并且送给我一套最高档的Symantec
C/C++,希望我除了为Borland写C/C++的文章之外,也能够为Symantec C/C++写一些东西,我想这就是做为写技
术文章的一个好处之一,那就是可以拿到许多最Hot的开发工具。我还记得在当时安装Symantec C/C++之后,的
确被它的整合发展环境吸引的说不出话来,因为实在是太棒了,Borland C/C++和Visual C/C++的整合发展环境
和Symantec C/C++的整合发展环境比较起来,立刻的就变成索然无味,平凡无奇了,到现在我仍然必须竖起大拇
指对Symantec C/C++的整合发展环境说声『讚』。我想Eugene Wang在这么短的时间内把Symantec C/C++打造的
好此之好,除了证明他的不凡功力之外,也有向Philippe Kahn示警的意思。证明Philippe Kahn让他离开Bor-
land是错误的决定。我之所以 如此说是因为其时Symantec C/C++最喜欢点名挑战的对象便是Borland C/C++了。
对我的感觉而言,Symantec C/C++就像是一个技艺精良,又装备华丽的C/C++军团。
Watcom C/C++的发展史
真是非常有趣的是,Watcom C/C++走的路子和Symantec C/C++几乎是完全相反的。当时出品Watcom C/C++
编译器的是一家加拿大的小公司,不过这家公司却对最佳化编译器有深入的研究。当时Watcom C/C++是以在DOS
下能够产生最好的最佳化程序码闻名於世的,在其时有许多写游戏和DOS Extender的厂商都是指名要使用Watcom
C/C++,因为不论是Borland C/C++或是Visual C/C++产生的最佳化程序码都比Watcom C/C++的最佳化程序码差上
一截。再加入当时最有名的DOS Extender 厂商PharLap公司也是使用Watcom C/C++,因此Watcom C/C++在专业的
C/C++程序师以及系统程序师心中是第一品牌的C/C++开发工具。
不知道还有多人记得PharLap这家公司,或是有没有人记得Andrew Schulman这位伟大的软件技术人员。当
时Andrew Schulman的Undocumented Windows一书红遍了半边天,也惹得Microsoft要告Andrew Schulman。而
Andrew Schulman便是PharLap公司的首席工程师,也是当时最着名的『The ANDREW SCHULMAN Programming
Series』的总监,例如当时由Matt Pietrek撰写的Windows Internals也是轰动一时的巨着。而PharLap公司是
当时出版DOS Extender软件最成功的软件公司。
谈到Matt Pietrek,熟悉Window Programming的人应该很少有不知这位大师级人物的。Matt长期在Micro-
soft System Journal撰写Under The Hood专栏,专门写一些深入系统的程序设计技术,在数年前便和Andrew
Schulman,David Maxey成为Widow System Programming的三大巨头之一。Matt也是着名的Window除错工具
SoftIce,BoundsChecker的主要研发工程师。Matt本身也是从Borland出道的,当Matt初至Borland工作时便是
在Turbo Debugger小组中研发除错工具。当时Bor-land的Turbo Debugger是DOS下最强的除错工具,即使是
Microsoft也无法推出能够和Turbo Debugger抗衡的除错工具。Matt在这个小组中吸收了大量的知识,并且快
速的成为这个领域的专家。后来Turbo Debugger小组的部份成员被Microsoft挖走,让Microsoft掌握了Bor-
land的核心除错技术,以致后来也能够推出不错的除错工具。而Matt也出走到NuMega公司成为开发SoftIce,
Bounds Checker的关键人物。写到这里还是不禁要佩服Borland,因为当今许多名满天下的重量级软件工程师
都是由Borland培养出来的。
在Watcom C/C++於DOS市场佔稳了脚步之后,由於Window已经逐渐成为市场的主流,DOS势必将被逐渐淘
汰出局,因此Watcom C/C++要继续的生存下去,也一定要推出Window平台的C/C++开发工具。大约也是在1993,
1994年左右Watcom终於推出第一个Window的开发工具。
不过当时Watcom C/C++在Window推出的C/C++开发工具实在是平凡不已,其整合发展环境和另外三个对手
比较起来简直像是远古的产品,一点特色都没有,不过Watcom C/C++仍然是以它的最佳化编译器做为号召。
因此在当时发生了一个非常有趣的现象,那就是许多软件公司会同时买Borland C/C++,或是Visual C/C++,
Symantec C/C++之一,再搭配一套Watcom C/C++。在开发应用系统时使用其他三套开发工具之一,最后要出
货时再使用Watcom C/C++来编译以产生最佳的程序码。
在Watcom C/C++推出了Window平台的开发工具之后,仍然吸引了一群使用者,虽然Watcom C/C++的市场
比起其他的三家来说是最小的,但是也在一方撑起了一片天,成为四大C/C++开发工具之一。稍后Watcom
C/C++被Sybase并购,并且成为后来Sybase的Optima++的前身。
对我的感觉而言,Watcom C/C++就像是一个穿着朴素,但是却拥有最佳训练的白色C/C++军团。
关键的时刻-MFC Or Not 在Symantec C/C++和Watcom C/C++逐渐的站稳了脚步之后,四大编译器决战的时
刻也逐渐逼近了。在1994年未的决战之前,Symantec和Watcom同时面对了一个非常严厉的考验,那就是C/C++
Framework的选择。
虽然Symantec和Watcom都以各自的特色佔得了市场,不过在当时对於一个C/C++开发工具来说,最重要的
因素之一就是C/C++Framework。因此Symantec和Watcom也都必须提供使用者一套C/C++ Framework。不过这对
於Symantec和Watcom都是一个难以解决的问题,因为当时的C/C++ Framework已由Borland的OWL和Microsoft
的MFC所佔领,如果要自己发展新的C/C++ Framework,那么Symantec和Watcom并没有如此雄厚的资源,也无
法在短时间之内完成。因此Symantec和Watcom必须下一个决定到底是要使用MFC或是OWL做为它们的开发工具
C/C++ Framework。
在1993年初Symantec和Watcom分别和Microsoft签约License MFC做为它们的开发工具的C/C++ Framework。
至此大势以定,在C/C++ Framework的市场已经形成三家夹击一家的形式。当时许多人便预估Borland将成为输
家,因为市场已经成为一面倒,MFC看起来已经是胜券在握了。在当时於Borland的内部也展开了激烈的辩论,
讨论是否也要License MFC做为C/C++的Framework,停止继续开发OWL。不过后来Borland还是决定继续开发OWL,
而不使用MFC,因为Borland的C/C++技术小组认为MFC不论是在架构上或是设计上都比不上OWL。而且由於Visual
C/C++在当时对於C/C++的标准支援不如Borland C/C++,因此在MFC内部使用了大量的Macro以及不标准的语法,
因此如果Borland C/C++要使用MFC,那么还需要修改编译器来编译MFC。
对於这一点我认为Borland还是做了一个正确的决定,因为如果当时Borland也License MFC,那么不但在气
势上便输了一截,而且当MFC的发展是完全掌握在Microsoft的手里,那么就等於脖子是掐在别人的手里,动弹
不得了。可惜的是Symantec和Watcom并没有看清这一点,以为有了和Microsoft一样的Framework,就可以在其
他地方和Micro-soft以及Borland一决雌雄,Symantec和Watcom却没有想就是这一点决定让后来的决战一败涂
地,终究完全推出PC的C/C++开发工具市场。
时序到了1994年未,C/C++开发工具的四大天王决战的日子终於愈来愈近了。