Fuck the standards!

TR1 уже давно вышел. Это хорошо. Студия 2008 и 2010 уже включают его по умолчанию. Это просто отлично.

Стандарт (а TR1 — это де-факто уже стандарт) — это всегда хорошо. Больше нельзя называться C++ программистом и закатывать истерики при виде безобидного bind. Теперь нужно либо напрячь мозги и таки освоить основы функциональщины, либо идти заниматься гуевой мышевозней.

А еще стандарты — это плохо. Потому что любое, даже самое разумное и оправданное изменение стандарта превращается в процесс перемещения и горы и Магомета к единому стандартизированному месту встречи. И стандартно занимает до чертиков времени, да и других восполнимых и не очень ресурсов тоже дофига требует.

Вот включили они bind в стандарт. И чо (что, шо, So what, нужное подчеркнуть)? А перегруженные операторы не включили! Бо не было их еще в бусте на момент подачи черновиков в стандарт. В итоге в TR1 вот так вот не сделать:

vector<Person> myVector;
//
// Some stuff here
//
vector<Person>::iterator iter = find_if(
myVector.begin(),
myVector.end(),
bind(&Person::GetLastName, _1) == "Pupkin");

А все из-за того, что тот bind, что в TR1, не перегружает оператор «==», сцуко такой! В итоге, чтобы сделать то же самое, что на куске кода вверху, нужно городить двухуровневый bind с equal_to посередине, от вида которого даже у привычных к boost пассажиров может случится истерика:

vector<Person>::iterator iter = find_if(
myVector.begin(),
myVector.end(),
bind(equal_to<string>, "Pupkin", bind(&Person::GetLastName, _1)));

Еще можно по-старинке взять и нарисовать функтор. На каждый подобный чих. В итоге от обилия их изжога начнется уже у меня.

Нинавижу.

А следующего стандарта еще 10 лет ждать.

Оставите комментарий ?

20 Комментарии。

  1. Надо ждать lambda функции. gcc, кстати, уже вроде как умеет.

  2. А, да, Google Mock еще умеет делать


    vector::iterator iter = find_if(
    myVector.begin(),
    myVector.end(),
    Eq(Property(&Person::GetLastName), "Pupkin"));

    Совсем не стандарт, зато выглядит неплохо (и можно вообще офигительные конструкции наворачивать, кстати, со сравнениями массивов например)

    • Хм. Красиво, но ИМХО не более читабельно, нежели моя страшная конструкция с equal_to. Вот бустовский оператор равенства смотрится органично.

  3. Якие замечательные вещи делаютсо! Теперь я снова почти не знаю C++ и снова могу по этому поводу не париться. 😆
    А вообще говоря, что-то енти ваши плюсы чем дельше, тем всё больше мне напоминают Форт. 😆

    • Это, между прочем, почти настоящее функциональной программирование!

      • А мне как-то пофиг в последнее время… 🙁
        Почти не почти — не в том суть. Суть в том, что за всеми новомодными рюшечками теряется изначальная идея _ясного_ выражения мысли посредством языка программирования. Отовсюду только свистелки и перделки торчат. 🙁

        • Этим новомодным рюшечкам в обед сто лет. Да и программа в функциональном стиле, как правило, читается гораздо легче.

        • Я тут по долгу службы разбираюсь с фреймворком, написанным в процедурном стиле на чистом си. Выражение мысли на уровне «пишем число А в переменную Б» — яснее не бывает.
          Правда, разобраться в dataflow решительно невозможно.

          Свистелки и перделки — это скорее новомодные управляемые среды.

          • Дык вот и получается, как обычно, что всё зависит от наличия мозгов у программиста. «Крутые профессионалы», начитавшись какого-нибудь там Александерску, но не могущие ответить нафига это всё нужно кроме как цитированием книги и «это круто профессионально» — часто творят примерно такую же байду, как этот твой код на Сях. С другой стороны, человек, который понимает что и зачем он делает и на чистом Си напишет так, что пользоваться потом просто и приятно.
            Я вообще в последнее время думаю, что подход со смесью ядра и низкоуровневых компонентов на Сях и склеивание их между собой и гуишной мордой на чём-нибудь типа там Питона — оно часто предпочтительнее, чем от и до использовать плюсы. Ибо получается, что каждый инструмент используется для того, под что заточен.

        • kr00той профессионал — это тот, кто пишет сопровождаемый и поддерживаемый код. Это может быть что угодно — от ассемблера до ужасного на первый взгляд нагромождения шаблонов. Но это сложно, бо нужно иметь голову на плечах.

          Кстати, си может быть и хорош в определенных вещах, но рисовать поддерживаемые и, главное, расширяемые вещи на нем практически невозможно. Все это обычно выражается либо в копипасте, либо в симуляции наследования и таблиц виртуальных функций, либо просто в макаронной фабрике.

          У С++ по сравнению с си сейчас есть только один недостаток — отсутствие бинарной совместимости.

          • «тот, кто пишет сопровождаемый и поддерживаемый код» — это просто профессионал. А «kr00той профессионал» — тот кто больше понты кидает. Правда, некоторые из них ещё и какой-то рабочий код дают — врать не буду. 🙂 За чистый Си тоже агитировать не буду — это другая крайность. 🙂 Имхо, всё-таки, каждому инструменту — своё место. Если ты вместо SCADA захочешь заюзать что-то своё там, где вообще-то нужна именно SCADA-система, то какой бы глючной не была альтернатива — вменяемый заказчик тебя пошлёт…

        • Ой, таким заказчегам, пихающих невесть что туда, где нормальная SCADA нужна, числа нет.

          • Я же сказал — «вменяемый». 🙂
            Про «сделай из говна и палок» я тоже много историй знаю. 🙂

Оставить комментарий


Примечание - Вы можете использовать эти HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

12 посетителей онлайн
6 гостей, 6 bots, 0 зарегистрированных
Максимум сегодня:: 20 в 12:49 am UTC
В этом месяце: 53 в 09-21-2021 08:53 am UTC
В этом году: 248 в 07-26-2021 10:24 am UTC
За все время: 332 в 11-22-2019 03:23 am UTC