读《STL 源码剖析》及感悟

2017-03-21

  买这本书有一段时间了,断断续续的,我对这方面的兴趣也不是特别大,很早之前看过了《深入实践C++ 模板编程》、《深入理解C++11 :C++11 新特性解析与应用》,而且,经过这两年的工作时间使用C++,我也认识到,一些技术层面的问题并不是那么重要,研究好了C++的机制和trick,对于项目而言帮助也不是最关键的。所以,我的关注重点还是停留在去了解了C++程序的高效性同时保有了强大的表述能力,不得不佩服C++委员会。
  我忘记了在哪里看到过这样的一句评论:STL是给库的作者准备的,普通的开发者只需要使用即可。以我的经验,我深深的认可了这个意见。倒不是说上层开发者就不去研究STL,我只是觉得,对STL的研究和学习,不应该成为上层开发者的主要目标和引以为傲的能力。也不是职业生涯中的都不需要研究STL了。我所说的不建议深入,是指工作时间不长,没有写底层lib需求,甚至连上层业务如何实现都还没有摸清的人,应该把关注的重点放在程序的功能究竟如何才能实现,更好更稳定的运行,而不是给一个功能设计加上了诸多限制条件,以试图优化代码让程序跑的更快。一些人批评STL慢,当然,它当然是慢的,甚至都没有tbb的多线程安全的容器快,但是,你使用了tbb之后就懵逼了,这东西完全无法调试啊。我认为,不应该是你觉得STL的一些容器慢了或者浪费内存了,就试图写一个类似的模板容器出来,试图证明自己比STL的诸多作者更加牛逼,而是意识到STL的通用性和必然的限制,简单的绕过限制和避免最坏情形即可。从这个面上讲,也是有必要去学习STL的。总结一些,学习一个东西并不一定是为了自己就能够写出一个更加牛逼的,大多数情况下,你也是做不到的。
 说当下吧,这两年,我们的CAD程序都是使用原生的C++开发的,Qt做界面,算法部分重点在物理引擎和渲染引擎。物理引擎所处理的业务简单,无需复杂抽象,简单的几个类就可以了,一些算法部分其实都是C函数,class只是作为一个namespace来用而已。 渲染部分,都是用shader做,和C++也没有什么关系,大多是数据的封装而已,根本无需复杂的C++特性。CAD部分是有很多业务需要C++来做业务抽象,我们CAD团队成员都有深厚的CAD从业经验,多浙大等名校毕业,硕士研究方向也是符合,但是,早期的设计过分强调性能和某些指标,导致现在的代码凌乱(再次强调:创业阶段,特别是带有创新技术的项目,最重要的事情是把东西做出来,做出来可运行的东西就是最牛逼的),C++模版之类的技术都不大用的上。因为模版的表述能力比类更加高级,如果连面向对象都没有做好,何谈更加高级的抽象。也不要总是把C比C++运行的更快挂在嘴上,这显得你没有技术深度了。一个好的程序员并不会关心C++比Java程序运行的更快,因为,这两个东西基本上没有什么可比性。Android NDK刚出来的时候,就遇到有人挺推崇这个的,我看了一眼就不建议研究,这根本与大方向不符,这点性能提升也没什么用途,浪费的是更多工程上的时间。以上是我的一点总结。希望引起看到的人一点思考。

老笔记重发

  P.S. 我对语言研究还是保有很大期望的,虽然,现在因为工作职责的原因,没有时间来做这方面的工作。计算机编程语言研究,本质上是数学集合论的研究。《形式语言,自动机理论与计算导论》中第一章就指出“Languages and problems are really the same thing"。我们现在使用主流的编程语言如Java、C++实现各种数学模型来做机器学习和人工只能的程序,数学模型就是算法,这几年也是因为数学模型的改变才是程序做到更厉害的工作。日本曾花费巨大的搞了第五代语言的研究,结果也并没有什么产出。可见,编程语言研究上的难度。还是希望能有更好的研究结果出现吧。

  

 

 

如果有任何意见,欢迎留言讨论。


[ 主页 ]
COMMENTS
POST A COMMENT

(optional)



(optional)