第十二章 回到C$C++的王国

"让我们重返荣耀之都吧!"

当年Windows平台C/C++开发工具四大天王一战,在Microsoft取得了市场的主导力量
之后,C/C++开发工具的市场和竞争反而缓慢了下来,Windows上C/C++开发工具的进
步也开始牛步化。VC++一连两三个版本的进度幅度并不大,除了稍后推出的ATL还有
新意和技术革新,VC++编译器除了在C/C++语言上更趋近于标准之外,MFC本身几乎已
经没有什么大的进步了。在Watcom和Symantec退出市场之后,VC++也顺利地接受了
Watcom和Symantec的市场。而Borland C/C++虽然也损失了大量的市场,并且失去了
C/C++的王座,但是在数年后,Borland推出C/C++Builder,以C/C++ RAD工具、以及
更符合ANSI C/C++标准和VC++进行市场的区隔,也慢慢地收复了一些失地。虽然
Borland C/C++工具系列已经无法像以前一样是市场第一的C/C++开发工具,但是
Borland在Windows的C/C++开发工具市场仍然占有30%强的市场份额。

C/C++开发工具在C/C++ Framework一战之后,开发的重点却似乎模糊了起来。由于VC
++没有强劲的竞争,因此整个的发展速度缓慢下来。不过C/C++技术在C/C++语言、函
数库(Library)和通用Framework方面却快速地如雨后春笋般兴起。特别是在C/C++语
言的标准化更为完善、以及Template的功能被C++ Standards Committee接受而且被
广泛地由C/C++编译器支持之后,各种支持和使用Template的Framework、C/C++函数
库也快速地占据了C/C++开发者的心灵,成为有力的程序技巧之一。在Java日益兴盛、
开始威胁C/C++的市场时,反而激发了C/C++语言前所未有的高度发展。不过,目前
C/C++开发工具以及C/C++编译器是否跟上了C/C++这么快速的发展脚步呢?在本章继
续讨论之前,也许应该让我们先看看目前C/C++市场的现况。


日不落帝国

曾几何时,C/C++是征服全世界的语言之一。在数年前C/C++语言全盛的时期,我记得
几乎所有的应用系统都选择使用C/C++来编写,如从系统程序、公用程序、软件包到
项目开发,因此也造就了C/C++开发工具横扫软件销售市场的现象。但是随着RAD工具
和Java的逐渐受欢迎,让C/C++开始从许多的市场撤退。特别是当Java兴起之后便快
速取代了以往C/C++在跨平台语言的主导角色,让C/C++语言在这个市场受到Java最大
的威胁。不过,C/C++仍然在许多方面的应用不可否认地具有绝对的优势,特别是在
需要高度执行效率的应用系统中,例如驱动程序和低阶的系统程序等。那么C/C++目
前的市场到底有多少?有没有像两、三年前许多信息机构预测的那样,Java将会大幅
抢走C/C++的市场、并且吸引大量的C/C++程序员呢?让我们以实际的数据来看看目前
的状态。

右图是全世界专业信息机构对于C/C++开发工具市场规模和使用状况的调查结果。从
这个结果图形中我们可以得知几个非常重要的C/C++信息:

首先请读者注意的是,就整体来说C/C++开发工具的市场的确是处于小幅的下降趋势
之中,根据Gartner Group的调查,C/C++市场是以5%的幅度下降,而根据Evans Data
Survey的调查,C/C++市场则是以3%的幅度下降。不过稍后我们会说明,C/C++开发
工具是在哪些平台和应用中产生变化。

另外一个值得注意的地方,是C/C++语言主要是用于三个应用领域之中,分别是客户
端、伺服端和维护现有的应用程序。从图中我们也可以发现C/C++语言被使用的转变
状态,在工业应用方面,C/C++开发工具仍然有很大的成长,这当然是因为C/C++语言
被广泛用于驱动程序的开发,例如显示卡驱动程序、网卡驱动程序等。此外C/C++语
言也被用于移动设备的开发,例如Nokia为了和Microsoft的Smart Phone对抗而推出
的Symbian手机系统。当然,在操作系统、系统程序和低阶核心应用方面C/C++语言仍
然有着不可取代的地位。

但是,C/C++在其他方面的应用的确是在下降之中,特别是在企业的应用系统方面。
例如目前在大型项目、软件包、MIS和企业内部的应用系统中,使用C/C++语言的比例
的确在下降。其中主要的原因是C/C++语言本身的难度较高,因此生产力也不如其他
语言和开发工具。加上较易使用的RAD工具和Java出现之后,C/C++语言在这些领域的
影响力是大不如前的。这个现象也非常契合台湾地区目前的状况,在前几年C/C++兴
盛的阶段,几乎大部分的软件包厂商和SI以及系统厂商的确都是以C/C++开发工具为
第一选择。不过由于C/C++需要的人力素质较高,而且生产力无法大幅提高,因此在
目前软件包和项目的开发大多都由Delphi、VB、PowerBuilder以及Java所瓜分。

至于C/C++开发工具使用的操作系统分配状况,则可以由右面的调查结果来说明。

从图中我们可以发现,UNIX/Linux操作系统平台仍然是占了最大的使用平台,这当然
是由于UNIX/Lmux本身就是使用C/C++语言开发的。而且在UNIX/Linux平台我们可以发
现,C/C++开发工具的规模仍然在成长,可达成10%左右的年成长幅度。由此可知,
虽然Java现在已经入侵UNIX/Linux平台,但是对于C/C++的影响仍然不太显著。

C/C++开发工具第二个最大的平台就是Windows平台了,虽然现在Windows平台是开发
工具百花齐放的状态,但是不可否认的是,C/C++仍然是Windows最重要的数个语言之
一,因为122 Million到137 Million的市场规模是相当大的。而Windows平台的C/C++
开发工具的成长虽然在为数众多的开发工具瓜分之下,仍可达到12%的成长率。这代
表C/C++语言即使是在Java强力竞争之下仍然拥有一定的成长量。由于Windows平台下
的C/C++和Java开发工具是处于同时成长的情形,因此,这可能表示在Windows平台下
许多的程序员应该是同时使用了C/C++和Java开发工具。

至于其他平台的C/C++开发工具则呈现下降的趋势,而且是处于快速下降的情形,这
也可以解释为什么Java在Mainframe和OS/400等大型专属平台成长快速的情形。由此
可见,在这些专属市场中C/C++语言的确是受到Java很大的影响。

除了C/C++语言本身之外,再让我们观察一下目前主流语言应用的现况,通过观察不
同语言之间势力消长的情况,我们也可以了解其他语言对于C/C++语言的影响。右图
即显示了信息机构对于目前几个主流语言之间成长和下降的预估。

从图中我们可以看到,几乎所有的传统语言例如VB、C/C++和COBOL等都呈现下滑的趋
势,相同的现象当然也在第2级的主流语言例如Object Pascal和PowerBuilder等中看
到,但是新一代的虚拟语言却呈现了对比的情形而大幅上升和成长,表示使用这些新
语言的程序员人口正在快速的兴起之中,例如SUN的Java和Microsoft的C#,而Java快
速兴起也可以解释为什么Borland的JBuilder现在已经是Borland最大收入来源的开发
工具。

看完了C/C++整体市场的趋势之后,C/C++语言目前在程序员人口中使用的情形到底是
如何呢?下图是2002年针对美国程序员调查的结果,从这个结果中我们已经可以看到,
在所有调查的人数中使用C/C++的程序员占了45.6%的比率,但是只使用C/C++单一语
言的比率只有3%,可见,现在大部分的C/C++程序员应该已经开始同时使用两种以上
的语言。

而第二幅图则是针对美国程序员对于未来计划使用C/C++语言的调查结果,从图中可
以证明前面图形和分析的结果,C/C++语言的确是以3%到5%的速度在衰退之中,也
有愈来愈多的C/C++程序员开始使用多种语言来进行开发的工作,当然C/C++程序员选
择的最多语言就是Java和C#了。

在"令人焦虑的时代"一章中我们已经讨论了Java语言目前使用的状况以及未来的发展。
从其中我们了解了Java虽然快速地兴盛,但是也看到了Java似乎已经在美国进入成熟
期,开始出现稳定的状态并且有小幅的衰退。既然C/C++和Java这两个拥有共同基因
的语言都处于稳定或是小幅衰退的情况,那么流失的程序员到底到哪里去了呢?当然
答案很明显,这些流失的程序员是转到拥有相同基因的C#语言阵营了。

虽然Microsoft的Visual Studio.NET是在2002年的2月才正式推出,但是C#的编译器
和相关的工具早已在Beta阶段便为许多程序员所使用,因此在2002年便已经吸引了一
些程序员使用,而这些第1波使用C#的程序师大都是从C/C++和Java语言转换跑道而来
的。右图是C#语言在2002年使用的状况调查,C#在不到1年的时间便吸引了美国14.6%
的程序员人口使用是相当惊人的表现。

那么未来呢?C#还能够稳健地成长吗?因为唯有稳健成长的语言才能够有机会成为主
流的语言。右图便是对于2003年C#语言使用状况的评估,从这些数据我们可以看到,
C#语言果然将以稳健的脚步成长,每年以将近10%的速度发展,而C#如果持续地照这
样的速度发展下去,那么C#将在4年之内达成Java花了七八年才达成的现状。当然,
C#这种成长趋势也暗示了Microsoft的.NET将在不久的时间内对于Java平台产生重大
的影响。

对于C/C++、Java和C#这三个拥有类似基因的语言,如果我们把它们的发展放在一起
比较的话,会发现目前C/C++和Java语言正处于激烈竞争的状态。但是C/C++和Java千
万不可忽视C#这个后起之秀,C#正以旺盛的企图快速地向两位老大哥挑战之中,以竞
逐在程序员心中主流的地位。

从上面所有的分析中,我们可以知道使用C/C++语言的人数虽然的确是在下降之中,
但是幅度并不大,这代表C/C++语言有着非常稳定的支持力量,这当然也是因为在许
多的应用中C/C十十语言拥有不可取代的优势,更何况C/C++开发工具的市场仍然拥有
将近600 Million美金的规模。这实在是一个非常大的数字,以Borland来比较的话,
Borland全年所有的软件营收不过是240 Million左右,可见C/C++市场的潜在力量,
对于Borland来说这是绝对不可放弃的开发工具市场。

相对于欧洲的发展模型和美国非常接近,另外一个全世界最大的程序员市场--中国大
陆,并没有在这次的调查中显示出开发工具的使用状态,也许未来应该有全球软件语
言的调查评估。不过从各种迹象显示,大陆的市场目前是以C/C++和Ddphi分占程序员
使用的大宗,而Java则在快速的成长之中。这和台湾地区有一点不同,那就是在台湾
地区是以VB、Delphi和C/C++为主要的语言力量,而Java则是几乎进入成熟的阶段,
开始和VB、Ddphi以及C/C++分庭抗礼。因此对于Borland来说,不管是在中国大陆和
台湾地区,C/C++开发工具都是很重要的,所以Bodand的RAD部门宣称中国大陆的市场
是Borland RAD部门最后的圣地,因为在中国大陆Borland的C++Builder、Delphi、
Kylix和未来的C/C++开发工具以及.NET的开发工具都拥有全世界最大成长潜力的机会。


蓬勃发展的新兴C/C++力量

其实不管是什么程序语言,在面对竞争日益激烈的情势中,程序语言的开发厂商和爱
好者莫不卯足全力地捍卫和鼓吹其支持的程序语言,对于C/C++的发展厂商和爱好者
来说也是一样的情形。更有趣的是,虽然使用C/C++语言最大的平台是UNIX/Linux,
但是Windows上的C/C++开发工具反而是竞争得最为激烈、进步幅度也是最大的平台。

对于Borland来说,在Windows平台上是市场排名第2的C/C++开发工具厂商,而且C++
Builder这条产品线对于Borland来说,占据了开发工具第3位的收入来源,对于Borland
有着重要的贡献,Borland不但不可能放弃,反而更要想办法增加市场规模。在C++
Builder推出并且从Microsoft抢回了部分的市场份额之后,Borland计划推出更新、
更强劲的C/C++开发工具。Borland也在BorCon 2002中透露了一些有关未来C/C++开发
工具的计划。不过在我们讨论C/C++开发工具的未来之前,先让我们看看目前在C/C++
技术方面重要的发展。

首先在C/C++编译器方面Windows平台上厂商的表现实在是差强人意,不管是Borland
或是Microsoft都没有完全实现出符合ANSI C/C++标准的C/C++编译器,这和数年前四
大C/C++编译器厂商彼此竞争激烈、快速进步的情况来说实在是令人不满意,这也可
见失去竞争的市场其进步缓慢的现状。不过Borland已经宣称在发展下一代最佳化的
C/C++编译器,不但能够产生更好的最佳化C/C++编译机器码,而且也将符合ANSI C/
C++标准。相对于Borland在C/C++方面的大动作,Microsoft反而显得比较沉寂,除了
把VC++移植到.NET上的VC.NET之外似乎没有什么大的改善。当然,Borland是不是能
够真地推出宣称的C/C++编译技术还要看在2003年的表现。另外,在C/C++连接器(Linker
)
方面Borland也宣称将要搭配新一代的C/C++编译器推出新一代的C/C++连接器,提供
更聪明、更紧密的最终机器码。

除了编译器、连接器和C/C++开发工具之外,另外一股发展快速的C/C++势力便是各种
C/C++的开放函数库和Framework了。许多的C/C++函数库和Framework由于品质良好而
且采用开放源码的设计,因此也快速被许多的C/C++程序员使用而盛行于C/C++程序员
的领域中,除了早为大多数C/C++程序员广泛使用而享大名的STL之外,其中最著名的
当属ACE、Boost和Loki这三个C/C++函数库和Framework了。

C/C++的王牌Framework--ACE

ACE是一个使用面向对象方式设计的C/C++Framework,主要是提供开发通讯应用软件
使用的核心同步处理(concurrency)和分布式设计模式(design patterns)的功能。ACE
提供了C++的封装类别(wrapper)和组件,让程序员在许多UNIX操作系统、Win32平台
和实时操作系统(Realtime Operation System)平台开发高效率的系统服务和应用程
序。ACE Framework提供了将近150000行的程序代码以及450个左右的类。

ACE为了分隔Framework的复杂度,采用了层次的架构来设计,下图就是ACE Framework
的设计架构图。在ACE Framework的低阶层次中封装了OS的Adapter以及C++的封装类
别,以增加ACE Framework在不同平台之间的移植性。而在ACE Framework的高阶层次
中,则提供了延伸低阶C++封装类别的能力,以提供可重复使用的分布式组件以及分
布式计算中间件。由此可知,ACEFramework的目的是提供一个跨平台的中间件
Framework,以便让C/C++的程序员在各种平台中开发高效率的分布式计算应用系统。

由于ACE Framework的流行以及广泛被使用,因此已经被许多C/C++程序员视为主流的
C/C++Framework。目前也有许多的应用程序使用ACE Framework成功的开发出高品质
的分布式软件。例如下图的ACE ORB便是使用ACE Framework实现重要的CORBA规格的
实时ORB引擎:TAO。TAO由于使用了ACE Framework,因此也属于一个免费的ORB引擎,
从遵照OMG规格的CORBA都能够使用ACE Framework来实现这一点,就可以了解ACE
Framework的实用性。读者可以在www.cs.wustl.edu/~schmidt/TAO.html找到TAO的数
据。

另外一个使用ACE Framework实现的著名软件就是JAWS了。JAWS是一个高效率的
Adaptive Web Server,下图是JAWS提供的复杂,强大的功能。读者也可以在
www.cs.wustl.edu/~jxh/research/找到JAWS的数据。

由于目前ACE Framework被使用得愈来愈广泛,所以许多C/C++编译器也开始支持ACE
Framework。因此新一代的C/C++开发工具必须能够支持ACE Framework,最好还能够
提供整合ACE Framework的功能,直接在C/C++开发工具内部支持ACE Framework。

Template和Design Pattern的极美结合:Loki

Loki是一个愈来愈流行的C/C++类函数库,它是由Andrei Alexandrescu先生开发的,
而Andrei也是"Modern C++ Design"一书的作者。事实上,Loki就是因为"Modern C++
Design"一书的介绍才逐渐被许多C/C++程序员使用。

Loki是结合了Design Pattern、Generic Programming和C++语言集成的C++函数库,
充分展示了C++语言的优美和威力,并且提供了C++语言使用新的应用。由于Loki的优
美和盛行,因此现在许多C/C++编译器和开发工具都以支持Loki为重要的功能之一。

最新的C/C++标准函数库Boost

Boost是除了ACE和Loki外另一个快速崛起的C/C++标准函数库。目前Boost已经被C/C++
Standard's Committee提议成为C/C++标准的核心函数库,由此可见Boost的重要性。

目前Boost同样被许多C/C++编译器支持。未来的C/C++开发工具应该在核心部分就会
支持Boost。未来的C/C++开发工具最应该采用的开放架构应该是在核心部分支持Boost
和Loki,并且以开放的Adapter来整合ACE Framework。

著名的C/C++函数库和Framework的开发厂商Rogue Wave

数年前使用C/C++开发工具的程序员可能都知道Rogue Wave这家软件厂商,因为Rogue
Wave就是以提供各种专业的C/C++函数库和Framework著名的。在数年前Borland和许
多的C/C++开发工具厂商也都向Rogue Wave授权使用Rogue Wave的C/C++函数库。我记
得,数年前在使用C/C++语言时最喜欢使用的函数库也是Rogue Wave出品的产品。当
年在C/C++User's Journal、C/C++Report等著名的杂志中,Rogue Wave的产品也是经
常可见的。不过随着C/C++的盛况不再,Rogue Wave的声势似乎也不如前了,许多当
时Rogue Wave著名的C/C++函数库也随着消失,在前一阵子甚至传出Borland可能并购
Rogue Wave的传言。

但是随着C/C++语言最近的重振声威,Rogue Wave似乎也开始有了比较积极的动作,
也推出了许多新的C/C++函数库和Framework,有兴趣的读者可到Rogue Wave的网站上
看看。

不过,Rogue Wave的发展史也见证了C/C+4-语言使用的演变。以前Rogue Wave是以提
供高品质的C/C++函数库著名,例如Rogue Wave曾推出过封装各种数据类型运算方法
的C/C++函数库,但是在STL等开放C/C++函数库流行之后,Rogue Wave的产品自然走
入了历史。另外,Rogue Wave也曾推出过封装ODBC的C/C++类函数库,以提供C/C++程
序员在各种平台使用ODBC存取关系数据库的能力,但是随着0DBC成为历史,Rogue Wave
这样的产品自然也开始消失了。

因此,如何为一个已经流行超过10年的语言不断注入新的创意、技术和应用,是每一
个C/C++开发厂商都必须面对的事情。


C/C++开发工具的未来

那么C/C++开发工具的未来是什么?难道在四大C/C++编译器厂商大战之后C/C++开发
工具的市场便没有创新了吗?除了Microsoft的VC.NET和Borland的C++Builder之外,
Windows C/C++开发工具市场就此沉寂了吗?

当然不,在前面我们看到了C/C++函数库和Framework的蓬勃发展,相较于目前C/C++
开发工具厂商来说是有活力得多了。因此,未来的C/C++开发工具必须能够跟上最新
的C/C++标准以及各种颇具威力的C/C++ Framework。未来的C/C++开发工具除了本身
提供的编译器、集成开发环境和Framework之外,必须采用新的架构设计以提供C/C++
程序员整合Third-Party或是Open Source的C/C++ Framework,而无需C/C++程序员辛
苦地自己修改这些C/C++ Framework才能够使用。另外,未来的C/C++开发工具必须提
供类似Java的高移植性,让C/C++程序员能够在各种平台开发各种C/C++应用系统。除
了一般的应用程序之外,在移动设备、低阶系统程序等都必须能够胜任,而不像现在
的Windows C/C++开发工具一样,各在不同的应用中占有优势。

目前,Microsoft的VC++在窗口平台上的C/C++开发工具发展方向已经非常明显,那就
是维持原生窗口C/C++开发工具的现状并且往VC.NET发展。Borland呢?除了Borland
C++Builder 6.0之外,未来Borland的C/C++开发工具将提供什么新的发展呢?

在前一阵子Borland已经宣布了未来仍将投入大量的资源研发新一代的C/C++开发工具,
将采用下图的架构提供给程序员最具整合威力的C/C++开发工具。

从上图中的架构,我们已经可以预知未来的Borland C/C++开发工具将允许程序员高
度整合最流行的C/C++ Framework,例如前面讨论的ACE、Boost和Loki等。这是非常
重要的,因为未来的Borland C/C++开发工具将提供跨平台/移动设备的能力,而这些
C/C++ Framework也大都提供跨平台的功能。如果Borland能够提供完整的整合能力,
那么这代表未来的Borland C/C++开发工具不管在什么平台,都能够提供最完整和强
劲的功能。

C/C++3.0以来最具创意的产品,也是最值得程序员期待的C/C++工具。Borland是不
是能够遵照承诺推出呢?也许答案在2003年便会揭晓了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值