?

Log in

No account? Create an account

Рабочее - Общество дровосеков Бердичева по изучению Мишны

Aug. 16th, 2011

05:59 pm - Рабочее

Previous Entry Share Next Entry

Я, оказывается, всё пропустил. В пятницу был праздник у ребят, ликовала пионерия: в тот день в гости к ним пришел стандарт C++11.

Судя по тому, что стандартный билд на сегодняшний день у нас - а компания вполне типичная, не динозавры какие-нибудь - делается с помощью gcc 3.4.6, выпущенного в марте 2006 года, ради совместимости с платформами у любимых клиентов - тоже компаний вполне типичных, не трилобитов каких-нибудь - интересно, удастся ли мне до пенсии использовать сиплюсплюсную лямбда-функцию?

Comments:

[User Picture]
From:yatur
Date:August 17th, 2011 02:29 am (UTC)
(Link)
О как. Таки родили. А новый вариант латинского языка, часом, не вышел?
(Reply) (Thread)
[User Picture]
From:spamsink
Date:August 17th, 2011 05:51 am (UTC)
(Link)
Ватикан регулярно добавляет неологизмы для обозначения современных реалий к тезаурусу. Interrete, например.
(Reply) (Parent) (Thread)
[User Picture]
From:spamsink
Date:August 17th, 2011 06:06 am (UTC)
(Link)
На этот счет мне понравился комментарий со слэшдота: First D[uke] N[ukem] F[orever], then a HURD kernel, now C++0x... Remind me to send some parkas to hell.
(Reply) (Parent) (Thread)
[User Picture]
From:sasha_gil
Date:August 17th, 2011 02:47 am (UTC)
(Link)
Ну, у вас же внутренние инструменты пишут какие-нибудь (или там заповедь - использовать абсолютно тот же компилятор)? Мне уже попадался на глаза продакшн как бы код с C++ными лямбдами, выглядит забавно - но и видно, зачем их вставили: перепихивание некоего стандартного plumbing-а из области рукописного (многословного, медленнее воспринимаемового и более error-prone) кода в автоматически сгенерированный компилятором.
(Reply) (Thread)
[User Picture]
From:spamsink
Date:August 17th, 2011 06:04 am (UTC)
(Link)
Не заповедь, но внутренние инструменты иногда приходится исполнять у клиентов, поэтому они для удобства написаны совместимо.
Билды в "песочнице" делаются с помощью 4.1.2 - так по крайней мере гарантируется, что код не совсем устарел.
(Reply) (Parent) (Thread)
[User Picture]
From:maksa
Date:August 17th, 2011 07:59 am (UTC)
(Link)
Можно на какой-нибудь контест заявиться, там, глядишь, и придётся лямбдануть.
(Reply) (Thread)
[User Picture]
From:spamsink
Date:August 17th, 2011 08:20 am (UTC)
(Link)
Энтузазизьм уж не тот.
(Reply) (Parent) (Thread)
[User Picture]
From:archaicos
Date:August 17th, 2011 08:23 am (UTC)
(Link)
На днях так случилось, что поюзал "блямбды" в VC++. На редкость странный синтаксис на мой вкус. Ну, т.е. оригинальное извращение с определением переменных, ф-ций и типов в C(++) извращением и остается, но теперь к нему добавляется еще одно - эти с(т)ранные [] и -> в "лябадах". Я не понял необходимости определять ф-ции 2-м синтаксисом. Только для отличия от обычных? Так это можно было сделать и более элегантно. Йогурт какой-то вышел. Хех.
(Reply) (Thread)
[User Picture]
From:archaicos
Date:August 17th, 2011 08:23 am (UTC)
(Link)
["лямбадах"]
(Reply) (Parent) (Thread)
[User Picture]
From:Anatoly Borodin
Date:August 17th, 2011 01:18 pm (UTC)
(Link)
> Я не понял необходимости определять ф-ции 2-м синтаксисом.

Это чтоб функции по месту определять, а не 30 строчками выше.
(Reply) (Parent) (Thread)
[User Picture]
From:archaicos
Date:August 17th, 2011 04:21 pm (UTC)
(Link)
Я не про назначение фичи, а про синтаксис, который можно было оставить почти таким же, как у обычных ф-ций.
(Reply) (Parent) (Thread)
[User Picture]
From:Anatoly Borodin
Date:August 17th, 2011 05:00 pm (UTC)
(Link)
Это как?

void fun1()
{
      ...
      int fun2(int x) {return x * x;}
      fun3(fun2, ys);
      ...
}


Чёрт его знает, почему так не сделали.

PS Ещё один плюс лямбды — не надо имя придумывать.
(Reply) (Parent) (Thread)
[User Picture]
From:archaicos
Date:August 17th, 2011 05:39 pm (UTC)
(Link)
Нет, это примерно так, как объявление параметра-указателя ф-ции в прототипе только с телом внутри {}:
    fun3(int (int x) {return x * x;}, ys);

и так:
    fun3(int (*)(int x) {return x * x;}, ys);

А ссылку(-и) на контекст можно было бы вначале списка параметров передать (перед x, т.е.).
А так создается впечатление, что зааутсорсили фичу куда-то, где не разобрались, и приляпали сбоку еще какую-то хрень делающую на 95% то же, что уже есть в существующем дизайне и коде, но по-другому, как носки разного цвета.
(Reply) (Parent) (Thread)
[User Picture]
From:spamsink
Date:August 17th, 2011 07:02 pm (UTC)
(Link)
Этот синтаксис нужен, чтобы можно было писать

auto func(type1 arg1, type2 arg2, ...) -> decltype(выражение от arg1, arg2, ...) { return выражение от arg1, arg2, ...; }
(Reply) (Parent) (Thread)
[User Picture]
From:archaicos
Date:August 19th, 2011 11:46 am (UTC)
(Link)
Ой, это какая-то ужасть. Сейчас еще подумал на предмет auto и безопасности (переполнений всяких), и сдается мне, что появился дополнительный способ (или форма) для выстреливания в ногу. Хотя, с другой стороны, подобное можно и с шаблонами учинить, и с макросами. Конечно, убивает не само ружьё, а мужик из него...
(Reply) (Parent) (Thread)
[User Picture]
From:spamsink
Date:August 19th, 2011 04:06 pm (UTC)
(Link)
Больше прав - больше и ответственности.
(Reply) (Parent) (Thread)
[User Picture]
From:sab123
Date:August 19th, 2011 03:02 am (UTC)
(Link)
За лямбда-функции нужно отрывать яйцы!
(Reply) (Thread)
[User Picture]
From:spamsink
Date:August 19th, 2011 03:07 am (UTC)
(Link)
Это еще с хера ли?
(Reply) (Parent) (Thread)
[User Picture]
From:sab123
Date:August 20th, 2011 12:02 am (UTC)
(Link)
Хрень, почти не поддающаяся отладке.
(Reply) (Parent) (Thread)
[User Picture]
From:spamsink
Date:August 20th, 2011 12:23 am (UTC)
(Link)
Почему? Компилироваться-то в отладочном режиме все равно будет в конвенциональный код. Ну будет имя функции какое-нибудь хитросгенерированное, ну и что?
(Reply) (Parent) (Thread)
[User Picture]
From:anhinga_anhinga
Date:August 19th, 2011 08:51 am (UTC)
(Link)
а скажи, как у вас это устроено, что используется gcc 3.4.6? Есть специальный компьютер, где нет более поздней версии, и билд делается на нём? Или создается какая-то виртуальная штука, в которой живёт эта версия, и билд делается внутри виртуальной штуки?
(Reply) (Thread)
[User Picture]
From:spamsink
Date:August 19th, 2011 09:02 am (UTC)
(Link)
В Makefile написано
CC=/auto/tools/local/gcc-3.4.6/bin/gcc

/auto - каталог, управляемый NFS automount-ом.
(Reply) (Parent) (Thread)
[User Picture]
From:anhinga_anhinga
Date:August 19th, 2011 09:10 am (UTC)
(Link)
я слышал всякие легенды, что разные версии gcc не очень хорошо сосуществуют на одной машине; насколько легко/сложно было это преодолеть? (что делают при инсталляции, чтобы они полностью оказывались в разных непересекающихся местах?)
(Reply) (Parent) (Thread)
[User Picture]
From:spamsink
Date:August 19th, 2011 03:35 pm (UTC)
(Link)
./configure --prefix=/куда/подальше, обычно.
(Reply) (Parent) (Thread)