浊氏浅见:C++被误用之因

上周因工作的关心,有幸使用boost.spirit生成了一个简单的语法解析器。在此过程之中,深被C++的灵活扩展所折服。就我粗浅的认知,C++语言的灵活性在众多编程语言之中属于上乘。若是要论兼具灵活性与运行时效率,c++语言是我所见过语言中出色又出色的一个。

浊氏浅见:C++被误用之因_第1张图片
珍爱生命,远离VC6.0

可是,就是这样一门语言,在编程界得到的不仅仅是赞誉,还有不少的抱怨。实际工作之中,也会有一些小公司因为“效率”的顾及而去选择使用C++。结果是也许程序运行时的效率得到了微不足道的提高,可整体开发维护所付出的代价并不一定低。

那么,究竟是何种原因导致这样的结果呢?我对此进行了一点思考。

首先,为了证明C++是如此优秀与灵活。 请允许我用以下几行代码演示:


fstream file("C:\\1.txt");   

 std::string content(

     istreambuf_iterator(file),  (istreambuf_iterator())

);

以上的代码实现的是将文件中所有字符存入到一个字符串对象之中。这算是C++er工作之中常会遇到的需求。

这样的代码看上去很美,如果你在自己的项目工程里发现了这样一段代码,十有八九会觉得很惊喜。

然而简单的任务、行数较少的代码却不是所有入门C++程序员都能写出。这是问题的关键处。

C++灵活与优雅的前提是你对它足够了解,它由各式各样抽象的概念作为拼图的一部分,你要熟悉足够多的基础知识,才能对其得心应手。

就像是双截棍,你看李小龙在电影里耍的虎虎生风,自己真弄一个手上玩,很少有不砸到自己头的。美国洛杉矶警方因为李小龙风靡的原因,曾短暂时间内列装过双截棍作为警察们的近身武器。最后也是因为太难驾驭的原因放弃了。

就以上两行行代码,其便使用了泛型、iterator、stream_buff、functional object等诸多概念。这些东西,对于像我这样刚入门的程序员而言,单拎出来哪一个都不太简单,更别论组合起来玩出花样了。

然而这还仅仅是STL中对C++语言的使用。若是更进一步深入了Boost,了解一下Phoenix、Fushion、Spirit等库,你会更加的感叹C++原来可以这么“花”。

同样是读文件所有内容到字符串中,其它高级语言也通常只需要一两行代码。看似代码行数差不多,然而,其中所涉及的抽象概念却比C++要少的太多太多。

比如Python:

file = open("c:\\1.txt")

content = file.read()

print(content)

你看,open是内置函数,返回一个文件对象,一个read函数调用,返回包含所有内容的字符串。

C++同样两三行代码包含了太多抽象。相比之下,python要显得直观的多。

出于历史、运行时效率等诸多方面的原因。C++语言一直是程序员开发中的主流。

可C++语言本身的设计就有非常大的跨越性。你既可以用它写传统如C的过程式程序,也可以如C#一般,纯粹的简单的以类为中心,更可以模版与重载齐飞,一宏又一宏玩出花样。

你采用一种方式的C++写出的代码,可能习惯另一种方式的程序员会有如看天书,甚至会觉得是另一种语言。(boost.spirit 就是蒙着C++皮的另一种语言

C++被如此多误用的原因兴许在此。那么如何避免这个问题呢?

事实上,这个世界上存在着许多管理良好的C++工程典范。比如Chromium (Chrome)开源项目。

C++极其灵活的设计是为了给予我们无限的可能。实际工作中,我们的需求千奇百怪,因此灵活性是有必要的。更进一步,当我们确定下来时,我们需要的灵活性也许只是那么一两种,因此控制是有必要的。

使用C++,在享受其无与伦比的灵活性时,必然要学会去管理他的复杂(这个世间有太多事物都是有利有弊的)。而恰恰这一点被许多人所忽视(或者力不从心)。

以上是我个人的一点粗浅看法

化浊 2017-04-05

你可能感兴趣的:(浊氏浅见:C++被误用之因)