В чём развод STL?
От: Doc Россия http://andrey.moveax.ru
Дата: 26.05.06 09:20
Оценка:
Здравствуйте, Mr. None, Вы писали:

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


А расскажите в чем развод STL? Очень уж интересно
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>

29.05.06 12:20: Ветка выделена из темы С++адово-парковое искусство
Автор: Кодт
Дата: 24.05.06
— Кодт
29.05.06 12:21: Перенесено модератором из 'Коллеги, улыбнитесь' — Кодт
Re: В чём развод STL?
От: Кондыбас  
Дата: 26.05.06 10:09
Оценка: +1 -3
Doc>А расскажите в чем развод STL? Очень уж интересно

В нереентерабельности кода. STL — это как садово-парковый лабиринт, очень извилистый и длинный, но без развилок Знай, иди себе вперед и вперед, а все идущие в нем — идут гуськом, в колонну по одному.
Re: В чём развод STL?
От: Кондыбас  
Дата: 26.05.06 10:11
Оценка: -1
Doc>А расскажите в чем развод STL? Очень уж интересно

Развод в нереентерабельности кода. Это как садово-парковый лабиринт, очень длинный и извилистый, но без развилок. По нему можно идти только прямо, гуськом, в колонну по одному. Из недостатков — скучно. Из преимуществ — не заблудишься.
Re[2]: В чём развод STL?
От: Cyberax Марс  
Дата: 26.05.06 12:41
Оценка: +2 -1 :)
Здравствуйте, Кондыбас, Вы писали:

К>В нереентерабельности кода.

Вообще-то под "реентерабельный код" — это "безопасный при рекурсивном использовании".
Sapienti sat!
Re[3]: В чём развод STL?
От: Аноним  
Дата: 26.05.06 15:27
Оценка: -1
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, Кондыбас, Вы писали:


К>>В нереентерабельности кода.

C>Вообще-то под "реентерабельный код" — это "безопасный при рекурсивном использовании".

Ммм... Реинтерабельный — повторно входимый. Это значит, что если этот код выполняется в данный момент, его можно запустить снова и ничего не сломается, всё будет работать. Запустить можно в другой нити, например. Рекурсия, мне кажется, не всегда может быть реинтерабельна.
Re[4]: В чём развод STL?
От: kan_izh Великобритания  
Дата: 26.05.06 15:56
Оценка: +1
Аноним wrote:

> Ммм... Реинтерабельный — повторно входимый. Это значит, что если этот

А можно пример? Что именно в stl не такое и какое должно быть?

> код выполняется в данный момент, его можно запустить снова и ничего не

> сломается, всё будет работать. Запустить можно в другой нити, например.
Это называется Multithread Safe Code.

> Рекурсия, мне кажется, не всегда может быть реинтерабельна.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[4]: В чём развод STL?
От: Cyberax Марс  
Дата: 26.05.06 17:27
Оценка: :)
Аноним wrote:
> C>Вообще-то под "реентерабельный код" — это "безопасный при рекурсивном
> использовании".
> Ммм... Реинтерабельный — повторно входимый. Это значит, что если этот
> код выполняется в данный момент, его можно запустить снова и ничего не
> сломается, всё будет работать.
А как ты можешь запустить уже работающий код? Правильно, рекурсией

> Запустить можно в другой нити, например.

Нет. Это связанные, но не эквивалентные понятия.

Например, код, использующий thread local storage, будет
потокобезопасным, но не реентерабельным.

> Рекурсия, мне кажется, не всегда может быть реинтерабельна.

Эта... Рекурсия — она по определению "реентерабельна".
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[3]: В чём развод STL?
От: Demiurg  
Дата: 26.05.06 21:45
Оценка:
Здравствуйте, Cyberax, Вы писали:

К>>В нереентерабельности кода.

C>Вообще-то под "реентерабельный код" — это "безопасный при рекурсивном использовании".

Реентерабельность — возможность рекурсивного вхождения. Если рекурсивно вызовешь нереентерабельный код, то получишь лажу В смысле — вызвать-то вызовешь, результату будешь не рад.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: В чём развод STL?
От: Cyberax Марс  
Дата: 27.05.06 08:26
Оценка:
Здравствуйте, Demiurg, Вы писали:

К>>>В нереентерабельности кода.

C>>Вообще-то под "реентерабельный код" — это "безопасный при рекурсивном использовании".
D> Реентерабельность — возможность рекурсивного вхождения. Если рекурсивно вызовешь нереентерабельный код, то получишь лажу В смысле — вызвать-то вызовешь, результату будешь не рад.
А чем это отличается от того, что я сказал?
Sapienti sat!
Re: В чём развод STL?
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 29.05.06 04:22
Оценка:
Здравствуйте, 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 тем...

2. Интерфейсы.
std::transform(it->begin(), it->begin() + commandEnd,
    cmd.begin(),
    std::bind2nd(std::ptr_fun(toupper_wrap), &loc));


Это ещё достаточно простая комбинация. Для меня эта запись выглядит понятной, но я встречал людей, которых она вгоняла в такой ступор... А уж если надо написать свой функтор (но это уже больше относится к 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>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? Попробуйте на досуге...

И в каком месте смеяться? Вы не забыли в каком форуме находитесь?
Re[3]: В чём развод STL?
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 29.05.06 05:28
Оценка:
Здравствуйте, Аноним, Вы писали:

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


А>И в каком месте смеяться? Вы не забыли в каком форуме находитесь?



MN>>В пору уже отделять в "Священные войны".


Или лучше в "C++". Если вы обратите внимание, то я уже предложил отделить тему.
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Re[3]: В чём развод STL?
От: Ubivetz Украина  
Дата: 29.05.06 08:36
Оценка:
Здравствуйте, 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.
Эх, люблю выпить и переспать с кем нибудь!
Но чаще выходит перепить с кем — нибудь и выспаться...
Re[3]: В чём развод STL?
От: LaptevVV Россия  
Дата: 29.05.06 11:46
Оценка: 1 (1)
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, Кондыбас, Вы писали:


К>>В нереентерабельности кода.

C>Вообще-то под "реентерабельный код" — это "безопасный при рекурсивном использовании".
Нет... Повторная входимость рекурсии — это частный случай...
Реентерабильный — повторно-входимый...
Понятие возникло в начале 60-х годов в операционных системах...
Повторная входимость — это использование ОДНОЙ КОПИИ программы (вместие с памятью для переменных) для нескольких процессов. Естесственно, код программы в процессе работы не должен изменяться — это раз. Второе — для переменных программы новый процесс должен получать новую память...

Переменные создаются либо в стеке, либо в динамической памяти...
Естественно, стек для каждого процесса назначает ось...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: В чём развод STL?
От: LuciferMoscow Россия  
Дата: 29.05.06 11:56
Оценка: +2 :)
Здравствуйте, Doc, Вы писали:

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


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

Doc>А расскажите в чем развод STL? Очень уж интересно
В том, что это как наркотик. Разок попробуешь и ....
Re[4]: В чём развод STL?
От: kan_izh Великобритания  
Дата: 29.05.06 12:46
Оценка:
LaptevVV wrote:

> C>Вообще-то под "реентерабельный код" — это "безопасный при рекурсивном

> использовании".
> Нет... Повторная входимость рекурсии — это частный случай...
> Реентерабильный — повторно-входимый...
> Понятие возникло в начале 60-х годов в операционных системах...
> Повторная входимость — это использование ОДНОЙ КОПИИ программы (вместие
> с памятью для переменных) для нескольких процессов. Естесственно, код
> программы в процессе работы не должен изменяться — это раз. Второе — для
> переменных программы новый процесс должен получать новую память...
>
> Переменные создаются либо в стеке, либо в динамической памяти...
> Естественно, стек для каждого процесса назначает ось...
А можешь привести пример функции, безопасной при рекурсивном использовании но не реентерабельной? Или реентерабельной но
не безопасной при рекурсивном использовании?

И объяснить, в чём же сабж???
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[2]: В чём развод STL?
От: Erop Россия  
Дата: 29.05.06 14:36
Оценка: +1
Здравствуйте, LuciferMoscow, Вы писали:

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

Doc>>А расскажите в чем развод STL? Очень уж интересно
LM>В том, что это как наркотик. Разок попробуешь и ....

Странно. Сколько не пробую, всё равно не подспживаюсь
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: В чём развод STL?
От: LuciferMoscow Россия  
Дата: 29.05.06 14:47
Оценка: +2 :)))
Здравствуйте, Erop, Вы писали:

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


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

Doc>>>А расскажите в чем развод STL? Очень уж интересно
LM>>В том, что это как наркотик. Разок попробуешь и ....
E>Странно. Сколько не пробую, всё равно не подспживаюсь
Смешай с бустом в пропорции 2 к 1
Re[4]: В чём развод STL?
От: Erop Россия  
Дата: 17.06.07 19:07
Оценка: +1 :))
Здравствуйте, LuciferMoscow, Вы писали:

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

LM>>>В том, что это как наркотик. Разок попробуешь и ....
E>>Странно. Сколько не пробую, всё равно не подспживаюсь
LM>Смешай с бустом в пропорции 2 к 1

Не, не выйдет, от этой смеси сразу резко тошнит
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[5]: В чём развод STL?
От: LuciferMoscow Россия  
Дата: 17.06.07 20:14
Оценка:
Здравствуйте, Erop, Вы писали:

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

LM>>>>В том, что это как наркотик. Разок попробуешь и ....
E>>>Странно. Сколько не пробую, всё равно не подспживаюсь
LM>>Смешай с бустом в пропорции 2 к 1
E>Не, не выйдет, от этой смеси сразу резко тошнит
А не фиг MFC-ей запивать.

Лучшая закусь для этого коктеля *НИКС
... << RSDN@Home 1.1.4 beta 4 rev. 358>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.