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

来源:互联网 发布:arashi smap地位知乎 编辑:程序博客网 时间:2024/05/09 22:51
第十二章    回到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--ACEACE是一个使用面向对象方式设计的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的极美结合:LokiLoki是一个愈来愈流行的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++标准函数库BoostBoost是除了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++开发工具不管在什么平台,都能够提供最完整和强劲的功能。如果Borland真能推出这种新一代的C/C++开发工具,那么这将是Borland从当初Borland C/C++3.0以来最具创意的产品,也是最值得程序员期待的C/C++工具。Borland是不是能够遵照承诺推出呢?也许答案在2003年便会揭晓了。--昨天是今天的历史,今天将成为明天的历史。 每当我们回顾历史的时候,总会发现两样东西                     嫣红的血,和晶莹的泪※ 来源:·飘渺水云间 freecity.cnzju.net·[FROM: pcq]