STL三大著名版本的趣闻

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,一堆你用不完的好东西,什么内存池、持久化都不在话下。有钱还是能让他推推磨的。

你可能感兴趣的:(C++,STL)