гм, гм и еще раз гм...
темплейты замечательны тем, что ошибку в них не отследишь и не поймаешь в дебаггере, а что касается STL и его стандартности - читайте www.wxwindows.org, хотя проблемы портирования в случае выбора фиксированной платформы, видимо, не стоят. Только молиться надо, чтобы со следующей версией gcc ничего плохого с STL не произошло
Об template & STL - если уж мы этот предмет зацепили (особенно потому, что он может иметь прямое касательство к аппаратному, embedded ПО):
1. template - самое большое расширение С++ с 1995г., может быть более существенное, чем наследование и множественное наследование...
Это, наверное, самая массивная часть серьёзных публикаций последних 5-ти лет. Источники можно посмотреть здесь:
http://qnx.org.ru/index.php?option=com_minibb&action=vthread&forum=12&topic=943
http://qnx.org.ru/index.php?option=com_minibb&action=vthread&forum=12&topic=1327
http://qnx.org.ru/index.php?option=com_minibb&action=vthread&forum=12&topic=952
http://qnx.org.ru/index.php?option=com_minibb&action=vthread&forum=12&topic=1002
Это настолько сильное расширение, что многие считают С++ с templates даже другим клоном языка.
2. template - как раз совершенно заманчивое средство больше для "аппаратног" ПО, потому, как бОльшая часть даже синтаксических проверок может быть выполнена препроцессорно, т.е. даже до начала компиляции.
Ну и какая разница - до начала компиляции или после ?
Вот происходит у вас в темплейте деление на ноль - так это место ничем не найти, а если что-нибудь логическое - так это вообще полный улет. Например, хотим мы инициализировать наши датчики - клапана... а оно не закрывается/не работает - почему оно не работает с темплейтами разобраться невозможно.
Первоначально опубликовано Olej
3. STL, как естественное порождение template, не был стандартизован в стандарте 1998г. (не успели, т.к. первая HP-реализация STL была сделана в 1995г.), но уже тогда комитет по стандарьтзации рассматривал STL как стандарт post-factum... И в стардарте, не помню - 2000 или 2001г. - STL входит.
За стандартизацию STL вешать надо на той же ветке, что и за темплейты и эксепшены (точнее, за воспевание работы с эксепшенами как стандарный подход)
Первоначально опубликовано Olej
4. да это и не так важно - STL "внешняя" к языку часть - так ли принципиально, относить ли к стандарту FORTRAN библиотеки линейной алгебры.
5. но STL - и "не совсем" библиотека - это только щаблонные определения, т.е. библиотека, полностью определённая в *.h-файлах... без реализационной части. Любая из реализаций STL будет нормально использоваться если только компилятор строго поддерживает ISO стандарт в части templates. GCC 2.95 - поддерживает, в строгом соответствии со стандартами (говорят, что и более ранние версии тоже). Т.е. "молиться" - не стоит ;-) - от компилятора здесь ничего не зависит, только от реализации template...
Сейчас 2.9, как говорят, - уже не модно...народ переходит на 3.2 с чем-то там и переодически огребает проблемы.
Первоначально опубликовано Olej
А почему им столько внимания... в этой теме?
Потому что однажды наступил на какие-то грабли. Наступил хорошо, но деталей уже не помню. Вроде грабли были системо-зависимые. Так что темплейты, в которых есть какие-либо зависимости от платформы, однозначно идут в дальний лес.
Первоначально опубликовано Olej
1. STL реализации могут быть в 2-4 раза текстуально короче, и существенно устойчивее к ошибкам периода выполнения - то, что упоминалось в контексте надёжности ПО;
Если в одном месте убудет, то в другом - добавится.
Если в юзерской части реализация короче, то в части инклудов длиннее. И экзешник тоже раздувается. А как известно - чем больше программа[текст программы], тем больше в нем количество ошибок - это прямо относится к надежности.
Первоначально опубликовано Olej
2. STL реализации через какой-нибудь vector<X> или list<X>, как это не странно на первый взгляд, в конечном итоге (не отдельного оператора, а приложения в целом) могут оказываться ... существенно быстрее (1.4, 2 ... раза) относительно эквивалентов через рудиментные массивы X* ... Сам несколько раз проверял это в задачах цифровой обработки сигналов ... и каждый раз удивлялся ;-).
Чудес не бывает - процессор не может умножать и складывать числа быстрее чем он это делает.
SY,
EK
Мне сильно кажется, что весь предыдущий постинг написан не для того, что есть что сказать, а потому, что "прёт" сам факт сказать... А поэтому он заслуживает ответа только со скидкой на вероятность того, что всё-таки кажется...
Первоначально опубликовано evgen
Ну и какая разница - до начала компиляции или после ?
Разница большая. Принципиальная!
Но слишком объёмная, чтоб её обсуждать в форуме...
Посмотрите Андрей Александреску "Современное проектирование на C++. Обобщённое программирование и прикладные шаблоны проектирования" - автор один из членов комитета по стандартизации C++...
Прочитаете: стучите - обсудим ;-).
Первоначально опубликовано evgen
Вот происходит у вас в темплейте деление на ноль - так это место ничем не найти, а если что-нибудь логическое - так это вообще полный улет.
У меня не происходит в темплейте деление на ноль - вообще, не дело это - препроцессорным механизмам со значениями бодаться...
Это может у вас "происходит в темплейте деление на ноль"? :D
И вообще, что за болезненное отношение к "ошибке деления на ноль", раз 5-й уже упоминается... Это что? - самая страшная ошибка, с которой вам приходится встречаться? Спать не даёт? Тогда вам действительно не нужны template, STL, exeption...
Первоначально опубликовано evgen
Например, хотим мы инициализировать наши датчики - клапана... а оно не закрывается/не работает - почему оно не работает с темплейтами разобраться невозможно.
"Возможно/невозможно" - это категории уже не из области template... "Разруха начинается не в сортирах..."(с) - ну, сами знаете где.
Первоначально опубликовано evgen
За стандартизацию STL вешать надо на той же ветке, что и за темплейты и эксепшены (точнее, за воспевание работы с эксепшенами как стандарный подход)
При изложении таких откровений, я бы безусловно советовал добавлять: "по моему скромному мнению"... - особенно обратить внимание на 3-е слово этой формулировки.
Первоначально опубликовано evgen
Сейчас 2.9, как говорят, - уже не модно...народ переходит на 3.2 с чем-то там и переодически огребает проблемы.
По поводу "говорят" - может вам сменить круг общения? ;-)
По поводу "модно"...
Вообще, все кто имеет касательство к IT, делятся на 2 большие категории:
1).исследуют то, что "модно", и поэтому постоянно "переходят": "...покой нам только снится..."(с);
2). ...делом занимаются.
Мы об каком народе печёмся?
Первоначально опубликовано evgen
Потому что однажды наступил на какие-то грабли. Наступил хорошо, но деталей уже не помню. Вроде грабли были системо-зависимые.
"Склероз - наилучшая из болезней: ничего не болит, и каждый день начинается с новостей"(с).
Грабли, наверное, были того сорта, что "не использовал"?
Теперь по 2-й части нашего марлизонского балета...
Первоначально опубликовано evgen
Если в юзерской части реализация короче, то в части инклудов длиннее. И экзешник тоже раздувается. А как известно - чем больше программа[текст программы], тем больше в нем количество ошибок - это прямо относится к надежности.
Точнее будет:
А как известно - чем больше исходный текст программы, тем больше в нем количество ошибок - это прямо относится к надежности.
Вот и я об том же... что текст в 4 раза короче - будет иметь в 4 раза (в худшем случае) частоту ошибок периода выполнения (очень важно! - не нужно мне долдонить про ошибки компиляции).
Первоначально опубликовано evgen
Чудес не бывает - процессор не может умножать и складывать числа быстрее чем он это делает.
Чудеса тоже бывают... но, как учит закон термодинамики, 2-й, кажется - о-о-о-чень редко ;-).
Но ускорение STL-реализаций происходит без вмешательства чудес. На то есть много (и даже очень много, чтоб все их перечислять в форуме) оснований. Многие их них отлично обсуждаются в переводе: Мейерс С. Эффективное использование STL. Библиотека программиста. - СПб.: Питер, 2002. Но есть и другие, связанные с особенностью задач обработки данных и управления:
- обработка данных (блочных данных) часто делается циклических применением операций к данным. Традиционное решение: в цикле for применяеися функция обработки, которая в точку обработки передаётся своим указателем. STL решение: применение циклических алгоритмов STL, которым передаётся не указатель функции, а функтор (анонимный объект класса, в котором определена операция "()"). Так вот - второе решение практически всегда быстрее (от незначительных 40% до 3-7 раз, я проверял эти цифры!) за счёт того, что в этом случае компилятор имеет информацию и может значительно оптимизировать код.
- а это уже совсем не так очевидно: очень часто в потоковой обработке экспериментальных данных (в той же цифровой обработке сигналов, но не только) - над потоком данных производится, часто не в один проход, некоторая предварительная "чистка", когда некоторые фрагменты потока должны быть квалифицированы как "запорченные" и выброшены... В традиционном решении у вас есть на выбор:
а).уплотнять данные, перемещая большие объёмы на место устраняемых б).отмечать устраняемые данные "флагом"... а потом при многократных циклах обработки этот флаг - обходить. В STL решении, например list<X> - у вас нет этих проблем! И итоговый выигрыш с лихвой перекрывает потери на элементарных операциях, связанных с доступом к более сложной структуре. Проверено - на нескольких реальных задачах, имеющих практическую ценность - до 2-2.5 раз.
Первоначально опубликовано Olej
Первоначально опубликовано evgen
Ну и какая разница - до начала компиляции или после ?
Разница большая. Принципиальная!
Но слишком объёмная, чтоб её обсуждать в форуме...
Я человек простой - от сохи. т.е. от станка. И мне все эти теоретические изыски мало волнуют.
Первоначально опубликовано Olej
Посмотрите Андрей Александреску "Современное проектирование на C++. Обобщённое программирование и прикладные шаблоны проектирования" - автор один из членов комитета по стандартизации C++...
Прочитаете: стучите - обсудим ;-).
Делать мне больше нечего - бред всякий читать. Будут отладчики поддерживать шаблоны (точнее, наверное, компиляторы поддерживать возможность отладки отладчиком в шаблонах) - тогда поговорим, а иначе - на ту же самую ветку.
Первоначально опубликовано Olej
Первоначально опубликовано evgen
Вот происходит у вас в темплейте деление на ноль - так это место ничем не найти, а если что-нибудь логическое - так это вообще полный улет.
У меня не происходит в темплейте деление на ноль - вообще, не дело это - препроцессорным механизмам со значениями бодаться...
Это может у вас "происходит в темплейте деление на ноль"? :D
Окей - не в темлейте, но вы меня поняли, да ?
Первоначально опубликовано Olej
И вообще, что за болезненное отношение к "ошибке деления на ноль", раз 5-й уже упоминается... Это что? - самая страшная ошибка, с которой вам приходится встречаться? Спать не даёт? Тогда вам действительно не нужны template, STL, exeption...
вы меня с кем-то путаете - я про деление на ноль первый раз упомянул - и то, как о самой простой и легкоотлавливаемой ошибке
Первоначально опубликовано Olej
Первоначально опубликовано evgen
Например, хотим мы инициализировать наши датчики - клапана... а оно не закрывается/не работает - почему оно не работает с темплейтами разобраться невозможно.
"Возможно/невозможно" - это категории уже не из области template... "Разруха начинается не в сортирах..."(с) - ну, сами знаете где.
Это лирика. Покажите возможность онлайн на живом объекте и риалтайм отладки кода, который в темплейтах наворочен - тогда можно и про разруху.
Первоначально опубликовано Olej
Первоначально опубликовано evgen
За стандартизацию STL вешать надо на той же ветке, что и за темплейты и эксепшены (точнее, за воспевание работы с эксепшенами как стандарный подход)
При изложении таких откровений, я бы безусловно советовал добавлять: "по моему скромному мнению"... - особенно обратить внимание на 3-е слово этой формулировки.
У меня мнение - уже не скромное. И волос с головы в связи с вышеуказанным повыпадало достаточно. И про надежность, которую вы так любите вспоминать, думал неоднократно - в том числе в связи с темплейтами и эксепшенами. С эксепшенами я видел программу, у которой на них строилась вся система работы с памятью. В итоге все работало замечельно, но невозможно было отловить ошибки general protection fault (поскольку при этом программа залетает в обработчик эксепшена и в нем выполняет malloc/realloc ), которые при обычном подходе в отладчике отлавливаются элементарно. Авторы это не
Первоначально опубликовано Olej
Первоначально опубликовано evgen
Сейчас 2.9, как говорят, - уже не модно...народ переходит на 3.2 с чем-то там и переодически огребает проблемы.
По поводу "говорят" - может вам сменить круг общения? ;-)
По поводу "модно"...
Вообще, все кто имеет касательство к IT, делятся на 2 большие категории:
1).исследуют то, что "модно", и поэтому постоянно "переходят": "...покой нам только снится..."(с);
2). ...делом занимаются.
Мы об каком народе печёмся?
говорят - разработчики не одного проекта с соусфорджа. И не только оттуда. Mesa, Squid, Autotrace, Bogofilter и другие. Этого мало ?
Первоначально опубликовано Olej
Первоначально опубликовано evgen
Потому что однажды наступил на какие-то грабли. Наступил хорошо, но деталей уже не помню. Вроде грабли были системо-зависимые.
"Склероз - наилучшая из болезней: ничего не болит, и каждый день начинается с новостей"(с).
Грабли, наверное, были того сорта, что "не использовал"?
Грабли были при попытке портирования
SY,
EK
Первоначально опубликовано Olej
Теперь по 2-й части нашего марлизонского балета...
Первоначально опубликовано evgen
Если в юзерской части реализация короче, то в части инклудов длиннее. И экзешник тоже раздувается. А как известно - чем больше программа[текст программы], тем больше в нем количество ошибок - это прямо относится к надежности.
Точнее будет:
А как известно - чем больше исходный текст программы, тем больше в нем количество ошибок - это прямо относится к надежности.
Вот и я об том же... что текст в 4 раза короче - будет иметь в 4 раза (в худшем случае) частоту ошибок периода выполнения (очень важно! - не нужно мне долдонить про ошибки компиляции).
Первоначально опубликовано Olej
А что - у STL нет исходного кода ? или он непогрешим и сразу был дан в одной единственно верной версии ? И платформенных зависимостей в нем нет ? (вот это уже не помню)
Первоначально опубликовано evgen
Чудес не бывает - процессор не может умножать и складывать числа быстрее чем он это делает.
Чудеса тоже бывают... но, как учит закон термодинамики, 2-й, кажется - о-о-о-чень редко ;-).
Но ускорение STL-реализаций происходит без вмешательства чудес. На то есть много (и даже очень много, чтоб все их перечислять в форуме) оснований. Многие их них отлично обсуждаются в переводе: Мейерс С. Эффективное использование STL. Библиотека программиста. - СПб.: Питер, 2002. Но есть и другие, связанные с особенностью задач обработки данных и управления:
- обработка данных (блочных данных) часто делается циклических применением операций к данным. Традиционное решение: в цикле for применяеися функция обработки, которая в точку обработки передаётся своим указателем. STL решение: применение циклических алгоритмов STL, которым передаётся не указатель функции, а функтор (анонимный объект класса, в котором определена операция "()"). Так вот - второе решение практически всегда быстрее (от незначительных 40% до 3-7 раз, я проверял эти цифры!) за счёт того, что в этом случае компилятор имеет информацию и может значительно оптимизировать код.
Бред какой-то. Может таки у вас в кАнсерватории что-нибудь не так ?
При любой разумной организации программы накладные расходы на вызов функций составляет доли процента от всего объема, использование inline (явное или неявное ) еще больше уменьшает. Использование STL в данном случае эквивалентно switch'у c кучей циклов for, в каждом из которых вызывается своя функция обработки. Вы скажете - вариант с STL - короче, а я скажу - что менее надежен и недоступен для отладчика.
Первоначально опубликовано Olej
- а это уже совсем не так очевидно: очень часто в потоковой обработке экспериментальных данных (в той же цифровой обработке сигналов, но не только) - над потоком данных производится, часто не в один проход, некоторая предварительная "чистка", когда некоторые фрагменты потока должны быть квалифицированы как "запорченные" и выброшены... В традиционном решении у вас есть на выбор:
а).уплотнять данные, перемещая большие объёмы на место устраняемых б).отмечать устраняемые данные "флагом"... а потом при многократных циклах обработки этот флаг - обходить. В STL решении, например list<X> - у вас нет этих проблем! И итоговый выигрыш с лихвой перекрывает потери на элементарных операциях, связанных с доступом к более сложной структуре. Проверено - на нескольких реальных задачах, имеющих практическую ценность - до 2-2.5 раз.
Вы делаете мне смешно. добавьте в традиционное решение "в) использовать структуру данных "список"" и уже тогда сравнивайте его производительнось с вариантом на STL и уже тогда делайте выводы.
Сравнивать быстродействие можно только для эквивалентных алгоритмов - что для STA специалиста должно быть так же ясно, как для физиков/конструторов знание о том, что киллограммы можно сравнивать только с километрами, но никак не секундами.
SY,
EK
Первоначально опубликовано evgen
Я человек простой - от сохи. т.е. от станка. И мне все эти теоретические изыски мало волнуют.
Ясно. Навроде Льва Толстого...
"Чукча не читатель - чукча писатель"(с).
Первоначально опубликовано evgen
Делать мне больше нечего - бред всякий читать.
Александреску - на сегодня один из основных идеологов развития С++, на него ссылаются, с ним координируются...
Бред...
Ну, давайте тогда Александреску посоветуем читать evgen-а?
Нам то вдвоём с вами спорить и доказывать нечего - разговор слепого с глухим (кем вам больше нравится числиться ;-)).
Единственный смысл этого - может кто 3-й почитает, и полезны ему окажутся ссылки, которые я называл...
Первоначально опубликовано evgen
Это лирика. Покажите возможность онлайн на живом объекте и риалтайм отладки кода, который в темплейтах наворочен - тогда можно и про разруху.
Да не должен я, и не буду вам ничего "показывать"...
И никому не должен.
И никто вам ничего не должен.
А то во многих форумах заладили, прямо модой стало: аргументы им давай, покажи...
Вас для того, чтоб "аргументы и покажи" - в высшей школе и далее - учили чему? Вот и придумывайте сами... ;-)
Я вот - использую и templates и STL, и жалею что раньше не использовал, и другим советую... Так же точно, как вы - не используете... Чего тут доказывать?
Первоначально опубликовано evgen
говорят - разработчики не одного проекта с соусфорджа. И не только оттуда. Mesa, Squid, Autotrace, Bogofilter и другие. Этого мало ?
Этого - мало!
Всё, что вы назвали, как одно - это всё универсальные, перепортируемые из одной OS в другую приложения... Для которых важно только одно - переносимость. Которые с ПО, работающим с оборудованием - никак не соприкасаются и близко...
Так что пример - хорош! ;-)
Первоначально опубликовано evgen
Грабли были при попытке портирования
... об чём и я.
Первоначально опубликовано evgen
Бред какой-то. Может таки у вас в кАнсерватории что-нибудь не так ?
....
....
Ничего не могу сказать про кансерватории...
Но я вам пересказал (собственно - не вам, вам оно не надо, может кому пригодится...) - достаточно очевидные и известные вещи: сначала я на это напоролся сам, а потом видел у Мэйерса и в ссылках на него...
Т.е.: берём указанный букварь в руки - и читаем... Там всё очень доходчиво, по 3 раза повторено...
Первоначально опубликовано evgen
Вы делаете мне смешно. добавьте в традиционное решение "в) использовать структуру данных "список"" и уже тогда сравнивайте его производительнось с вариантом на STL и уже тогда делайте выводы.
Я не делаю вам смешно - мне как-то делать вам смешно ... до фени...
А вот то, что вы пишете - я вот это когда-то и делал, до поры до времени. Только то, что вы пишете - это и есть "ручная" реализация STL буква в букву, с той лишь разницей, что на 1 строку приложения STL-реализации - приходится 20-25 строк "ручной реализации" (о чём говорилось выше)... А по сути - это абсолютно одно и то же, поэтому именно эту реализацию я и не сравнивал. "Масло маслянное". С той ещё разницей, что в "ручной" реализации вы ещё наделаете своих ошибок кучу, а эффективность её будет существенно хуже...
Первоначально опубликовано Olej
Первоначально опубликовано evgen
Это лирика. Покажите возможность онлайн на живом объекте и риалтайм отладки кода, который в темплейтах наворочен - тогда можно и про разруху.
Да не должен я, и не буду вам ничего "показывать"...
И никому не должен.
И никто вам ничего не должен.
А то во многих форумах заладили, прямо модой стало: аргументы им давай, покажи...
Вас для того, чтоб "аргументы и покажи" - в высшей школе и далее - учили чему? Вот и придумывайте сами... ;-)
Я вот - использую и templates и STL, и жалею что раньше не использовал, и другим советую... Так же точно, как вы - не используете... Чего тут доказывать?
да не надо ничего доказывать - рано или поздно сами встанете на эти грабли.
Первоначально опубликовано Olej
Первоначально опубликовано evgen
говорят - разработчики не одного проекта с соусфорджа. И не только оттуда. Mesa, Squid, Autotrace, Bogofilter и другие. Этого мало ?
Этого - мало!
Всё, что вы назвали, как одно - это всё универсальные, перепортируемые из одной OS в другую приложения... Для которых важно только одно - переносимость. Которые с ПО, работающим с оборудованием - никак не соприкасаются и близко...
Так что пример - хорош! ;-)
Привер хорош! Только он показывает насколько вы глубоко в танке сидите. Mesa уже давно с железом работает.
SY,
EK
Первоначально опубликовано Olej
Первоначально опубликовано evgen
Бред какой-то. Может таки у вас в кАнсерватории что-нибудь не так ?
....
....
Я не делаю вам смешно - мне как-то делать вам смешно ... до фени...
А вот то, что вы пишете - я вот это когда-то и делал, до поры до времени. Только то, что вы пишете - это и есть "ручная" реализация STL буква в букву, с той лишь разницей, что на 1 строку приложения STL-реализации - приходится 20-25 строк "ручной реализации" (о чём говорилось выше)... А по сути - это абсолютно одно и то же, поэтому именно эту реализацию я и не сравнивал. "Масло маслянное". С той ещё разницей, что в "ручной" реализации вы ещё наделаете своих ошибок кучу, а эффективность её будет существенно хуже...
Ктож вам доктор, если вы в 25 строках делаете кучу ошибок - то вам тогда вообще программированием заниматься противопоказано. При большом умении можно в и одной строке STL-реализации наделать кучу ошибок. И потом долго и упорно искать где она происходит.
SY,
EK
Первоначально опубликовано evgen
Ктож вам доктор, если вы в 25 строках делаете кучу ошибок - то вам тогда вообще программированием заниматься противопоказано.
Вы вообще - читаете то, на что отвечаете?
...на 1 строку - 25,
...на 10 - 250,
...на 100 - 2500
...
Помните, в 6-м классе средней школы проходили... "пропорции"?
Пренепременно повторить!
Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме