IT技术博客大学习 共学习 共进步

小趣闻:STL的三个版本

Vimer 2009-11-26 22:17:33 浏览 3,785 次

    STL比较出名的有如下三个:

    一个是SGI STL。STL之父离开HP之后就去了SGI(当然不是去搞侏罗纪公园),然后和Matt Austern这些STL大牛一起搞了SGI STL。SGI STL技术比较新,很规范(但是代码读起来未必好懂) 像concept checking这些技术用的不少,boost graph library的想法也是在这其中产生的。后来有人觉得sgi stl很好,兼容性不够(其实现在已经很不错了),就弄了个stlport项目,顺便提供咨询服务赚点小钱。

    一个是RougeWave STL,是Borland C++ Builder 5.0及以前版本采用的STL实现(6.0以后改用stlport)。RougeWave公司在C++程序库领域应该说是鼎鼎大名,在C++标准化过程中出力甚多(比如IOStream)。不过这个STL版本似乎老了点,更新不太勤快,关键是贵(RougeWave 的东西一向如此),所以被Borland一脚踢了。

    一个是Visual C++里的STL,作者P.J. Plauger,所以一般也说pj stl。其实这份STL是他公司的产品(他这个公司一共也就3个人,所以人均GDP一定很高),不过他跟MS的关系实在是好得有点古怪,所以虽然Plauger水平极高,很多人却看他不惯。当然,据说Plauger除了钱以外也看不惯其他东西,所以Plauger虽然称不上声名狼藉,也没有什么好名声。因为VC 6.0在模板处理方面过于白痴(7.0/7.1以后就没事了,毕竟Lippman出马),所以pj stl实在写得辛苦,也难为Plauger了(当然有money作动力,恐怕也无所谓“难为”)。

    三份STL,sgi stl应该说是中规中矩,rougewave没 什么好印象,pj stl效率好。说到符合标准的程度,都不怎么样。sgi stl 的allocator是比较特别的,另外在windows下的stlport对wchar_t和locale这些支持极烂。rougewave stl和pj stl对wchar_t支持还行,但是locale支持部分偶尔有些小bug,乱跳异常。 sgi stl和pj stl都实现了hash这些非标准组件(反正肯定会是标准的),但是接口不同。据说标准委员会更偏向pj stl的。另外sgi stl是彻底的free,但是pj stl不是。如果你跟Plauger多些money,他会给你几百个allocator,一堆你用不完的好东西,什么内存池、持久化都不在话下。有钱还是能让他推推磨的。

建议继续学习

  1. 关于使用STL的红黑树map还是hashmap的问题 (阅读 8,741)
  2. 萃取(traits)编程技术的介绍和应用 (阅读 6,365)
  3. 一个简单的stl中string的split函数 (阅读 4,264)
  4. STL笔记之二叉查找树 (阅读 3,984)
  5. 倒置字符串中的单词 (阅读 3,485)
  6. STL笔记之hashtable (阅读 3,384)
  7. 闲谈STL容器之size()成员函数 (阅读 3,182)
  8. STL可能的误用-find_first_of和erase (阅读 2,802)
  9. 不得不留意的STL string重载函数和隐式类型转换 (阅读 2,142)