Doc>А расскажите в чем развод STL? Очень уж интересно
В нереентерабельности кода. STL — это как садово-парковый лабиринт, очень извилистый и длинный, но без развилок Знай, иди себе вперед и вперед, а все идущие в нем — идут гуськом, в колонну по одному.
Doc>А расскажите в чем развод STL? Очень уж интересно
Развод в нереентерабельности кода. Это как садово-парковый лабиринт, очень длинный и извилистый, но без развилок. По нему можно идти только прямо, гуськом, в колонну по одному. Из недостатков — скучно. Из преимуществ — не заблудишься.
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, Кондыбас, Вы писали:
К>>В нереентерабельности кода. C>Вообще-то под "реентерабельный код" — это "безопасный при рекурсивном использовании".
Ммм... Реинтерабельный — повторно входимый. Это значит, что если этот код выполняется в данный момент, его можно запустить снова и ничего не сломается, всё будет работать. Запустить можно в другой нити, например. Рекурсия, мне кажется, не всегда может быть реинтерабельна.
Аноним wrote:
> Ммм... Реинтерабельный — повторно входимый. Это значит, что если этот
А можно пример? Что именно в stl не такое и какое должно быть?
> код выполняется в данный момент, его можно запустить снова и ничего не > сломается, всё будет работать. Запустить можно в другой нити, например.
Это называется Multithread Safe Code.
> Рекурсия, мне кажется, не всегда может быть реинтерабельна.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Аноним wrote: > C>Вообще-то под "реентерабельный код" — это "безопасный при рекурсивном > использовании". > Ммм... Реинтерабельный — повторно входимый. Это значит, что если этот > код выполняется в данный момент, его можно запустить снова и ничего не > сломается, всё будет работать.
А как ты можешь запустить уже работающий код? Правильно, рекурсией
> Запустить можно в другой нити, например.
Нет. Это связанные, но не эквивалентные понятия.
Например, код, использующий thread local storage, будет
потокобезопасным, но не реентерабельным.
> Рекурсия, мне кажется, не всегда может быть реинтерабельна.
Эта... Рекурсия — она по определению "реентерабельна".
Здравствуйте, Cyberax, Вы писали:
К>>В нереентерабельности кода. C>Вообще-то под "реентерабельный код" — это "безопасный при рекурсивном использовании".
Реентерабельность — возможность рекурсивного вхождения. Если рекурсивно вызовешь нереентерабельный код, то получишь лажу В смысле — вызвать-то вызовешь, результату будешь не рад.
Здравствуйте, Demiurg, Вы писали:
К>>>В нереентерабельности кода. C>>Вообще-то под "реентерабельный код" — это "безопасный при рекурсивном использовании". D> Реентерабельность — возможность рекурсивного вхождения. Если рекурсивно вызовешь нереентерабельный код, то получишь лажу В смысле — вызвать-то вызовешь, результату будешь не рад.
А чем это отличается от того, что я сказал?
Здравствуйте, Doc, Вы писали:
Doc>Здравствуйте, Mr. None, Вы писали:
MN>>деле фигня и где-то их на самом деле разводят (сам такой же — каюсь) .
Doc>А расскажите в чем развод STL? Очень уж интересно
Н-да... Не думал, что моя шутка породит такую дискуссию... В пору уже отделять в "Священные войны".
А тепрь конкретика, никакую реентерабельность или потоко-безопасность я не имел в виду. Это вообще отдельная песня и не многие библиотеки, обладают 3-мя качествами одновременно: потоко-безопасность, универсальность и эффективность. Чем-то одним приходится жертвовать...
Stl удобен, для тех кто его знает и умеет им пользоваться, а это очень и очень не просто. Не мне судить, но как человек, знающий его относительно хорошо (скажем так на 4-ку, думаю даже с плюсом — скромность не позволяет выставить оценку выше ), могу сказать: некоторые вещи можно было сделать по проще и по понятнее. Это касается и нюансов использования, и интерфейсов, и реализации.
1. Нюансы использования.
Вот последнее, в обсуждение чего я принимал участие:
std::vector<std::string> myVec;
myVec.push_back("QQQQQQ");
// ещё много-много push_back`ов.
myVec.clear(); // (1)
Вы надеетесь, что в точке (1) память из-под myVec освободится? Вы очень наивны, если так думаете. А чтобы узнать как её гарантировано освободить на любой реализации придётся либо проштудировать стандарт, либо искать на форуме, либо прочитать ещё одну книжку (например С. Мейерса "Эффективное использование C++"). Но и этого не достаточно: чтобы всё это сделать, надо как минимум подозревать, что не всё так просто и память реально не освободится при вызове clear. При всём при этом самое неприятное — это то, что в некоторых случаях сложность совершенно не оправдана.
Чтобы убедиться, что не всё так тривиально, вбейте слово stl в поиске на RSDN`е: у меня вышло 11319 тем...
Это ещё достаточно простая комбинация. Для меня эта запись выглядит понятной, но я встречал людей, которых она вгоняла в такой ступор... А уж если надо написать свой функтор (но это уже больше относится к 3-ему пункту).
3. Реализация.
Вы когда-нибудь порбовали написать свой аллокатор или свой контейнер, удовлетворяющий всем требованиям stl? Попробуйте на досуге...
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
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>Вы надеетесь, что в точке (1) память из-под myVec освободится? Вы очень наивны, если так думаете. А чтобы узнать как её гарантировано освободить на любой реализации придётся либо проштудировать стандарт, либо искать на форуме, либо прочитать ещё одну книжку (например С. Мейерса "Эффективное использование C++"). Но и этого не достаточно: чтобы всё это сделать, надо как минимум подозревать, что не всё так просто и память реально не освободится при вызове clear. При всём при этом самое неприятное — это то, что в некоторых случаях сложность совершенно не оправдана. MN>Чтобы убедиться, что не всё так тривиально, вбейте слово stl в поиске на RSDN`е: у меня вышло 11319 тем...
MN>2. Интерфейсы. MN>
MN>Это ещё достаточно простая комбинация. Для меня эта запись выглядит понятной, но я встречал людей, которых она вгоняла в такой ступор... А уж если надо написать свой функтор (но это уже больше относится к 3-ему пункту).
MN>3. Реализация. MN>Вы когда-нибудь порбовали написать свой аллокатор или свой контейнер, удовлетворяющий всем требованиям stl? Попробуйте на досуге...
И в каком месте смеяться? Вы не забыли в каком форуме находитесь?
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, Кондыбас, Вы писали:
К>>В нереентерабельности кода. C>Вообще-то под "реентерабельный код" — это "безопасный при рекурсивном использовании".
Не обязательно при рекурсивном. При вложенном тоже. Reentrant. A reentrant function does not hold static data over successive
calls, nor does it return a pointer to static data. All data is
provided by the caller of the function. A reentrant function
must not call non-reentrant functions.
Эх, люблю выпить и переспать с кем нибудь!
Но чаще выходит перепить с кем — нибудь и выспаться...
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, Кондыбас, Вы писали:
К>>В нереентерабельности кода. C>Вообще-то под "реентерабельный код" — это "безопасный при рекурсивном использовании".
Нет... Повторная входимость рекурсии — это частный случай...
Реентерабильный — повторно-входимый...
Понятие возникло в начале 60-х годов в операционных системах...
Повторная входимость — это использование ОДНОЙ КОПИИ программы (вместие с памятью для переменных) для нескольких процессов. Естесственно, код программы в процессе работы не должен изменяться — это раз. Второе — для переменных программы новый процесс должен получать новую память...
Переменные создаются либо в стеке, либо в динамической памяти...
Естественно, стек для каждого процесса назначает ось...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Doc, Вы писали:
Doc>Здравствуйте, Mr. None, Вы писали:
MN>>деле фигня и где-то их на самом деле разводят (сам такой же — каюсь) . Doc>А расскажите в чем развод STL? Очень уж интересно
В том, что это как наркотик. Разок попробуешь и ....
LaptevVV wrote:
> C>Вообще-то под "реентерабельный код" — это "безопасный при рекурсивном > использовании". > Нет... Повторная входимость рекурсии — это частный случай... > Реентерабильный — повторно-входимый... > Понятие возникло в начале 60-х годов в операционных системах... > Повторная входимость — это использование ОДНОЙ КОПИИ программы (вместие > с памятью для переменных) для нескольких процессов. Естесственно, код > программы в процессе работы не должен изменяться — это раз. Второе — для > переменных программы новый процесс должен получать новую память... > > Переменные создаются либо в стеке, либо в динамической памяти... > Естественно, стек для каждого процесса назначает ось...
А можешь привести пример функции, безопасной при рекурсивном использовании но не реентерабельной? Или реентерабельной но
не безопасной при рекурсивном использовании?
И объяснить, в чём же сабж???
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, LuciferMoscow, Вы писали:
MN>>>деле фигня и где-то их на самом деле разводят (сам такой же — каюсь) . Doc>>А расскажите в чем развод STL? Очень уж интересно LM>В том, что это как наркотик. Разок попробуешь и ....
Странно. Сколько не пробую, всё равно не подспживаюсь
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, LuciferMoscow, Вы писали:
MN>>>>деле фигня и где-то их на самом деле разводят (сам такой же — каюсь) . Doc>>>А расскажите в чем развод STL? Очень уж интересно LM>>В том, что это как наркотик. Разок попробуешь и .... E>Странно. Сколько не пробую, всё равно не подспживаюсь
Смешай с бустом в пропорции 2 к 1
Здравствуйте, LuciferMoscow, Вы писали:
Doc>>>>А расскажите в чем развод STL? Очень уж интересно LM>>>В том, что это как наркотик. Разок попробуешь и .... E>>Странно. Сколько не пробую, всё равно не подспживаюсь LM>Смешай с бустом в пропорции 2 к 1
Не, не выйдет, от этой смеси сразу резко тошнит
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
Doc>>>>>А расскажите в чем развод STL? Очень уж интересно LM>>>>В том, что это как наркотик. Разок попробуешь и .... E>>>Странно. Сколько не пробую, всё равно не подспживаюсь LM>>Смешай с бустом в пропорции 2 к 1 E>Не, не выйдет, от этой смеси сразу резко тошнит
А не фиг MFC-ей запивать.