Re: Объясните динозавру
От: McQwerty Россия  
Дата: 11.04.14 08:58
Оценка:
А>Почему это хорошо
А>
А>BOOST_FOREACH(auto& file_name, files)
А>

А>а это
А>
А>for (auto i = files.begin(); i != files.end(); i++)
А>


Изучение первого варианта требует дополнительного времени и возможно только после изучения второго. Значит программист может заработать больше, поскольку это знание позволяет написать в резюме не просто "C++/STL", а уже "C++/STL/boost".

А>"ржу не могу всем отделом LOL" ???
Re[5]: Объясните динозавру
От: Evgeny.Panasyuk Россия  
Дата: 11.04.14 09:01
Оценка:
Здравствуйте, niXman, Вы писали:

EP>>Не может такого быть, из-за mutable или хотя бы указателей. Компилятору нужно доказать что результат не меняется.

X>просто проверь.

То что он сможет доказать, особенно после inline'а, и "вызывать" только один раз — я не сомневаюсь.
Вопрос в том как именно он это докажет. Я думаю вряд ли только по const на методах — для этого ещё потребуются атрибуты, так как const никак не достаточно.
А вот после inline'инга, да ещё и в SSA — без проблем.
Re[2]: Объясните динозавру
От: Evgeny.Panasyuk Россия  
Дата: 11.04.14 09:05
Оценка:
Здравствуйте, McQwerty, Вы писали:

А>>Почему это хорошо

А>>
А>>BOOST_FOREACH(auto& file_name, files)
А>>

А>>а это
А>>
А>>for (auto i = files.begin(); i != files.end(); i++)
А>>

MQ>Изучение первого варианта требует дополнительного времени и возможно только после изучения второго.

Неверно. Можно пользоваться первым вариантом, даже не зная второй.
Мой любимый пример — книга Страуструпа Programming -- Principles and Practice Using C++ — std::vector вводится где-то на сотой странице, а new только где-то в середине, странице на пятисотой.
Re[2]: Объясните динозавру
От: rusted Беларусь  
Дата: 11.04.14 09:05
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>end() вычисляется каждый раз, на практике эта операция не может быть закеширована в регистр или стек.

AG>в случае первого варианта end() вычисляется оидн раз.

Если заморачиваться такими мелкими не-оптимальностями, то стоит также отметить, что boost::algorithm::ends_with из первого варианта будет на каждой итерации считать длину параметра-литерала. И если ставить цель "ни такта в пустую", то хорошо бы туда передавать размер, уже известный на этапе компиляции, с помощью какого-нибудь варианта string_view.

На практике все эти оптимизации — попытки сэкономить на спичках, сложно представить ситуацию, в которой производительность этого сравнения может хоть как-то проявиться. В данном случае само заполнение списка файлов займет на несколько порядков больше времени, чем эти проверки.
Re[3]: Объясните динозавру
От: Evgeny.Panasyuk Россия  
Дата: 11.04.14 09:11
Оценка:
Здравствуйте, rusted, Вы писали:

R>Если заморачиваться такими мелкими не-оптимальностями, то стоит также отметить, что boost::algorithm::ends_with из первого варианта будет на каждой итерации считать длину параметра-литерала.


Длина литерала известна в compile time, ends_with — это шаблон, то есть принимает range'ы без потерь этой информации. Если там как-то внутри не сильно накрутили — у компилятора есть вся информация чтобы не вычислять длину, а использоваться константу.
Re[3]: Объясните динозавру
От: dead0k  
Дата: 11.04.14 09:14
Оценка:
Здравствуйте, rusted, Вы писали:

R>Если заморачиваться такими мелкими не-оптимальностями

Оптимизациями не имеет смысл заморачиваться не потому, что тама что-то сколько-то раз вызывается внутре, а потому, что мы ничего не знаем о типах. Может контейнер files работает по сети, телеграфу, ямщиками...
Re: Объясните динозавру
От: Кодт Россия  
Дата: 11.04.14 09:17
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Почему это хорошо


Это не хорошо. Ручная проверка расширения файла.
Если нет упора на высокую производительность, то лучше посмотреть в сторону boost::filesystem::path, а если есть — написать корректную функцию проверки расширения.
(Нынешняя реализация проглатывает "helloworldll" и "thisis.notdll")

А>а это

А>"ржу не могу всем отделом LOL" ???

Если есть auto, то должен быть и новый синтаксис
for(const auto& file_name : files)

Да и внутри уровень велосипеделия ещё выше.
Перекуём баги на фичи!
Re[2]: Объясните динозавру
От: saf_e  
Дата: 11.04.14 09:19
Оценка: +1
Здравствуйте, Кодт, Вы писали:

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


А>>Почему это хорошо


К>Это не хорошо. Ручная проверка расширения файла.

К>Если нет упора на высокую производительность, то лучше посмотреть в сторону boost::filesystem::path, а если есть — написать корректную функцию проверки расширения.
К>(Нынешняя реализация проглатывает "helloworldll" и "thisis.notdll")

А>>а это

А>>"ржу не могу всем отделом LOL" ???

К>Если есть auto, то должен быть и новый синтаксис

К>
К>for(const auto& file_name : files)
К>

К>Да и внутри уровень велосипеделия ещё выше.

не совсем, 10 студия этого не умеет
Re[2]: Объясните динозавру
От: tdiff  
Дата: 11.04.14 09:34
Оценка: +1
Здравствуйте, Кодт, Вы писали:

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


А>>Почему это хорошо


К>Это не хорошо. Ручная проверка расширения файла.

К>Если нет упора на высокую производительность, то лучше посмотреть в сторону boost::filesystem::path, а если есть — написать корректную функцию проверки расширения.
К>(Нынешняя реализация проглатывает "helloworldll" и "thisis.notdll")

Не пойму, чего все привязались к проверке расширения Вообще же топик не о том, в нём о расширениях файлов вообще ни слова.
Re[3]: Объясните динозавру
От: Кодт Россия  
Дата: 11.04.14 11:05
Оценка:
Здравствуйте, tdiff, Вы писали:

T>Не пойму, чего все привязались к проверке расширения Вообще же топик не о том, в нём о расширениях файлов вообще ни слова.


А о чём? В одном случае два раза буст, в другом случае два раза рукоделие.
И таки-да, в топике о расширениях файлов вообще слова есть.
Особенно убивает i->size()-3 — попробуй ему скормить строку "xz", узнаешь много новых слов. Говнокод детектед, неудивительно, что коллеги ржут.
Перекуём баги на фичи!
Re: Объясните динозавру
От: The Passenger СССР  
Дата: 11.04.14 11:33
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Почему это хорошо


А>[ccode]

А>BOOST_FOREACH(auto& file_name, files)

я так полагаю что бустовский форыч работал задолго до авто и позволял заменить тип контейнера
без изменения кода в этом месте
Re[4]: Объясните динозавру
От: tdiff  
Дата: 11.04.14 11:52
Оценка:
Здравствуйте, Кодт, Вы писали:

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


T>>Не пойму, чего все привязались к проверке расширения Вообще же топик не о том, в нём о расширениях файлов вообще ни слова.


К>А о чём? В одном случае два раза буст, в другом случае два раза рукоделие.

Я думаю, что топик был о том, зачем тащить в код всякие "новомодные" фичи, без которых 100 лет все жили.

К>И таки-да, в топике о расширениях файлов вообще слова есть.

Честно говоря, в сообщении автора я что-то не нахожу этих слов, может куда-то не туда смотрю.

К>Особенно убивает i->size()-3 — попробуй ему скормить строку "xz", узнаешь много новых слов. Говнокод детектед, неудивительно, что коллеги ржут.

А это просто демонстрация принципа "чем меньше кода, тем меньше ошибок", и того, что да, бездумно используя STL (да и вообще что угодно) можно оказаться в самых неожиданных положениях.
Re[5]: Объясните динозавру
От: Кодт Россия  
Дата: 11.04.14 12:00
Оценка:
Здравствуйте, tdiff, Вы писали:

К>>А о чём? В одном случае два раза буст, в другом случае два раза рукоделие.

T>Я думаю, что топик был о том, зачем тащить в код всякие "новомодные" фичи, без которых 100 лет все жили.

Пусть тогда Керниган и Ричи залогинится.

К>>И таки-да, в топике о расширениях файлов вообще слова есть.

T>Честно говоря, в сообщении автора я что-то не нахожу этих слов, может куда-то не туда смотрю.

file_name, ends_with, "dll" — самодокументируемый код
Перекуём баги на фичи!
Re[2]: Объясните динозавру
От: Ops Россия  
Дата: 11.04.14 14:56
Оценка: +2
Здравствуйте, Son of Northern Darkness, Вы писали:

SON>Второй вариант оформления цикла мне нравится больше (что может понравиться в нестандартном макросе?).


Так для очень многих этот макрос практически стандартный. Вернее, был им, до появления в языке аналогичной стандартной конструкции.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[3]: Объясните динозавру
От: Ops Россия  
Дата: 11.04.14 15:06
Оценка:
Здравствуйте, saf_e, Вы писали:

_>не совсем, 10 студия этого не умеет


Умеет, но со своим нестандартным синтаксисом — досталось из поддержки CLI, но работает и в чисто нативном коде.

http://msdn.microsoft.com/en-us/library/ms177202%28v=vs.100%29.aspx
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[4]: Объясните динозавру
От: saf_e  
Дата: 11.04.14 15:09
Оценка: +1 :)
Здравствуйте, Ops, Вы писали:

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


_>>не совсем, 10 студия этого не умеет


Ops>Умеет, но со своим нестандартным синтаксисом — досталось из поддержки CLI, но работает и в чисто нативном коде.


Ops>http://msdn.microsoft.com/en-us/library/ms177202%28v=vs.100%29.aspx


За такое в приличном обществе по рукам бьют
Re[5]: Объясните динозавру
От: Ops Россия  
Дата: 11.04.14 15:10
Оценка:
Здравствуйте, saf_e, Вы писали:

_>За такое в приличном обществе по рукам бьют


Мопед не мой, сам ни разу такое не писал
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[5]: Объясните динозавру
От: Muxa  
Дата: 11.04.14 15:14
Оценка:
К>>А о чём? В одном случае два раза буст, в другом случае два раза рукоделие.
T>Я думаю, что топик был о том, зачем тащить в код всякие "новомодные" фичи, без которых 100 лет все жили.
Новомодные фичи в данном конкретном случае помогают избавиться от части багов в коде (имяфайла короче 3-х символов).

К>>И таки-да, в топике о расширениях файлов вообще слова есть.

T>Честно говоря, в сообщении автора я что-то не нахожу этих слов, может куда-то не туда смотрю.
Да,да. Автор хотел отфильтровать в том числе и такие файлы "adll", "b.cdll".
Re[5]: Объясните динозавру
От: Evgeny.Panasyuk Россия  
Дата: 11.04.14 16:50
Оценка:
Здравствуйте, saf_e, Вы писали:

Ops>>Умеет, но со своим нестандартным синтаксисом — досталось из поддержки CLI, но работает и в чисто нативном коде.

Ops>>http://msdn.microsoft.com/en-us/library/ms177202%28v=vs.100%29.aspx
_>За такое в приличном обществе по рукам бьют

Не по рукам, а канделябром по голове
Re[3]: Объясните динозавру
От: bnk СССР http://unmanagedvisio.com/
Дата: 11.04.14 17:23
Оценка:
Здравствуйте, saf_e, Вы писали:

К>>
К>>for(const auto& file_name : files)
К>>


_>не совсем, 10 студия этого не умеет


13 вполне умеет.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.