Rambler's Top100 Service Этот текст распечатан с домашней странички Андрея Калинина (www.kalinin.ru).
Оригинал статьи находится по этому адресу: http://www.kalinin.ru/programming/cpp/20_07_00.shtml


STLport 4.0

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.

©2000-2001 by Andrey L. Kalinin,
andrey@kalinin.ru