20.07.00
14 июля 2000 года наконец-то вышла новая версия библиотеки STLport 4.0. Для тех, кто еще не в курсе, что это такое, объясняю: это свободно распространяемая реализация стандартной библиотеки шаблонов для множества различных компиляторов и операционных систем. Кроме всего прочего, STLport дотсупен не только для современных компиляторов, более или менее удовлетворяющих стандарту языка, но и для некоторых старых компляторов, например Borland C++ 5.02 или MS Visual C++ 4.0.
Четвертая версия STLport отличается от предыдущей прежде всего тем, что теперь в нее входит полная поддержка потоков (ранее приходилось использовать потоки из библиотеки, поставляемой с конкретным компилятором). Реализация потоков взята из SGI (как, впрочем, и весь STLport). Вообще, STLport начал развиваться как попытка Бориса Фомичева перенести ивзестную библиотеку SGI STL на gcc и sun cc. Таким образом, с выходом четвертой версии, STLport стал полноценной библиотекой, соответствующей стандарту языка, во всяком случае, у него появились претензии на это.
Понятно, что использование одной и той же библиотеки
на разных платформах, это уже большой плюс --- потому
что никогда точно заранее не известно, что где и как
будет плохо себя вести. Можно лишь гарантировать, что
программа, при переносе с одного компилятора на другой,
все-таки будет себя плохо вести даже в том случае, если скомпилируется.
Использование одной библиотеки шаблонов очень сильно повышает
шансы на то, что не будет крепкого мата тогда, когда
программист увидит отсутствие в STL нового компилятора
какого-нибудь контейнера. Например, в g++-stl-3 нет
std::wstring. То есть, шаблон
std::basic_string есть, и std::string
является его инстанционированием на char,
но попытка подставить туда же wchar_t ни к чему
хорошему не приведет (в частности, из-за того, что в методе
c_str() есть замечательная строчка вида
return "").
Но и кроме единых исходных текстов у STLport есть еще несколько интересных возможностей и особенностей. Во-первых, это debug mode, при котором проверяются все условия, которые только возможны. Например, в этом режиме при попытке работать с неинициализированным итератором будет выдано соответствующее ругательство. Согласитесь, это удобно.
Во-вторых, в STLport есть несколько нестандартных контейнеров, таких
как hash_map, например. Зачем? Ну, потому что стандартный
map обычно реализован на сбалансированных деревьях
поиска (как более общий способ обеспечения быстрого поиска при разнородных данных),
и что делать в том случае, когда все-таки известна хорошая хеш-функция для
конкретных элементов,
не особенно понятно (ну, кроме того, что бы написать подобный
контейнер самостоятельно).
В третьих, поддержка многопоточности. То есть, STLport можно безопасно использовать в программах, у которых более одного потока выполнения. Это досталось STLport еще от SGI STL, в которой очень много внимания уделялось именно безопасности использования.
STLport является той библиотекой, которую я в последнее время стараюсь использовать где только можно. А для g++ на win32 так и вообще постоянно. Поэтому я был очень рад тому, что в 4-ой версии появилась поддержка mingw32.
Так что, если вдруг появились какие-то проблемы с STL, то можно попробовать взять STLport --- быть может, проблем станет поменьше.
| http://www.stlport.org | Официальный сайт библиотеки STLport. |
| http://www.sgi.com/Technology/ | Страничка библиотеки SGI STL. |