(原創) C++/CLI绝非垃圾语言!! (.NET) (C++/CLI) (C/C++)

C++/CLI和C#真的是『既生瑜,何生亮』,既然有了从C++进化而来的C#,为什么Microsoft还要弄个C++/CLI呢?C++/CLI真的是垃圾语言吗?

首先谈谈我接触C++/CLI的过程,我的背景是从VFP,VB6,ASP然后到C#,4年前接触C#后,由于C#精简且功能强大,使我认为C#是个完美的程序语言,也应该会是我最后一个程序语言。

这学期去修C++,之所以想修C++,并不是想用C++开发程序,只因为C#和Java都师承C++,使C++剖有『天下武功出少林』的架势,所以想认识一下这个语言,此外,有很多经典名著都用C++撰写,如Gof的Design Pattern,为了想看懂这些经典,所以使我想认识C++。修了之后,这学期的作业,无论是Computer Vision,Linux Programming,SystemC,我都是用C++写,所以也累积了一些心得。

侯捷说,C++是个『难学易用』的语言,完全正确,C++非常复杂,但却非常的强大,很像高中解物理题目时,若用最简单的想法去解题,通常要解很多的数学表达式,若用观念解题,数学表达式通常只要一两行,但要理解该观念却很难。C++就类似这样,只要能了解复杂的观念后,C++的程序非常精简,别的语言要写三四十行,C++可能只要两三行就解决了,所以我现在能理解为什么很多程序员一旦用了C++,就不再改用其它语言了,C++的威力的确让人无法忘怀。

学了C++后,事实上最吸引我的,并不是OOP,而是Generic Programming和STL,GP让我发现除了OOP之外,还有另外一种程序开发方式,而且非常强大,STL则让我从Data Structure和Algorithm解脱,一套Algorithm可以泛用于众多Container和Adapter,让我大大降低学习曲线,而这两部份也是C#所没有的,或许你会说,C# 2.0也有GP啊,.NET Framework也有Container啊,是没错,但GP在C#和Java都只是刚开始,请问有哪几本书真正完整讲到C#和Java的GP?有也是几页而已,要学GP,还是要回到C++,GP在C++已经形之有年,也是这几年C++的重心,重点是Bible级的书已经有了,如Modern C++ Design,C++ Templates Complete Guide等。.NET Framework是有System.Collections没错,但缺乏如STL的Generic Algorithm,因为.NET Framework是OOP的产物,不像STL是GP下的产物。这两点也是我留在C++最重要的原因。

C++有什么缺点吗?我觉得有两个,C++制定进度非常缓慢,一定就是10几年,从1998年之后,C++快10年没改过了,相对于Java、C#等语言快速进步,C++的确该加紧脚步更新。另外就是基于BS认为程序语言不应该绑Library,不应该绑平台的前提,C++标准的Library只有两套,C的Standard Library和STL,其它如GUI,Database,XML,Regular Expression等就没有提供,虽然boost提供了一些功能,且能成为下一代C++ Library的标准,但Library对C++仍是一个大问题。

我之前Computer Vision的作业是用C# + GDI+写,由于学了C++和STL,很想藉此『练兵』,但苦于不知如何用C++读jpg檔,所以才想到C++/CLI既然可以用.NET Framework,那何不改用C++/CLI + GDI+写作业呢?后来发现,C++/CLI不仅完全兼容ISO C++写法,且能同时使用STL和.NET Framework,并且对ISO C++增加了一些语法,如enum class和for each等,这些好用的语法是从VB『借』来的,C#和Java早将加入了这些好用的语法了。所以C++/CLI同时解决了C++语法改进以及Library的问题,加上了.NET Framework这个强力的Library绝对是如虎添翼。假如你看过Visual C++ team成员名单,就会发现两位大师,一位是C++ Primer作者Stanley B. Lippman,一位是Exceptional C++作者Herb Sutter,这两位大师都加入了C++/CLI的开发工作,就可发现Micorsoft是如何重视C++/CLI了。

根据不同背景,我有几点建议:
1.原C#程序员:假如你想体验STL和GP的威力,一定要到C++/CLI来看看,这些都是C#没有的。

2.原C++程序员:很羡慕QT和BCB写GUI时精简的程序吗?那就一定要用C++/CLI体验.NET Framwok的Windows Form写法,完全可视化,完全Event Driven,程序非常漂亮。想要一套标准的Library有GUI,Database,XML,Regular Expression吗?.NET Framework都有提供。

你还认为C++/CLI是垃圾语言吗?一个能同时驾驭OOP、GP、STL、.NET Framework的超级语言还是垃圾吗?

你可能感兴趣的:(c/c++)