А вы не допускаете мысли, что кто-то может считать стандартом только исходный стандарт, а все последующие – расширениями стандарта?
Это можно допустить. Но всерьез воспринимать -- нет. Не зря же в C++ есть несколько стандартов: С++98, С++03, С++11, С++14, С++17, С++20. То, что описано в рамках конкретного стандарта, является частью этого стандарта. По отношению к предыдущим стандартам это уже может быть не так. Посему std::function -- это часть стандарта C++ начиная с C++11, но это нестандартная штука для C++98/03. Равно как std::auto_ptr -- это часть стандартов 98/03/11/14, но не стандарт начиная с C++17.
Если у кого-то есть отличное мнение на этот счет, то таких товарищей (которые нам совсем не товарищи) следует отправлять к врачу. И нет, сочувствовать им не обязательно.
В общем, совсем огорчили вы меня!
С такой тонкой душевной ориентацией нужно бы поосторожнее на публичных Интернет ресурсах выступать. Особенно в Рунете, где запросто могут и правду в глаза сказать не взирая на и не сочувствуя даже если.
Я был бы очень признателен, если бы вы ответы на вопросы в комментариях давали в комментариях, т.к. у меня нет возможности вставить в текст вашей статьи свои возражения по поводу того, что вы мне приписали.
Если же говорить по сути, то:
Начнем с того, что я нигде не писал, что их «нельзя считать стандартными средствами», то есть вы уже передергиваете!
Я не передергиваю ни грамма. Просто формулировка "насколько std::function и std::bind можно считать стандартными средствами, это очень интересный вопрос" означает, что если есть такой вопрос, то значит кто-то может не считать std::function и std::bind стандартными. А если так, то логично узнать "а почему?"
Вот я и задал вопрос "А почему?" минуя промежуточные рассуждения.
Вы ответили мне в тексте статьи и как прикажете теперь продолжать разговор на эту тему?
===
И да, на Habr-е, в отличии от, например, LOR-а, не принято напрямую указывать людям какое впечатление они производят. Но может вам хватит вести себя как капризному ребенку, который думает, что доносит до окружающего мира "правду" с большой буквы Пы, а его намеренно игнорируют, т.к. хотят эту правду скрыть. Такое впечатление вы производите, например, следующими высказываниями: "Мешаю я вам со своими статьями, контингент особенных специалистов (КОС) разводить, так бы и сказали!"
Спасибо за интересную статью! Но позволю себе позанудствовать: на моей памяти "Си-с-классами" было принято называть C++ до появления в нем шаблонов. У вас же шаблоны используются вполне себе активно, местами только они и используются ;) Так что вы описали вполне себе modern C++, особенно вот в этом фрагменте (а ведь многие еще себе и C++17 позволить не могут):
Почти под всеми пунктами подпишусь, сам проходил когда-то через такой способ написания и поддержки кросс-платформенного кода и убедился в том, что это прямой путь к росту проблем по мере старения кода. Но вот это вот:
есть такая вещь как регистр символов, у вас классы, структуры, обычные переменные, статич переменные и тд - все в нижнем регистре. Как вы их отличаете?
вы зря. В C++ нет де-юре официального code style, каждый проект имеет право использовать то, что нравится больше всего.
Я не думаю, что если человек скажет что у него есть опыт работы с многопоточкой, а я спрошу как он организовывал обмен данными между потоками и какие при этом возникали сложности, он
Вообще-то я вам указал на другое, а именно:
Лично мне всегда интересно как человек будет подходить к решению той или иной конкретной задачи.
И, тем более, с конкретным примером:
Нужно из БД сделать выборку по определенным условиям. В нее попадет порядка 10 000 000 записей. Каждую нужно определенным образом обработать (обработка одной записи никак не связана с обработкой остальных). Скорость обработки порядка 1 000 записей в секунду. Нужно уложиться в полчаса. Как?
Т.е. вы даете человеку общего вида задачу и далее хотите услышать его рассуждения о том, как бы он эту задачу решал.
Так вот, я вам о том, что есть люди, для которых "рассуждения в слух" не есть не то, что привычно, но это даже и ненормально.
Вы просто отфутболите таких людей. И, судя по тому, что вы пишете, вас это устраивает. Ну и нет проблем, хозяин барин. Правда, здесь мне было бы интересно узнать, а вы владеете бизнесом в который набираете персонал?
Но когда нужно сделать задачу в заданном объеме и в заданный срок - все... "Озарение не снизошло" вовремя и сроки все сорваны.
Речь не об этом. "Озарение снизошло" -- это когда есть баг, который не могут найти месяц, а потом кому-то среди ночи решение во сне приходит. Во это озарение.
Приведу пример из школы: есть класс, есть урок родного языка. Есть задача написать за 45 минут сочинение на некую тему. По итогу напишут его все равно все, хуже или лучше, но все. Однако, кто-то начнет писать сразу и у него повествование начнет выходить "прямо из под пера", а кто-то задумается минут на 10 и, возможно, несколько строчек накарябает в черновике, зато потом начнет строчить не останавливаясь, потому что у него уже все продумано.
Оценивать же нужно результирующее сочинение, а не процесс его написания.
Тогда как вы, говоря про "Лично мне всегда интересно как человек будет подходить к решению" ставите во главу угла именно процесс, а не результат.
Вопрос, видимо, в том, что вы не можете меня понять. Я вам говорю о том, что есть люди, которым вы задаете задачу вроде:
Нужно из БД сделать выборку по определенным условиям. В нее попадет порядка 10 000 000 записей. Каждую нужно определенным образом обработать (обработка одной записи никак не связана с обработкой остальных). Скорость обработки порядка 1 000 записей в секунду. Нужно уложиться в полчаса. Как?
И ожидаете, что человек заикнется про "распараллеливание на несколько потоков" и дальше вы с ним будете обсуждать про распределение записей и т.д.
А столкнетесь с тем, что человек вообще замолчит на полчаса и займется рисованием каракулей на бумаге. Чтобы через полчаса предложить вам один или два варианта, более-менее проработанных, в которых уже будут учтены какие-то граничные условия и возможные проблемы. И вот это вот вы с ним и сможете обсудить. Но не сразу, а через какое-то время, в течении которого человек и для вас, и для себя, будет выглядеть идиотом.
Собственно, проблема в том, что такого длительного ожидания на собеседовании никто не допустит.
Ну и речь не о том, что ваш подход не правильный (или что он самый правильный). Речь о том, что есть условия, когда вы не получите того, чего желаете. Но это ничего не скажет о пригодности соискателя.
Так в том-то и дело, что с некоторыми людьми вы этого не поймете. Лучший способ взаимодействовать с ними -- это дать задачу и позволить скрыться с глаз на какое-то время. Чтобы он потом вернулся к вам с решением. И уже решение можно будет обсудить. Именно решение. Пути его поиска вы не увидите. Потому что в явном виде его нет (пути этого самого): сначала ничего нет, туман и путаница, а потом "Хоп!" и вот же оно же ж.
Собственно, если вы попытаетесь попробовать проследить как человек думает на собеседовании, то вы ничего не увидите. Человек будет молчать, это молчание будет длится все дольше и дольше и от затянувшейся паузы будет не по себе всем сторонам.
Есть люди (вроде меня), которые получив какую-то задачу на первое время впадают в состояние абсолютного тумана в голове. Нет никаких внятных мыслей, в голове роятся разрозненные отрывки из обрывков. Вроде "так, если здесь вот это, то..." и потом обрывается, а вместо этого приходит "а вот если здесь вот так, то..." и потом опять обрывается, чтобы смениться следующим обрывком совсем другой мысли. И так длится какое-то время (в зависимости от задачи от десятка минут до нескольких дней, а то и недель). Чтобы потом внезапно (действительно внезапно, это не фигура речи) туман вдруг отступил и проявились очертания вполне себе четкого решения и вот уже дальше все идет "как по писанному".
Так вот проблема в том, что если в момент "тумана в голове" у меня кто-то будет выпытывать логические построения, то выглядеть я буду, мягко говоря, идиотом. Пык-мык и "не знаю", "не думаю", "не представляю" + рисование ничего не значащих каракулей на бумаге.
В общем, ваш интерес к тому, как человек подходит к решению с некоторыми персонажами не будет удовлетворен. Вы, скорее, разочаруетесь и придете к выводу, что перед вами какой-то самозванец, который на прошлых местах работы выезжал за счет чужого труда, а сам ничего придумать не может.
T& operator=(const T &rhs) {
n = rhs.n;
delete s1;
s1 = new S(rhs.s1);
return *this;
}
Если исключения в проекте не отключены, то потенциально new может бросить std::bad_alloc. В этом случае в this->s1 остается старое и, возможно, ненулевое значение. Которое затем будет передано в delete в деструкторе. И получим double free.
Знаете, у меня сложилось впечатление, что Вы либо очень крутой гуру в С++, либо у Вас очень мало практического опыта в разработке.
Вы не угадали ни там, ни там.
Но я (да и полагаю, не только я) был бы признателен, если бы вы оперировали фактами, а не аналогиями. Типа: использовал такой-то шаблон с таким-то компилятором, убедился, что генерируется туева хуча одинакового кода в разных единицах трансляции, которые затем не убираются линкером и это оказалось недопустимо, переписал на вызовы Си-шных функций и количество кода пришло в норму.
Большое спасибо за лестную оценку.
Простите, чего вы не видели в продуктовом-работающем коде, std::function и std::bind?
Это можно допустить. Но всерьез воспринимать -- нет.
Не зря же в C++ есть несколько стандартов: С++98, С++03, С++11, С++14, С++17, С++20. То, что описано в рамках конкретного стандарта, является частью этого стандарта. По отношению к предыдущим стандартам это уже может быть не так. Посему std::function -- это часть стандарта C++ начиная с C++11, но это нестандартная штука для C++98/03. Равно как std::auto_ptr -- это часть стандартов 98/03/11/14, но не стандарт начиная с C++17.
Если у кого-то есть отличное мнение на этот счет, то таких товарищей (которые нам совсем не товарищи) следует отправлять к врачу. И нет, сочувствовать им не обязательно.
С такой тонкой душевной ориентацией нужно бы поосторожнее на публичных Интернет ресурсах выступать. Особенно в Рунете, где запросто могут и правду в глаза сказать не взирая на и не сочувствуя даже если.
Я был бы очень признателен, если бы вы ответы на вопросы в комментариях давали в комментариях, т.к. у меня нет возможности вставить в текст вашей статьи свои возражения по поводу того, что вы мне приписали.
Если же говорить по сути, то:
Я не передергиваю ни грамма. Просто формулировка "насколько std::function и std::bind можно считать стандартными средствами, это очень интересный вопрос" означает, что если есть такой вопрос, то значит кто-то может не считать std::function и std::bind стандартными. А если так, то логично узнать "а почему?"
Вот я и задал вопрос "А почему?" минуя промежуточные рассуждения.
Вы ответили мне в тексте статьи и как прикажете теперь продолжать разговор на эту тему?
===
И да, на Habr-е, в отличии от, например, LOR-а, не принято напрямую указывать людям какое впечатление они производят. Но может вам хватит вести себя как капризному ребенку, который думает, что доносит до окружающего мира "правду" с большой буквы Пы, а его намеренно игнорируют, т.к. хотят эту правду скрыть. Такое впечатление вы производите, например, следующими высказываниями: "Мешаю я вам со своими статьями, контингент особенных специалистов (КОС) разводить, так бы и сказали!"
А почему это std::function и std::bind нельзя считать стандартными средствами?
:)
Надо сказать, что у автора получился кликбейтный заголовок в хорошем смысле этого слова. Как бы странно это не звучало :)
Спасибо за интересную статью!
Но позволю себе позанудствовать: на моей памяти "Си-с-классами" было принято называть C++ до появления в нем шаблонов. У вас же шаблоны используются вполне себе активно, местами только они и используются ;)
Так что вы описали вполне себе modern C++, особенно вот в этом фрагменте (а ведь многие еще себе и C++17 позволить не могут):
а не "Си-с-классами".
Впрочем, полезность и интересность статьи это никак не умаляет.
Почти под всеми пунктами подпишусь, сам проходил когда-то через такой способ написания и поддержки кросс-платформенного кода и убедился в том, что это прямой путь к росту проблем по мере старения кода.
Но вот это вот:
вы зря. В C++ нет де-юре официального code style, каждый проект имеет право использовать то, что нравится больше всего.
Это не так.
Вообще-то я вам указал на другое, а именно:
И, тем более, с конкретным примером:
Т.е. вы даете человеку общего вида задачу и далее хотите услышать его рассуждения о том, как бы он эту задачу решал.
Так вот, я вам о том, что есть люди, для которых "рассуждения в слух" не есть не то, что привычно, но это даже и ненормально.
Вы просто отфутболите таких людей. И, судя по тому, что вы пишете, вас это устраивает. Ну и нет проблем, хозяин барин. Правда, здесь мне было бы интересно узнать, а вы владеете бизнесом в который набираете персонал?
Речь не об этом. "Озарение снизошло" -- это когда есть баг, который не могут найти месяц, а потом кому-то среди ночи решение во сне приходит. Во это озарение.
Приведу пример из школы: есть класс, есть урок родного языка. Есть задача написать за 45 минут сочинение на некую тему. По итогу напишут его все равно все, хуже или лучше, но все. Однако, кто-то начнет писать сразу и у него повествование начнет выходить "прямо из под пера", а кто-то задумается минут на 10 и, возможно, несколько строчек накарябает в черновике, зато потом начнет строчить не останавливаясь, потому что у него уже все продумано.
Оценивать же нужно результирующее сочинение, а не процесс его написания.
Тогда как вы, говоря про "Лично мне всегда интересно как человек будет подходить к решению" ставите во главу угла именно процесс, а не результат.
Очевидно так.
Очевидно, что вы меня не услышали.
Возможно, просто редко сталкиваются.
Вопрос, видимо, в том, что вы не можете меня понять. Я вам говорю о том, что есть люди, которым вы задаете задачу вроде:
И ожидаете, что человек заикнется про "распараллеливание на несколько потоков" и дальше вы с ним будете обсуждать про распределение записей и т.д.
А столкнетесь с тем, что человек вообще замолчит на полчаса и займется рисованием каракулей на бумаге. Чтобы через полчаса предложить вам один или два варианта, более-менее проработанных, в которых уже будут учтены какие-то граничные условия и возможные проблемы. И вот это вот вы с ним и сможете обсудить. Но не сразу, а через какое-то время, в течении которого человек и для вас, и для себя, будет выглядеть идиотом.
Собственно, проблема в том, что такого длительного ожидания на собеседовании никто не допустит.
Ну и речь не о том, что ваш подход не правильный (или что он самый правильный). Речь о том, что есть условия, когда вы не получите того, чего желаете. Но это ничего не скажет о пригодности соискателя.
Игрострой накладывает какой-то собственный отпечаток на то, какие вопросы задают на собеседовании.
Я правильно понимаю, что вы из игростроя?
Так в том-то и дело, что с некоторыми людьми вы этого не поймете. Лучший способ взаимодействовать с ними -- это дать задачу и позволить скрыться с глаз на какое-то время. Чтобы он потом вернулся к вам с решением. И уже решение можно будет обсудить. Именно решение. Пути его поиска вы не увидите. Потому что в явном виде его нет (пути этого самого): сначала ничего нет, туман и путаница, а потом "Хоп!" и вот же оно же ж.
Собственно, если вы попытаетесь попробовать проследить как человек думает на собеседовании, то вы ничего не увидите. Человек будет молчать, это молчание будет длится все дольше и дольше и от затянувшейся паузы будет не по себе всем сторонам.
Есть люди (вроде меня), которые получив какую-то задачу на первое время впадают в состояние абсолютного тумана в голове. Нет никаких внятных мыслей, в голове роятся разрозненные отрывки из обрывков. Вроде "так, если здесь вот это, то..." и потом обрывается, а вместо этого приходит "а вот если здесь вот так, то..." и потом опять обрывается, чтобы смениться следующим обрывком совсем другой мысли. И так длится какое-то время (в зависимости от задачи от десятка минут до нескольких дней, а то и недель). Чтобы потом внезапно (действительно внезапно, это не фигура речи) туман вдруг отступил и проявились очертания вполне себе четкого решения и вот уже дальше все идет "как по писанному".
Так вот проблема в том, что если в момент "тумана в голове" у меня кто-то будет выпытывать логические построения, то выглядеть я буду, мягко говоря, идиотом. Пык-мык и "не знаю", "не думаю", "не представляю" + рисование ничего не значащих каракулей на бумаге.
В общем, ваш интерес к тому, как человек подходит к решению с некоторыми персонажами не будет удовлетворен. Вы, скорее, разочаруетесь и придете к выводу, что перед вами какой-то самозванец, который на прошлых местах работы выезжал за счет чужого труда, а сам ничего придумать не может.
Еще касательно вот этого кода:
Если исключения в проекте не отключены, то потенциально new может бросить std::bad_alloc. В этом случае в this->s1 остается старое и, возможно, ненулевое значение. Которое затем будет передано в delete в деструкторе. И получим double free.
Это вы std::exception и его наследников собрались ловить по значению?
Пожалуй, это ключевое. Остается только сказать "вопросов больше не имею".
Вы не угадали ни там, ни там.
Но я (да и полагаю, не только я) был бы признателен, если бы вы оперировали фактами, а не аналогиями. Типа: использовал такой-то шаблон с таким-то компилятором, убедился, что генерируется туева хуча одинакового кода в разных единицах трансляции, которые затем не убираются линкером и это оказалось недопустимо, переписал на вызовы Си-шных функций и количество кода пришло в норму.