Re[2]: В чём развод STL?
От: Аноним  
Дата: 29.05.06 04:38
Оценка:
Здравствуйте, Mr. None, Вы писали:

MN>Здравствуйте, Doc, Вы писали:


Doc>>Здравствуйте, Mr. None, Вы писали:


MN>>>деле фигня и где-то их на самом деле разводят (сам такой же — каюсь) .


Doc>>А расскажите в чем развод STL? Очень уж интересно


MN>Н-да... Не думал, что моя шутка породит такую дискуссию... В пору уже отделять в "Священные войны".

MN>А тепрь конкретика, никакую реентерабельность или потоко-безопасность я не имел в виду. Это вообще отдельная песня и не многие библиотеки, обладают 3-мя качествами одновременно: потоко-безопасность, универсальность и эффективность. Чем-то одним приходится жертвовать...
MN>Stl удобен, для тех кто его знает и умеет им пользоваться, а это очень и очень не просто. Не мне судить, но как человек, знающий его относительно хорошо (скажем так на 4-ку, думаю даже с плюсом — скромность не позволяет выставить оценку выше ), могу сказать: некоторые вещи можно было сделать по проще и по понятнее. Это касается и нюансов использования, и интерфейсов, и реализации.

MN>1. Нюансы использования.

MN>Вот последнее, в обсуждение чего я принимал участие:
MN>
MN>std::vector<std::string> myVec;
MN>myVec.push_back("QQQQQQ");
MN>// ещё много-много push_back`ов.
MN>myVec.clear(); // (1)
MN>

MN>Вы надеетесь, что в точке (1) память из-под myVec освободится? Вы очень наивны, если так думаете. А чтобы узнать как её гарантировано освободить на любой реализации придётся либо проштудировать стандарт, либо искать на форуме, либо прочитать ещё одну книжку (например С. Мейерса "Эффективное использование C++"). Но и этого не достаточно: чтобы всё это сделать, надо как минимум подозревать, что не всё так просто и память реально не освободится при вызове clear. При всём при этом самое неприятное — это то, что в некоторых случаях сложность совершенно не оправдана.
MN>Чтобы убедиться, что не всё так тривиально, вбейте слово stl в поиске на RSDN`е: у меня вышло 11319 тем...

MN>2. Интерфейсы.

MN>
MN>std::transform(it->begin(), it->begin() + commandEnd,
MN>    cmd.begin(),
MN>    std::bind2nd(std::ptr_fun(toupper_wrap), &loc));
MN>


MN>Это ещё достаточно простая комбинация. Для меня эта запись выглядит понятной, но я встречал людей, которых она вгоняла в такой ступор... А уж если надо написать свой функтор (но это уже больше относится к 3-ему пункту).


MN>3. Реализация.

MN>Вы когда-нибудь порбовали написать свой аллокатор или свой контейнер, удовлетворяющий всем требованиям stl? Попробуйте на досуге...

И в каком месте смеяться? Вы не забыли в каком форуме находитесь?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.