Pull to refresh
86
12
Евгений Охотников @eao197

Велосипедостроитель, программист-камикадзе

Большое спасибо за лестную оценку.

Дело в том, что лично я никогда не видел в продуктовом-работающем коде эти расширения, эти стандартные решения (как вам больше нравится?).

Простите, чего вы не видели в продуктовом-работающем коде, 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 можно считать стандартными средствами, это очень интересный вопрос

А почему это std::function и std::bind нельзя считать стандартными средствами?

:)

Надо сказать, что у автора получился кликбейтный заголовок в хорошем смысле этого слова. Как бы странно это не звучало :)

Спасибо за интересную статью!
Но позволю себе позанудствовать: на моей памяти "Си-с-классами" было принято называть C++ до появления в нем шаблонов. У вас же шаблоны используются вполне себе активно, местами только они и используются ;)
Так что вы описали вполне себе modern C++, особенно вот в этом фрагменте (а ведь многие еще себе и C++17 позволить не могут):

namespace furi::mutex {
  constexpr inline auto& acquire = ::furi_mutex_acquire;
}

а не "Си-с-классами".

Впрочем, полезность и интересность статьи это никак не умаляет.

Почти под всеми пунктами подпишусь, сам проходил когда-то через такой способ написания и поддержки кросс-платформенного кода и убедился в том, что это прямой путь к росту проблем по мере старения кода.
Но вот это вот:

есть такая вещь как регистр символов, у вас классы, структуры, обычные переменные, статич переменные и тд - все в нижнем регистре. Как вы их отличаете?

вы зря. В 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.

catch(exception ex) { }

Это вы std::exception и его наследников собрались ловить по значению?

Что там было конкретно, глубоко копать не стал.

Пожалуй, это ключевое. Остается только сказать "вопросов больше не имею".

Знаете, у меня сложилось впечатление, что Вы либо очень крутой гуру в С++, либо у Вас очень мало практического опыта в разработке.

Вы не угадали ни там, ни там.

Но я (да и полагаю, не только я) был бы признателен, если бы вы оперировали фактами, а не аналогиями. Типа: использовал такой-то шаблон с таким-то компилятором, убедился, что генерируется туева хуча одинакового кода в разных единицах трансляции, которые затем не убираются линкером и это оказалось недопустимо, переписал на вызовы Си-шных функций и количество кода пришло в норму.

Information

Rating
380-th
Location
Гомель, Гомельская обл., Беларусь
Registered
Activity