C++Builder与VC++的比较(下)
虽然后来其它的软件公司在取得了OLE的技术信息之后也推出了具备OLE功能的应用程序,但是毕竟是慢了Microsoft许久,市场也流失了许多。不过我也很奇怪的是在当时内建OLE功能的应用程序之中,几乎所有的软件厂商推出的应用程序在激活数个应用程序而且使用OLE之后,就非常容易的当掉,只有Microsoft的应用程序不太会发生这种情形,因此许多人便认为Microsoft有隐瞒一些技术没有让其它的厂商知道。由于OLE是如此的复杂,因此Borland无法立刻在OWL之中实作出这种功能,于是就造成了市场上负面的影响。至于Symantec和Watcom虽然是License MFC,但是在其时它们License的是MFC 1.x的版本,Microsoft并没有把OLE实作在MFC 1.x中,而是在实作在MFC 2.0之中。在MFC 2.0推出时最重要的功能就是Microsoft加入了 20000多行支持OLE的程序代码,但是MFC 2.0却仅限于Visual C/C++使用,就是这关键的一点让其它三家厂商吃了亏。
对于OLE这个关键技术的影响,Borland是深知在心的,因此在计划在Borland C/C++ 4.5的OWL 2.5中支持OLE。当时Borland推出的解决方案便是OCF(Object Component Framework)。
Borland当初在设计OCF时有几个重大的目标。这些目标包括了: 一、如何能够使得 OLE琐碎 、复杂的接口能够单纯化; 第二、如何能够使得OLE在窗口环境下写程序的思考方式 一致化--即使用「事件驱动」的方法。第三、如何能够在微软占尽天时、地利(未必人和) 的情况下使得Borland的产品具备OLE的功能。第四、如何能够让大多数C++的程序员都能够享受OLE的功能而不局限于OWL的程序员。由于上述的设计目标, 而造就了典雅而具有弹 性的OCF。由于OCF本身是一完整而独立的 Framework, 因此它可适用于各种应用程序发展Framework。
不晓得各位使用过Borland C/C++的朋友们是否还依稀记得下图OCF的架构图之一,以及下面的OCF范例程序代码,这些可是我把1994年写的文章挖出来之后找到的,真是令我感慨,也回想起了当时的情景,也让各位回忆一下OWL和OCF。对于不熟悉 OWL和OCF的朋友,也可以从下图和程序代码中观察一下当时的技术以及设计的概念。
基本上我现在看这些图形架构,会发现它们并没有落后现在太多,可见当时设计者的功力(Carl Quinn Again)。 // // Insert an OLE object into the view // void TOleWindow::CmEditInsertObject() { 001 PRECONDITION(OcView); 002 TOcInitInfo initInfo(OcView); 003 if (OcApp->Browse(initInfo)) { 004 TRect rect; 005 GetInsertPosition(rect); 006 SetSelection(new TOcPart(*GetOcDoc(), initInfo, rect)); 007 OcView->Rename(); 008 InvalidatePart(invView); } } 程序1 OWL的TOleWindow支持OLE插入对象之成员函数 // // Handle left double-click message // void TOleWindow::EvLButtonDblClk(uint modKeys, TPoint& point) { PRECONDITION(GetOcDoc() && GetOcView()); TOleClientDC dc(*this); dc.DPtoLP(&point); TOcPart* p = GetOcDoc()->GetParts().Locate(point); if (modKeys & MK_CONTROL) { if (p) p->Open(true); // Ctrl key forces open editing } else { SetSelection(p); if (p && p == GetOcView()->GetActivePart()) { // resync the active flag p->Activate(false); } GetOcView()->ActivatePart(p); // In-place activation } } 程序2 OWL的TOleWindow支持左键双击之成员函数
虽然Borland及时的在OWL 2.5中加入了OLE的支持,无奈Microsoft随后又在OLE中加入了许多其它的功能,因此让OCF并无法完整的支持OLE所有的功能,B无法不断的延后 Borrland C/C++的推出,因此在1994年未,Borland终于推出了决战的4.5版本。
C/C++开发工具的最后圣战
『虽然已经过去了许久的时间,但是我仍然忘不了那场最惨烈的战役!』 1994年未, 1995初Borland在痛定思痛之后,终于清除了Borland C/C++ 4.0中所有的问题,也开发出了自Borland C/C++ 3.1以来最稳定,最快速的Borland C/C++ 4.5的版本,准备和Microsoft决一死战。我还记得当时在书籍市场中许多有关 Borland C/C++和Microsoft C/C++的书籍都是使用十字军的封面,而Borland C/C++的系列丛书都是以蓝色为色系,而Microsoft的则是以红色为色系,仿佛两大军团终将决战似的。
C/C++四大天王决战一役的Borland主将-Borland C/++ 4.5 不过这次的战役不光是Borland的蓝军和Microsoft的红军相对抗,在Symantec的华丽军团经过了经军经武,Watcom的白色劲旅枕戈待旦,而且都从Microsoft License了MFC之后,蓝,红,花,白四大军团决战的日子终于到了。首先当 Symantec和Watcom分别取得了MFC之后,Symantec便推出了C/C++ 7.x的版本,和 Watcom C/C++混战了起来。两个使用系出同门的C/C++ Framework产品战得不亦乐乎,随后Borland C/C++ 4.5和Visual C/C++的新版本也加入了这场最重要的决战。但是让Symantec和Watcom C/C++大吃一惊的是Microsoft使用的MFC居然比它们的版本高出了一个版本(1.x对2.x),而且新版本的MFC包含了完整的OLE支持能力。而 Borland虽然也有OCF,但是仍然不敌新版MFC中的OLE能力。由于当时几乎所有的应用程序都需要支持OLE,但是却只有使用Visual C/C++最新的版本才能够开发完整 OLE能力的应用程序,因此不管OLE到底有没有用,反正先加入再说。因此市场上的情势很快的就发生了巨大的变化,几乎大部份的应用程序开发因为OLE的原因都选择使用Visual C/C++,Symantec和Watcom军团很快的就败阵下来。
至于Borland C/C++ 4.5虽然是一流的产品,如果没有OLE的因素,Visual C/C++新版本真的并没有比4.5好。虽然4.5也有OCF,但是在市场上只有Borland和Novell, WordPerfect选择使用OCF,在和Microsoft的Visual C/C++经过将近一年的缠斗之后,其它大部份的厂商都选择了Microsoft的MFC 2.x版,真是形势比人强。基本上 OCF的架构真的是个好东西,只是OCF无法完整的支持OLE,因为OLE的发展是掌握在 Microsoft手中,因此虽然OCF的架构良好,终究在功能上不及对手。Microsoft结合操作系统,开发工具和应用程序的手段真是无往不利。击败Lotus,Borland是如此,歼灭Netscape也是如此。
对于Symantec和Watcom来说,这场战役就如同『长平之战』,秦军坑杀40多万赵军一样。杀得Symantec和Watcom全军覆没,大败而归,至此Symantec弃受PC的C/C++ 开发工具市场,转而开始研发Java开发工具,进而在稍后推出了著名的Visual Cafe, 至于Eugene Wang则离开了Symantec,自此也离开了PC开发工具的领域。而Watcom则是更为凄惨,整个公司在DOS的市场逐渐式微,而Window平台的开发工具又大败而归,两头落空。不久之后Watcom便被新兴而起的Sybase并购,从此消失于竞争激烈的市场。
归纳Symantec和Watcom失败的原因是C/C++的Framework MFC掌握在Microsoft手中,在决战时刻Microsoft居然手握比Symantec和Watcom更新的MFC利器,而且在 Visual C/C++精进最佳化的技术并且改善整合发展环境之后,Symantec和Watcom诉求的重点功能完全被Microsoft封死。因此在产品,技术,市场和气势上完全不如对手的情形下,自然只能任人宰割了。
对于Borland而言,虽然没有像Symantec和Watcom那么溃不成军,但也是再次败下阵来。虽然平心而论Borland C/C++ 4.5的确是一个非常好的产品,无论在OWL,最佳化编译器,整合发展环境方面都有一流的表现,和Borland C/C++ 4.0比较起来简直有如脱胎换骨一般,到现在Borland C/C++ 4.5仍然是我最喜欢的版本之一。但是无奈当初Borland C/C++ 4.0给人挥之不去的负面印象,以及无法完整支持当时如火如荼的OLE技术,因此还是在决战之中败了下来。好在蓝色的Borland大军毕竟是训练有素的,虽然自此让Microsoft占据了超过50%的市场,成为C/C++开发工具的老大,但是Borland仍然掌握了超过30%的市场,稍做喘息,并且支撑Borland 在各重要战役失败之后维持公司的运作,等待Delphi的浴火重生,再重新出发。经过这一役之后,Microsoft终于清除了大部份的对手,对于Microsoft而言程序语言开发工具的战争已经结束,这个市场注定将被Microsoft占据大部份的市场。在 Microsoft手握操作系统,Office软件和开发工具三大获利市场之后,Microsoft也开始将矛头对准下两个竞争目标,关连数据库以及主从架构开发工具。在 Microsoft正式进军这两个市场之后,当然也展开了连番的好戏,尤其是在主从架构开发工具方面又开启了VB,PowerBuilder,Gupta/Centura和Delphi的惊天动地大会战。另外一个意外开启的战争则是Microsoft在1995年和Netscape的挑起的浏览器大战。
对于Borland而言,在C/C++最后一役之后,基本上我认为开发工具的圣战已然结束,Borland也正式开始走下坡。更严重的是我认为自此之后Borland不但丧失了 C/C++的江山,也失去了对于C/C++开发工具的创意,这是我感觉最遗憾的地方,到现在为止我仍然认为Borland尚未重拾当初在Borland C/C++ 3.0/3.1时代独领 C/C++创意风骚的精神。也许,也许,要看看C/C++ For Kylix或是C++ Builder 6 是否能够重新找回这个失去已久的精神,不要再让我失望了。
雄霸数年的C/C++的世界冠军-Borland C/C++ 3.1-永远的怀念
永不成气候的C/C++开发工具-IBM Visual C/C++
IBM在C/C++开发工具扮演的角色一直令人啼笑皆非,因为在C/C++编译器战争最激烈的时刻,IBM这个全球信息大厂却一直是缺席的。一直到了1995之后,C/C++编译器市场大势已定之后才慢慢的加入战局,推出VisualAge C++ 3.0,企图进攻此市场。但是此时市场早已由Microsoft的Visual C/C++称雄。IBM的VisualAge虽然以创新的可视化设计家能够定义对象之间的关系,但是在其它方面却乏善可陈,整个整合发展环境也缓慢如蜗牛,需要非常高文件的硬件配备才能够顺利的执行,和 Visual C/C++以及Borland C/C++等工具比较起来就像是恐龙一般,因此几乎没有在市场上引起任何的反应。
在IBM推出VisualAge 3.0并没有在PC的C/C++开发工具市场获得任何的明显成果之后,IBM又再次的集中了许多的资源,开发下一代3.5的版本,希望能够在此市场占有一定的比率。我知道IBM在VisualAge投注了大量的资源,因为从Beta版开始台湾的IBM便有人和我接触,希望我也在RUN!PC上为VisualAge 3.5写一些文章。因此在 1996年的6月我写了一篇C/C++编译器的比较文章,下面的资料便是数年前当时还在 Beta版的VisualAge 3.5和其它编译器的比较:
从上面的数据中可以看到其实VisualAge 3.5的表现还不错,只是对于当时还在使用AMD DX4-100/32M RAM机器的我来说,实在是跑不太动VisualAge 3.5。后来台湾 IBM负责VisualAge的产品经理请我吃饭,在此饭局中这位李经理同时请了贺元(后来为资迅人的总裁),薛晓岚(后来为资迅人的副总裁)以及其它两位作者,希望大家在计算机杂志中继续的为VisualAge 3.5写写东西,一起Promote此产品。在这个饭局中我是第一次和贺元,薛晓岚见面,当时贺元在中文PC Magazine有一技术专栏。记得当时我向这位李经理提起我的机器几乎无法跑VisualAge 3.5,他还立刻一口答应愿意借我一台当时IBM最高檔的PC,同时每写一篇VisualAge的文章,除了 RUN!PC原本的稿费之外,IBM会再付一字2.5元的稿费。乖乖,IBM真是大手笔,我算算当时我的产能,写一篇文章就能够赚2到3万,又有免费的最高档机器可用,真是太好康了。不过后来我还是觉得IBM在此市场可能不会深耕,在不愿意违背自己写作习惯和得罪Borland的顾虑下,最后还是没有答应。现在想想当时真是太笨了,放着好赚的稿费不赚,嘻。
IBM的C/C++开发工具之所以在市场无法成功是一是因为并不了解在此竞争激烈的市场中使用者到底要什么。另外一个原因则因为IBM并不以PC上的开发工具软件为重要的事业,即使无法竞争对于IBM来说也没有什么影响,不像Borland这可是生命之争。因此IBM只是兴起玩玩,随即放下。所以我觉得在PC平台使用IBM的工具是很危险的,因为IBM可能随时会放弃此市场。例如不知道现在VisualAge C/C++到底如何,是不是还在3.5或是4.0版,已经数年没有任何的维护和改善了。稍后IBM为了想在OS2和Window平台上推出能够和Microsoft相抗衡的Basic工具,因此秘密的研发了一个Object Basic。我也曾看过这个工具,但是Object Basic跑起来慢得跟乌龟一样.后来不知道是不是一直无法改善这个问题,因此IBM从没有推出此产品,现在IBM似乎只对Java有兴趣,VisualAge For Java还算发展的不错,希望不会有一天IBM对VisualAge For Java的态度会和VisuaAge For C/C++以及 Object Basic一样才好.
快速殒落的潜力之星-Sybase的C/C++ RAD工具Optima++
在1996年吧,Sybase并购了Watcom之后,终于推出了石破天惊的C/C++开发工具, Optima++。Optima++是当结合了Watcom的最佳化编译器以及类似Delphi的组件拖曳开发环境的第一个RAD C/C++开发工具,更棒的是Optima++的组件架构(类似 Delphi的VCL)完全是以纯正的C/C++程序代码撰写的。这可不得了,因为这代表 Optima++是一个融合了Visual C/C++和Delphi两大王者开发工具为一身的超级赛亚人工具。
在我知道这个工具,并且取得实际的使用之后,令我极为震惊。因为这个工具对于我这个使用了C/C++ 5,6年的人来说,是比Delphi还具有吸引力。因此在当年我立刻的在RUN!PC上介绍了此不可置信的工具。果然,Optima++很快在开始风卷市场,虽然没有立刻的占据很大的市场量,但是已经造成了一股气势,开始为Visual C/C++和Delphi带来了压力。
我记得当时台湾Sybase办的产品发表会也吸引了数百人与会,不可一世。在我的 RUN!PC文章出版之后,台湾的Sybase立刻和我连络。由当时的余协理和我见面,也是希望我继续为Optima++写文章,台湾Sybase也提供额外一字加2元稿费的待遇。但是我告诉余协理,Optima++ 1.0虽然很棒,但是仍然有一些臭虫,而且和中文环境相冲突,无法处理中文,需要立刻的解决问题才能够在台湾的市场成功。她答应我立刻的向总公司反应。我也老实的告诉她在问题没有解决之前我无法写一些不确实的东西。后来台湾Borland的总经理方先生也找我去询问有关Optima++的事情,我告诉他Optima++是好东西,但是中文有问题。如果中文问题能够解决,那么将对 Borland的产品有很大的影响,当时我还不知道Borland由于Optima++的影响,已经开始准备发展C++ Builder。
在1996年底左右吧,Optima++ 1.5终于进入Beta的阶段,但是在我拿到Beta版时仍然非常的失望,因为中文的问题仍然没有解决。后来台湾Sybase又找我去,这次和我见面的是台湾Sybase总经理郭俊男先生,以及Sybase的新加坡技术总裁,不过我忘记这位先生的名字了。我们见了面之后,我立刻的把Optima++ 1.5中文的问题以及许多的臭虫告诉他们,希望他们能够解决,如此Optima++ 1.5才能够在中文市场成功。可是出乎意我意料的是,他们似乎并不急着这些问题,反而询问我是否有意愿为Sybase工作,做PowerBuilder的产品经理。
也许是因为我为Delphi写了太多的东西,让PowerBuilder受了很大的影响,因此他们希望我到Sybase工作,以打击Delphi并且Promote PowerBuilder。当时他们提出的待遇条件实在是非常,非常的诱人,比我当时的薪水高出一倍左右(我当时在资策会工作)。不过由于我对PowerBuilder实在没有什么兴趣,因此我告诉他们如果是做Optima++的产品经理,那么我将会考虑并且接受。
没有想到Sybase的新加坡技术总裁告诉我Optima++在1.5推出之后就可能会停止,因为Sybase要把资源移去为当时愈来愈红的Java研发一个新的Java RAD开发工具,那就是后来的PowerJ。于是他问我如果不愿意做PowerBuilder的产品经理,那么是不是愿意做PowerJ的产品经理?由于当时我已经知道Borland开始了Open JBuilder的研发,而我对Open JBuilder的兴趣远大于PowerJ,因此并没有答应 Sybase。果然,在Optima++ 1.5推出之后,不但中文的问题没有解决,Sybase也没有继续的对Optima++研发下去。
一个如此有潜力的产品就这样消失了,真是令人遗憾,Optima++应该有很好的机会可以成功的,我相信如果当时Sybase知道C++ Builder后来的成果,可能就不会放弃Optima++了。而C/C++的RAD工具一直要到后来的C++ Builder来完成这个梦,又是Borland成功的进入这个工具市场。
C/C++的开发工具之争到此算是告一段落了,虽然后来Borland继续推出了 Borland C/C++ 5.0但是品质仍然不够好,市场反应也不佳,后来Borland终于在 Borland C/C++ 5.02之后宣布停止此条产品线的开发,Borland C/C++的光荣历史也就从此打止,真是令人不胜感叹,而Visual C/C++从此在C/C++开发工具市场中再也没有对手。不过没有竞争的市场的确会让人松懈的,后来的Visual C/C++进步的幅度愈来愈小,MFC也数年没有什么大进步,不像当时和Borland C/C++竞争时每一个版本都有大幅的改善。看来寡占的市场的确是不好的。