_DEN_ Это называется "неполовозрелый экстремизм", то есть когда кто-то считает, что он знает и умеет С++ лучше, чем все те плебеи, что сочиняли ISO/IEC 14882, например недоумок Страуструп.
Простите меня за безграмотность, конечно, но разве не имеет? Совсем-совсем никакого? Я полистал исходники, конечно, но все-таки не понял.
Недостаточно. Целый - не нужен. refCounter и сопутствующая обвязка - это как раз и есть увеличение кода. А это, как минимум, дополнительное место для ошибок. Ты смешиваешь в кучу код, написанный тобой (командой, фирмой) и готовый библиотечный код (в данном случае stl/boost). Да, есть факторы, которые не дают возможности примять в "ембедет" решениях библиотечный код. Но во первых, это далеко не всегда те, что ты перечислил, во вторых - не было бы этих факторов, грамотные (как ты выразился) разработчики воспользовались бы этим. Аналог чего-либо все равно выльется в сравнимый по размерам код. Остается сравнить качество. Кроме того, новый разрабочик _уже_ будет знаком с stl и скорее всего с boost, тогда как обучать его применению собственных велосипедов придется отдельно, а это в конечном итоге приведет к удорожанию разработки.
_DEN_ Какой странный вопрос... А почему вы спрашиваете? Это не диагноз, если непонятно - поясняю: Библиотеки, в частности STL, сочиняются не просто так и не кем попало. Много больших серьезных дядей чешут над ними бороду и у меня нет повода подозревать их в некомпетентности. Кстати boost, хотя и не включена в стандарт, делается не без участия тех людей, которые писали STL, так что можно считать, что boost рано или поздно будет перетекать в STL, не все, конечно и, возможно, не совсем в изначальном виде. Теперь что я имею ввиду под "неполовозрелым экстремизмом". Под экстремизмом я имею ввиду суждение на тему: "я не буду использовать ХХХ, потому что оное используют только лохи". У многих людей имеются предпочтения, в том числе и по инструментариям разработки но возводить это в принцип... Ну не экстремизм ли? А неполовозрелый он потому что проистекает из недостатка опыта помноженного на излишнюю самоуверенность. У некоторых людей со временем опыт приходит, а излишки самоуверенности уходят. Иногда этого не случается. В таком случае это диагноз. Причем это не лечится, потому что никто лечить не будет, потому что проще найти троих адекватных специалистов, чем переделать одного неадекватного. И вообще чьи это слова: Только я не пойму при чем здесь нравится/не нравится? Удобно же! И практически бесплатно, а то и лучше. А кто сказал, что я не доктор? Кстати, я заметил, на этом форуме "вы" обычно говорят, когда хотят тонко оскорбить собеседника.
std::auto_ptr выполняет определенные задачи. Там где эти задачи необходимы - эмуляция поведения std::auto_ptr приведет к таким же затратам (как минимум). В общем же случае, оверхед от собственных реализаций умных указателей может быть больше чем от библиотечных, т.к. при реализации последних могут быть использованы некоторые техники, препятствующие, например, template bloat - такая применяется в реализации std::tr1::shared_ptr от MSVC. В старых версиях MSVC (в шестерке, насколько я помню) при реализации std::auto_ptr также использовался подобный прием, но в реализации были некоторые кривоватости по поводу совместимости со стандартом. Разумеется, подобное может применяться и в собственных реализациях. Но есть некоторые сомнения в том, что "среднестатистическая" велосипедная реализация умного указателя их применяет. PS: Как минимум странно видеть такие вопросы в отношении все-таки разных вещей - по аналогии: двухколесный велосипед - имеет ли он оверхед по сравнению с ногами? Когда достаточно ног - несомненно имеет. Когда недостаточно - собственную реализацию велосипеда уже можно рассматривать как оверхед (как минимум по затратам на производство и времени).
Кстати, если уже я взялся искать правду (да, неблагодарное занятие... а шо делать? ) Смарт-пойнтеры появились не потому что их кому-то захотелось, а потому что так вышло. Поясняю. ООП - значит полиморфизм. Полиморфизм - значит упомянутый уже pimpl. Исключения - значит "низкоуровневый" С-шный пойнтер небезопасен. Следовательно - RAII. RAII + pimpl = smart pointer, ну а дальше по категориям - максимально простой - scoped_ptr, с разрушающим копирование - auto_ptr, с разделенным владением - shared_ptr, дополнительный, чтобы выкручиваться из циклических shared_ptr - weak_ptr. Поэтому, если не используются исключения или полиморфизм, то скорее всего можно обойтись без сабжа. Но только это как раз то случай, когда Voodoo Конечно не имеет, по крайней мере в классической реализации. Да и зачем? В чем же собственно вся задумка - пользуешься стандартной библиотекой - получаешь хороший код. Ну, по крайней мере так задумывалось Меня, например, раздражает, что gcc до сих пор memset через stos делает. Ну тормоза же!
да нет, не экстремизм. если я пишу свою библиотеку стд функций/классов - то это отчасти для того, чтобы знать как всё это работает. в противном случае, начнут вылазить баги непонятно откуда.
maksim_ а не практичней и полезней смотреть грамотные сорцы уже сделанного? и далеко не дураки это делали
а при чём тут кривие велосипеды? разбираться в документации на библиотеку, в особенностях реализации можно дольше, чем писать самому. толком не разобрался - полезли баги. может и полезней. в принципе, методы мат физики тоже можно по учебнику учить и смотреть как умные дядьки решали сложные задачи. но чтобы научиться решать задачи по ммф - нужно решать задачи по ммф. чтобы научиться программировать - нужно программировать. в общих чертах я себе и устройство термоядерного реактора представляю, но вот проблема - собрать не могу.
Ustus _DEN_ Какой странный вопрос... А почему вы спрашиваете? Бггг))) А интересуюсь... Как было в одном кино... Нервный ты какой-то
cupuyc Ну я же от этого не кричу, что gcc - сакс... просто обидно, так-то компилер неплохой. maksim_ Вообще-то в стандарте написано, как оно должно работать. И кто сказал, что ошибки легче обнаружить в самописном коде? В библиотеке-то попробуй ошибись - тут же злобные бета-тестеры порвут на тряпки А если тестеры пропустят - потребитель может так порвать, что и тряпок не останется. Ну и главное - зачем делать то, что все равно сделают немцы? (с) _DEN_ Э... собственно, я тоже цитировал (с) забыл поставить Если можно, то все-таки на ты... ну правда, напрягает... Всегда готов подучиться Значит ситуация такая - Код (C++): void f(void* p1, void* p2, void* p3, void* p4) { memset(p1, 0, 2); memset(p2, 0, 4); memset(p3, 0, 16); memset(p4, 0, 1024); } компилируется во что-то наподобие: Код (ASM): _Z1fPvS_S_S_: .LFB8: pushl %ebp .LCFI0: movl %esp, %ebp .LCFI1: pushl %edi .LCFI2: movl 8(%ebp), %ecx movl 16(%ebp), %edi movw $0, (%ecx) movl 12(%ebp), %edx cld movl $4, %ecx xorl %eax, %eax movl $0, (%edx) rep stosl movl 20(%ebp), %edx movl $1024, 16(%ebp) movl $0, 12(%ebp) movl %edx, 8(%ebp) movl (%esp), %edi leave .LCFI3: jmp memset .LFE8: компилера правда поновее под рукой нет, только куэнисксовый 3.3.5, но можете мне поверить, линуховый 4.3 не лучше. Только если разрешить MMX/SSE он их пользует, но это приемлемо не для всех случаев, например не всегда железо позволяет. Научите меня, как научить его, как сделать лучше, и я таки буду вас уважать Вам показалось где там упреки? Тем более в вашу сторону Наоборот, я даже цитирую в сугубо положительном смысле
одно дело сделаные студентами на коленке библиотеки. Их лучше не использовать, а написать свой велосипед (если конечно готового грамотного решения - нет). Другое - библиотеки, написанные специалистами и протестированные очень большим количеством людей. Такие библиотеки обязательно использовать, вместо написания своих велосипедов. Сомневаюсь что изучение документации займет времени больше чем написание своей реализации.
аффтар, если ты такой умный, и считаешь что дядьки-девелоперы всяких там STL и boost-ов тебе не указ, то расскажи нам, сколько больших, успешных, внедренных проектов ты разработал? и покажи нам, как за счёт твоих самописных лисапедов ты поимел в чём-то выигрыш? сколько в твоих проектах работало разработчиков, 10, 100? и все они юзали твой кодес, и при этом не вспоминали твоих родственников? мне очень интересно посмотреть на твои лисапеды, можт тоже на них с всяких STL перепрыгну... короче, жду. итого, мне нужно все то что есть в STL, только лучше(!). ведь именно ты об этом фактически и говорил, расхваливая свои самокаты. ps: да простят меня уважаемые васмеры за подобные эмоции.
я сам люблю работать с автоуказателями и считаю, что нужно следовать концепции: иногда лучше жевать, чем говорить. тем более о том, о чем не имеешь ни малейшего понимания. иначе это выглядит как минимум некрасиво.
от имени maksim_ из под этого логина некоторым людям, вроде Вас, бесполезно объяснять - всё равно не поймут. если желаете понять - прочтите мой пост ещё раз и ткните мне пальцем где я говорил что умные дядьки пишут плохо и что я напишу лучше.