ощущение, будто львиный пласт навыков становится ненужным
Ну так это и есть причина для:
в комментах довольно часто можно встретить мнение, что плюсы становятся хуже, комитет делает непонятно что непонятно зачем, и вообще верните мне мой 2007-й
Раньше человек мог с гордым видом наколдовать что-то типа
for (std::map<int, std::string>::const_iterator it = Map.begin(); ...
и чувствовать себя чуть ли не небожителем.
А с этими их новшествами и упрощениями шокировать джуниоров и случайных прохожих становится всё сложнее и сложнее.
Нихрена ты не разработчик
сойдите с этой планеты
можно просто уйти в монастырь
если не практикуешься, то забываешь
разработчикам очень обидно
отращивайте себе скилл с харизмой заново
не тащите ссылки на былые успехи
В тексте чувствуется знатная попаболь.
Дайте погадаю. У «настоящего разработчика» случился факап, пришел «какой-то менеджер» (совсем не настоящий же!!11), показал мастер-класс и теперь перед коллегами неудобно?
Разработчик — это, прежде всего, склад ума и понимание CS в целом, а не уверенное жонглирование очередным JS-фреймворком, имя которым легион.
Код — не велосипед, да (хотя у кого как). Знания — велосипед.
Если человек знает фундаментальные принципы разработки, структур данных, оценки сложности алгоритмов и т.п. — это уже не пропьёшь, он освоит любой язык за два дня, даже если писал последний раз в 80-х.
[[nodiscard]] теперь можно навешивать на конструкторы и целые классы
Не совсем понятно, каким боком тут «целые классы»:
«The attribute-token nodiscard may be applied to the declarator-id in a function declaration or to the declaration of a class or enumeration» (n4713.pdf, C++17).
людьми, которые реально думают о производительности
«У меня есть молоток C++ и теперь всё вокруг гвозди нуждается в оптимизации».
Люди, верящие, что они и без профайлера знают, что надо делать, могут себя не жалеть, о родине производительности думать, и неделю ковырять конструктор, чтобы идеально передавать строку во всех возможных вариантах.
Закончив в пятницу и убедившись, что они ускорили код в 10 (допустим) раз они идут на хабр делиться мудростью и предвкушать премию, а тем временем выясняется, что:
— 10 раз — это 1 мкс вместо 10 мкс;
— этот идеально оптимизированный код вызывается исключительно в контексте чтения из / записи в БД, выполняющемся на 3 порядка дольше, и теперь работа с БД занимает не 5 с, а 5 с;
— либо этот код вызывается исключительно когда пользователь заполняет форму, и заполнение формы теперь занимает не от 2 минут до 3 часов, а от 2 минут до 3 часов;
— либо этот код вызывается 1-2 раза за всё время работы, и теперь программа майнит монету не неделю, а неделю;
— либо этот код в 99 случаях из ста работает с джонами смитами, элтонами джонами и риками санчезами, и только в одном случае с даздрапермой череззаборногузадерищенской, так что SSO превращает все ручные оптимизации в тыкву;
— либо этот класс всегда живет меньше, чем его агрументы, поэтому можно было ничего не копировать и хранить указатели / ссылки;
— и т.д. и т.п.
А менеджеру такого гуру оптимизации теперь надо как-то объяснить клиенту, на что потрачена неделя и за что тот заплатил условный килобакс денег.
Ну и решить, что дальше делать с гурой.
вы хотите сделать копию данных и передать её в класс, это нужно делать явно на стороне вызывающего
Я? Нет, лично я не хочу делать копию.
Если class person хочет у себя внутри иметь копию строк — это его право и, в общем случае, детали реализации.
Сваливая бремя конструирования этих строк на клиента, вы потенциально загрязняете ему код:
std::string_view First = ..., Last = ...;
person Person{std::string{First}, std::string{Last}};
— Красота же, да?
Принимайте string_view, он неявно и практически бесплатно конструируется из всего, и копируйте его потом себе как хотите (если надо).
Единственный «недостаток» — да, нельзя переместить rvalue-строку внутрь объекта (и этим сэкономить аж одно копирование). Если у вас есть сомнения в эффективности — сначала профилируйте, и только если вы действительно можете что-то выиграть на этих временных объектах — оптимизируйте.
reader.Peek(); //Вот так нужно заглянуть в файл, чтобы получить его кодировку.
fileEncoding = reader.CurrentEncoding;
fileContents = reader.ReadToEnd();
Я не настоящий сварщик, но, сдаётся мне, вы комментарием пытаетесь прикрыть говнокод.
Там же сразу после этого всё содержимое файла читается, автодетект на нем сработает. Берите CurrentEncoding после ReadToEnd() и никаких Peek не надо.
Если это действительно так, то вы сделали сильно хуже.
Отсутствие комментария может побудить кого-нибудь воскликнуть «WTF?», разобраться и исправить, а с комментарием вида «так надо» эта копипаста со StackOwerflow будет цвести еще очень долго, «накопляя мелкие детали и постепенно захламляя некогда чистый код».
И тогда правительство скорее всего пойдет на попятный
Блажен, кто верует.
Правительство может пойти на попятный только в одном случае — если оно хочет законно остаться на следующий срок, а текущий курс не пользуется популярностью у избирателей (это, однако, подразумевает наличие честных выборов, сменяемости власти и других концепций, напрямую не относящихся к тематике этого ресурса).
I think both Mozilla and Google should intervene into this situation because it can create a dangerous precedent, nullifying all the efforts of encofcing HTTPS.
Это какой-то эталон инфантильности — «нас тут прослушивают, пусть дядя за океаном им как-то помешает!».
Завтра вам очередная квазигосударственная IT-контора сделает национальный браузер с вшитым сертификатом и придет SMS с указанием им пользоваться. Куда вы будете жаловаться — в спортлото?
Проблемы жителей Казахстана могут решить только жители Казахстана.
О, всегда приятно встретить эксперта.
Вы хотите сказать, что для комплятора в compile-time цикл феерически сложнее, чем рекурсия, поэтому время компиляции будет в разы больше, я правильно понимаю?
в С++17 по идее можно использовать рекурсивную лямбда constexpr функцию, но не уверен, что это приведет хоть к каким-то упрощениям, а также не усложнит ассемблерный порядок.
Зачем лямбды, у вас и так уже как-то всё очень сложно — рекурсия, дополнительные аргументы…
Даже на C++14 уже вполне можно так:
constexpr uint32_t bit_num_from_value_cpp14_v2(uint32_t val)
{
uint32_t i = 0;
while (1 << i != val) ++i;
return i;
}
При определенных масштабах и грамотной организации (и автоматизации) процесса и для одного работы нет. В таких случаях бывает проще / выгоднее / надёжнее аутсорсить.
А риски каждый бизнес, естественно, оценивает сам, как и то, что ему выгоднее — переплачивать понемногу, но постоянно, или экономить, но если не повезёт — лечь надолго, если не насовсем.
Строки вам чем не угодили?
Это вам кто-нибудь сказал или вы сами решили?
Раньше человек мог с гордым видом наколдовать что-то типа
и чувствовать себя чуть ли не небожителем.
А с этими их новшествами и упрощениями шокировать джуниоров и случайных прохожих становится всё сложнее и сложнее.
А конкретно в вашем примере (const T& x, const T& y) комбинаторного взрыва не будет. Думаю, очевидно, почему.
"Да не пригорает у меня!!!111" ©
В тексте чувствуется знатная попаболь.
Дайте погадаю. У «настоящего разработчика» случился факап, пришел «какой-то менеджер» (совсем не настоящий же!!11), показал мастер-класс и теперь перед коллегами неудобно?
Разработчик — это, прежде всего, склад ума и понимание CS в целом, а не уверенное жонглирование очередным JS-фреймворком, имя которым легион.
Код — не велосипед, да (хотя у кого как). Знания — велосипед.
Если человек знает фундаментальные принципы разработки, структур данных, оценки сложности алгоритмов и т.п. — это уже не пропьёшь, он освоит любой язык за два дня, даже если писал последний раз в 80-х.
Не совсем понятно, каким боком тут «целые классы»:
«The attribute-token nodiscard may be applied to the declarator-id in a function declaration or to the declaration of a class or enumeration» (n4713.pdf, C++17).
Да и в пейпере речь только о конструкторах.
«У меня есть
молотокC++ и теперь всё вокруггвоздинуждается в оптимизации».Люди, верящие, что они и без профайлера знают, что надо делать, могут себя не жалеть, о
родинепроизводительности думать, и неделю ковырять конструктор, чтобы идеально передавать строку во всех возможных вариантах.Закончив в пятницу и убедившись, что они ускорили код в 10 (допустим) раз они идут на хабр делиться мудростью и предвкушать премию, а тем временем выясняется, что:
— 10 раз — это 1 мкс вместо 10 мкс;
— этот идеально оптимизированный код вызывается исключительно в контексте чтения из / записи в БД, выполняющемся на 3 порядка дольше, и теперь работа с БД занимает не 5 с, а 5 с;
— либо этот код вызывается исключительно когда пользователь заполняет форму, и заполнение формы теперь занимает не от 2 минут до 3 часов, а от 2 минут до 3 часов;
— либо этот код вызывается 1-2 раза за всё время работы, и теперь программа майнит монету не неделю, а неделю;
— либо этот код в 99 случаях из ста работает с джонами смитами, элтонами джонами и риками санчезами, и только в одном случае с даздрапермой череззаборногузадерищенской, так что SSO превращает все ручные оптимизации в тыкву;
— либо этот класс всегда живет меньше, чем его агрументы, поэтому можно было ничего не копировать и хранить указатели / ссылки;
— и т.д. и т.п.
А менеджеру такого гуру оптимизации теперь надо как-то объяснить клиенту, на что потрачена неделя и за что тот заплатил условный килобакс денег.
Ну и решить, что дальше делать с гурой.
«Premature optimization is the root of all evil». ©
Замеряйте.
Я? Нет, лично я не хочу делать копию.
Если class person хочет у себя внутри иметь копию строк — это его право и, в общем случае, детали реализации.
Сваливая бремя конструирования этих строк на клиента, вы потенциально загрязняете ему код:
— Красота же, да?
Принимайте string_view, он неявно и практически бесплатно конструируется из всего, и копируйте его потом себе как хотите (если надо).
Единственный «недостаток» — да, нельзя переместить rvalue-строку внутрь объекта (и этим сэкономить аж одно копирование). Если у вас есть сомнения в эффективности — сначала профилируйте, и только если вы действительно можете что-то выиграть на этих временных объектах — оптимизируйте.
Я не настоящий сварщик, но, сдаётся мне, вы комментарием пытаетесь прикрыть говнокод.
Там же сразу после этого всё содержимое файла читается, автодетект на нем сработает. Берите CurrentEncoding после ReadToEnd() и никаких Peek не надо.
Если это действительно так, то вы сделали сильно хуже.
Отсутствие комментария может побудить кого-нибудь воскликнуть «WTF?», разобраться и исправить, а с комментарием вида «так надо» эта копипаста со StackOwerflow будет цвести еще очень долго, «накопляя мелкие детали и постепенно захламляя некогда чистый код».
Правительство может пойти на попятный только в одном случае — если оно хочет законно остаться на следующий срок, а текущий курс не пользуется популярностью у избирателей (это, однако, подразумевает наличие честных выборов, сменяемости власти и других концепций, напрямую не относящихся к тематике этого ресурса).
Завтра вам очередная квазигосударственная IT-контора сделает национальный браузер с вшитым сертификатом и придет SMS с указанием им пользоваться. Куда вы будете жаловаться — в спортлото?
Проблемы жителей Казахстана могут решить только жители Казахстана.
иллюзию полного и явного контроля.
Совет, безусловно, справедливый, но программисту и преподавателю в 35 пора бы уже различать.
Вы точно про C++ пишете?
Вы хотите сказать, что для комплятора в compile-time цикл феерически сложнее, чем рекурсия, поэтому время компиляции будет в разы больше, я правильно понимаю?
Зачем лямбды, у вас и так уже как-то всё очень сложно — рекурсия, дополнительные аргументы…
Даже на C++14 уже вполне можно так:
А риски каждый бизнес, естественно, оценивает сам, как и то, что ему выгоднее — переплачивать понемногу, но постоянно, или экономить, но если не повезёт — лечь надолго, если не насовсем.