Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / За что любить STL и как жить в браке? / 15 сообщений из 15, страница 1 из 1
20.05.2007, 03:03
    #34537871
pavelkolodin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
За что любить STL и как жить в браке?
В ногу со временем, переходя от ассемблера к C++, дивишься, как проста эта гениальность. Почему бы не описывать задачу простым человеческим языком, опираясь, как в повседневном быту, на отношения объектов, не вникая в бинарную жизнь регистров. А дальше пусть потеет компилятор, лишь бы работало. Но некторым людям, любившим в ассемблерные времена показать миру, как своим мозгом они способны экстремально оптимизировать алгоритм, теперь только гадают, во что выльется скормленное компилятору волосатое выражение на ЯВО. Конечно, нужно учитывать цели - блестнуть на хакерской битве или отожрать кусок рынка производителей ПО. Но бывает так: суббота, вечер, чай, программирование для души. Куда понесёт - хз. Сперва и цели туманны. Искусство. Ограничений нет. Хочешь сделать свой продукт хорошим со всех сторон - расширяемым, споря с современными технологиями, приятный пользователю, реактивный и лёгкий, да чтобы исходники читались легко. И сроков нет.
Моя ситуация такова. Пытаюсь изучать С++, треды, линукс-среду. С++ позволяет думать и объектами и ассемблером в одном исходнике. При желании можно забыть слова "указатель" и "байт". Но ведь понятно, что все твои красивые объекты с длинной родословной будут цинично скомпилированы в процессорный корм и структуры из вполне восьмибитовых байт.
Короче, хотелось бы поизучать тему "С++ изнутри". Как реализована STL, операторы new, delete и пр. Это чтобы в моменты сомнений решать - смогу ли я сделать лучше, чем сделано в std::vector, например. Или реализовывать ли свой диспетчер памяти или написать new?
К примеру, у меня была задача накопления текстовых строк. Один тред накапливал, второй в них рылся. Я применил vector. В один прекрасный момент возникала ситуация, когда роющийся тред находил какую-то строку, запоминал на неё указатель и топал дальше с намерением её прочитать ещё раз. В это время его выполнение прерывалось другим тредом, который выполнял в очередной раз добавление в вектор новой строки. Но в этот раз вектор решал перераспределить себе память и перемещал всего себя в другое место в памяти. Когда управление передавалось на роющийся тред, то оказывалось, что в руках у него не указатель на строку, а указатель возможно уже в чужую память. Дальше этот тред "читал строку" и ОС зарубала процесс топором. Получается, у меня образовалась критическая секция, которую нужно обложить мьютексами. А ведь я мог заюзать связанный список и для каждой новой строки вызывать new. Строка добавлялась бы всегда за одинаковое время и никакой критической секции бы не было. Ничего бы не перемещалось, а расло бы как дерево. Вот видите, нужно помнить, что высокоабстрактный вектор таки хранится в физической памяти. Ни в каком Java или Python я бы так не накололся.
В общем, посоветуйте, куда податься, что читать о том, из каких шурупов состоят высокие материи языка С++.
Спасибо. Icq 297566544, Peorg@Jabber.org
...
Рейтинг: 0 / 0
20.05.2007, 03:49
    #34537879
ErV
ErV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
За что любить STL и как жить в браке?
pavelkolodin wrote:

> "С++ изнутри". Как реализована STL, операторы new, delete и пр.
Можно банально почитать исходники. Как в MSVC так и в GCC.

> В один прекрасный момент возникала ситуация, когда роющийся тред
> находил какую-то строку, запоминал на неё указатель и топал дальше с
> намерением её прочитать ещё раз. В это время его...
Вот чтобы этого не происходило, в векторе надо было хранить не строку, а
указатель на неё. Лучший вариант был бы сделать потомка от вектора или свой
класс... Или же в векторе можно было хранить "смарт-поинтер" - смотря кому
что ближе.
По этому поводу в MSVC2005 в справке упоминается безопасность каждого
STL-класса для многопоточных приложений.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
20.05.2007, 08:24
    #34537901
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
За что любить STL и как жить в браке?
ErV пишет:

> Вот чтобы этого не происходило, в векторе надо было хранить не строку, а
> указатель на неё. Лучший вариант был бы сделать потомка от вектора или свой
> класс... Или же в векторе можно было хранить "смарт-поинтер" - смотря кому
> что ближе.

Для этого не надо хранить указатели в векторе (хранение в векторе
по ссылке - тот еще гемор)
Для этого надо синхронизировать правильно доступ к вектору.

> По этому поводу в MSVC2005 в справке упоминается безопасность каждого
> STL-класса для многопоточных приложений.

Безопасность-то безопасностью, но синхронизировать все равно надо.
Этого сам STL не делает.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
20.05.2007, 14:39
    #34538113
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
За что любить STL и как жить в браке?
Прежде чем улучшать STL, надо бы его поизучать. А именно, накупить книжекм по STL и позаглядывать в них глазами. В частности, этот вопрос объяснён в книже:
Скотт Мейерс. Эффективное использование STL.
глава 1, пункт 12,"Разумно оценивайте потоковую безопасность STL".

Кстати, в Java входящие в JDK контейнеры тоже не все синхронизированы, поэтому тоже надо "разумно оценивать" их потоковую безопасность. Правда, их поведение не зависит от реализации библиотеки, как в STL, но всё равно литературу читать надо.
...
Рейтинг: 0 / 0
20.05.2007, 19:30
    #34538319
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
За что любить STL и как жить в браке?
pavelkolodin
Моя ситуация такова. Пытаюсь изучать С++, треды, линукс-среду. С++ позволяет думать и объектами и ассемблером в одном исходнике. При желании можно забыть слова "указатель" и "байт". Но ведь понятно, что все твои красивые объекты с длинной родословной будут цинично скомпилированы в процессорный корм и структуры из вполне восьмибитовых байт.

Желание скрестить ежа с ужем в результате дает 3 метра колючей проволоки...
pavelkolodin
Короче, хотелось бы поизучать тему "С++ изнутри". Как реализована STL, операторы new, delete и пр. Это чтобы в моменты сомнений решать - смогу ли я сделать лучше, чем сделано в std::vector, например. Или реализовывать ли свой диспетчер памяти или написать new?

Интересное желание, однако я думаю слабо выполнимое(судя о тому что написано ниже). Можно конечно отдельно взятый контейнер сделать немножко лучше, однако при этом пострадает остальная часть концепции. Ведь STL это не только контейнеры, но и итераторы, алгоритмы, функторы. Причем все это довольно тесно связано.
pavelkolodin
К примеру, у меня была задача накопления текстовых строк. Один тред накапливал, второй в них рылся. Я применил vector. В один прекрасный момент возникала ситуация, когда роющийся тред находил какую-то строку, запоминал на неё указатель и топал дальше с намерением её прочитать ещё раз. В это время его выполнение прерывалось другим тредом, который выполнял в очередной раз добавление в вектор новой строки. Но в этот раз вектор решал перераспределить себе память и перемещал всего себя в другое место в памяти. Когда управление передавалось на роющийся тред, то оказывалось, что в руках у него не указатель на строку, а указатель возможно уже в чужую память. Дальше этот тред "читал строку" и ОС зарубала процесс топором. Получается, у меня образовалась критическая секция, которую нужно обложить мьютексами.

А эта проблема никоим образом не связана с потоками. Любая операция вставки в вектор и дэк может инвалидировать запомненный ранее итератор (читай указатель)... , что написано в доках. И никакой мъютекс тут не поможет
pavelkolodin
А ведь я мог заюзать связанный список и для каждой новой строки вызывать new. Строка добавлялась бы всегда за одинаковое время и никакой критической секции бы не было. Ничего бы не перемещалось, а расло бы как дерево. Вот видите, нужно помнить, что высокоабстрактный вектор таки хранится в физической памяти. Ни в каком Java или Python я бы так не накололся.
В общем, посоветуйте, куда податься, что читать о том, из каких шурупов состоят высокие материи языка С++.
Спасибо. Icq 297566544, Peorg@Jabber.org
Не факт что в Жабе получив iterator и выполнив множество операций вставки в контейнер вы не получили бы исключение. На самом деле в C++ с мей точки зрения наиболее четко определены свойства контейнеров и итераторов по ним. Например для вектора гарантируется постоянное время доступа к элементу по индексу.
Что же касается книжек
1 Бъерн Страуструп Язык программирования С++ Специальное излание
2 Николай Джосьтис С++ стандартная библиотека Tutorial & Reference
3 Уже упомянутый Скотт Мейерс Эффективный STL
...
Рейтинг: 0 / 0
21.05.2007, 09:54
    #34538812
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
За что любить STL и как жить в браке?
pavelkolodin...

Написать лучше можно пробовать, но скорее всего, у вас получиться более специализированная библиотека.

Изучать STL изнутри, значит два этапа:
1) Изучение снаружи.
2) Изучение исходников.

И тем более не стоит забывать, что стандарт stl не дает четких правил реализации (некоторые только следуют из идеологии реализуемых объектов). Поэтому, изучив одну версию stl, еще не значит, что в других версиях нет других идей.
...
Рейтинг: 0 / 0
21.05.2007, 21:41
    #34540854
sparc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
За что любить STL и как жить в браке?
Привет. Хочу поделиться мыслями.

Профессионально с++ я не занимаюсь. Но тем не менее моя любимая компьютерная книга - А. Александреску - Современное проектирование на с++. Советую читать её всем, кто занимается программированием.
...
Рейтинг: 0 / 0
21.05.2007, 21:46
    #34540859
Нахлобуч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
За что любить STL и как жить в браке?
...
Рейтинг: 0 / 0
25.05.2007, 16:42
    #34552099
Telepat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
За что любить STL и как жить в браке?
Нахрен вам нужен С++. Сейчас C# "в моде". В C# вы точно забудете про прямую работу с "железом". И даже оператор delete Вам будет не нужен. С++ надо было учить лет пять назад, а сейчас C# рулит !!!
...
Рейтинг: 0 / 0
27.05.2007, 08:16
    #34553589
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
За что любить STL и как жить в браке?
TelepatНахрен вам нужен С++. Сейчас C# "в моде". В C# вы точно забудете про прямую работу с "железом". И даже оператор delete Вам будет не нужен. С++ надо было учить лет пять назад, а сейчас C# рулит !!!

когда был васик ппулярен, потом жаба. А все приложения как писались на С++ та и будут писаться. Тем более что для извращенцев есть C++.NET
...
Рейтинг: 0 / 0
28.05.2007, 02:56
    #34554184
Telepat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
За что любить STL и как жить в браке?
Lepsik TelepatНахрен вам нужен С++. Сейчас C# "в моде". В C# вы точно забудете про прямую работу с "железом". И даже оператор delete Вам будет не нужен. С++ надо было учить лет пять назад, а сейчас C# рулит !!!

когда был васик ппулярен, потом жаба. А все приложения как писались на С++ та и будут писаться. Тем более что для извращенцев есть C++.NET

Как бы ни так. Разуйте глаза. Погуглите, пробежитесь по сайта в США (ИМЕННО США, так как по этой стране и нужно судить от IT-индустрии) и вы очень удивитесь, что популярность C# никак не ниже, а возможно и выше, популярности С++. Если Вы судите по России, то конечно тут лидер С++. Но судить по России глупо. Это как судить о моде в одежде по китайскому ширпотребу, а не по Милану, например.
...
Рейтинг: 0 / 0
28.05.2007, 08:04
    #34554282
ErV
ErV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
За что любить STL и как жить в браке?
Telepat wrote:

> Нахрен вам нужен С++. Сейчас C# "в моде". В C# вы точно забудете про
> прямую работу с "железом". И даже оператор delete Вам будет не нужен. С++
> надо было учить лет пять назад, а сейчас C# рулит !!!
Ну а если я хочу напрямую с железом работать? И если не привлекает .NET? И
если нужен язык, который дает прямой доступ к "сырой памяти"? И который
поддерживается на большинстве платформ? Зачем мне тогда C#? А на моду,
ИМХО, чихать надо - если заказчик умен, ему важен результат, а не на каком
языке это писано...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
28.05.2007, 10:45
    #34554586
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
За что любить STL и как жить в браке?
Telepat пишет:
> Как бы ни так. Разуйте глаза. Погуглите, пробежитесь по сайта в США
> (ИМЕННО США, так как по этой стране и нужно судить от IT-индустрии) и вы
> очень удивитесь, что популярность C# никак не ниже, а возможно и выше,
> популярности С++.

Киркоров тоже популярный. Ну и что ? Как был 3.1415, так и остается.
Не, ну конечно бабла гребет ...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
28.05.2007, 10:47
    #34554596
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
За что любить STL и как жить в браке?
ErV пишет:

> Ну а если я хочу напрямую с железом работать? И если не привлекает .NET? И
> если нужен язык, который дает прямой доступ к "сырой памяти"? И который
> поддерживается на большинстве платформ? Зачем мне тогда C#? А на моду,

Оно конечно про моду правильно, но напрямую с железом нельзя работать.
А что такое "сырая память" - вообще не понятно.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
28.05.2007, 16:03
    #34555662
ErV
ErV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
За что любить STL и как жить в браке?
MasterZiv wrote:

> Оно конечно про моду правильно, но напрямую с железом нельзя работать.
> А что такое "сырая память" - вообще не понятно.

1) Во первых, когда писал, очень спать хотел :).
2) Допустим, я захочу написать драйвер :)
3) Про "сырую память" - здесь меня переклинило. Имелась в виду адресная
арифметика и т.д. Как понимаю, адресной арифметики в C# нет, указатели есть
("unsafe")..
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / За что любить STL и как жить в браке? / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]