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 лет ждать.

Leave a comment

20 Comments.

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

    • Так вроде и буст умеет. Но когда это еще будет?

        • Остается только ждать :(

          • Ну вообще-то gcc их давно поддерживает и судя по всему десятая студия тоже :) А вот окончательной стандартизации мы можем и не дождаться, они как-то уже слишком долго этот стандарт родить пытаются.

        • С ламбдами у меня будет та же история. Ниасилившие будут трясти стандартом.

          • Эээ, ну ты им прозрачно намекни, что bind можно на свалку отправить, раз настоящие лямбды есть :)

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

          если с лямбдами дело будет обстоять лучше, то перейдем на них аж бегом :)

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

          • Я же сказал – “вменяемый”. :)
            Про “сделай из говна и палок” я тоже много историй знаю. :)

Leave a Reply

Yandex Mail.ru Google LiveJournal myOpenId Flickr claimId Blogger Wordpress OpenID Yahoo Technorati Vidoop Verisign AOL


[ Ctrl + Enter ]

12 visitors online now
12 guests, 0 members
Max visitors today: 15 at 09:10 am MST
This month: 23 at 05-03-2012 08:23 am MST
This year: 29 at 01-23-2012 02:50 am MST
All time: 45 at 02-23-2011 09:11 am MST