[flame] Null Coalescing Conditional Operator
От: flаt  
Дата: 06.08.14 07:18
Оценка: 6 (1)
http://open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4120.pdf

This proposal essentialy
entails standardizing the null coalescing conditional operator as implemented in gcc and clang, with the
syntax a ? : b

to be equivalent to
auto&& temp = a;
temp ? temp : b;


Что-то всех начинает колбасить от бурной эволюции языков (C# 6, C++17) . Раньше была генеральная линия партии на то, что всё, что можно сделать в библиотеке, делается в библиотеке. Что мешает сделать так?

template<typename T> auto ifnull(const T& a, const T& b) { return a ? a : b; }


25.08.14 13:45: Перенесено из 'C/C++'
Re: [flame] Null Coalescing Conditional Operator
От: Ops Россия  
Дата: 06.08.14 07:45
Оценка: -2
Здравствуйте, flаt, Вы писали:

Сахар же. Как и ?: вообще.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re: [flame] Null Coalescing Conditional Operator
От: jazzer Россия Skype: enerjazzer
Дата: 06.08.14 08:03
Оценка: +1
Здравствуйте, flаt, Вы писали:

F>http://open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4120.pdf


F>

F>This proposal essentialy
F>entails standardizing the null coalescing conditional operator as implemented in gcc and clang, with the
F>syntax a ? : b

F>to be equivalent to
F>auto&& temp = a;
F>temp ? temp : b;


F>Что-то всех начинает колбасить от бурной эволюции языков (C# 6, C++17) . Раньше была генеральная линия партии на то, что всё, что можно сделать в библиотеке, делается в библиотеке.


Ты упустил ключевое (я выделил). Речь идет просто о стандартизации уже имеющегося расширения.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: [flame] Null Coalescing Conditional Operator
От: Abyx Россия  
Дата: 06.08.14 08:15
Оценка: +1
Здравствуйте, flаt, Вы писали:

F>http://open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4120.pdf


F>

F>This proposal essentialy
F>entails standardizing the null coalescing conditional operator as implemented in gcc and clang, with the
F>syntax a ? : b

F>to be equivalent to
F>auto&& temp = a;
F>temp ? temp : b;


F>Что-то всех начинает колбасить от бурной эволюции языков (C# 6, C++17) . Раньше была генеральная линия партии на то, что всё, что можно сделать в библиотеке, делается в библиотеке. Что мешает сделать так?


F>
template<typename T> auto ifnull(const T& a, const T& b) { return a ? a : b; }


а том, что у тебя будет всегда вычисляться b.
In Zen We Trust
Re: [flame] Null Coalescing Conditional Operator
От: Кодт Россия  
Дата: 06.08.14 11:15
Оценка: :)
Здравствуйте, flаt, Вы писали:

F>syntax a ? : b


Надо пойти дальше, реализовать не только or-else, но и and-then так же, как в других языках (начиная со смолтока и чистого лямбда-исчисления)
(a &&: b)  <-->  auto&& t = a; return t ? b : t;
(a ||: b)  <-->  auto&& t = a; return t ? t : b;


F>Что-то всех начинает колбасить от бурной эволюции языков (C# 6, C++17) . Раньше была генеральная линия партии на то, что всё, что можно сделать в библиотеке, делается в библиотеке. Что мешает сделать так?


F>
template<typename T> auto ifnull(const T& a, const T& b) { return a ? a : b; }


Энергичное вычисление мешает.

Но на уровне библиотек сделать можно, как-то так:
#define AND_THEN(a,b)  ( [&]()->decltype(true ? (a) : (b)) { auto&& __t = (a); return __t ? (b) : __t; } () )
#define OR_ELSE(a,b)   ( [&]()->decltype(true ? (a) : (b)) { auto&& __t = (a); return __t ? __t : (b); } () )
Перекуём баги на фичи!
Re[2]: [flame] Ну а чо, раз пошла такая пьянка - режь последний огурец!
От: slava_phirsov Россия  
Дата: 06.08.14 12:10
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Надо пойти дальше, реализовать не только or-else, но и and-then так же, как в других языках (начиная со смолтока и чистого лямбда-исчисления)


А я тут где-то предлагал добавить синтаксис десятичной бесконечной периодической дроби:

double x = 0.3(3);


Еще неплохо бы смотрелись unless и until, perl-овый обратный синтаксис записи условия тоже ничего:
foo = 1 if (bar);


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

А как такая идея: сделать тип auto типом по умолчанию? В старые добрые времена, ЕМНИП, если при объявлении тип (переменной, результата функции) не указывался, то подразумевалось, что это int. Пусть теперь это будет auto, не?
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
Re: [flame] Null Coalescing Conditional Operator
От: slava_phirsov Россия  
Дата: 06.08.14 12:14
Оценка:
Здравствуйте, flаt, Вы писали:

F>Что-то всех начинает колбасить от бурной эволюции языков (C# 6, C++17) . Раньше была генеральная линия партии на то, что всё, что можно сделать в библиотеке, делается в библиотеке. Что мешает сделать так?


А что ты хотел? Чтобы они там, в своей WG21 сказали "все, мы достигли абсолюта" — и самораспустились бы? И куда им тогда идти и чем снискать хлеб свой насущный?

Есть у революции начало —
Нет у революции конца!
Как меня все это [задолбало],
Как давно пора попить винца!


Vanga said: это кончится так же, как с POSIX.
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
Re[2]: [flame] Null Coalescing Conditional Operator
От: Abyx Россия  
Дата: 06.08.14 20:15
Оценка:
Здравствуйте, slava_phirsov, Вы писали:

_>Здравствуйте, flаt, Вы писали:


F>>Что-то всех начинает колбасить от бурной эволюции языков (C# 6, C++17) . Раньше была генеральная линия партии на то, что всё, что можно сделать в библиотеке, делается в библиотеке. Что мешает сделать так?


_>А что ты хотел? Чтобы они там, в своей WG21 сказали "все, мы достигли абсолюта" — и самораспустились бы?


ты так говоришь как будто на самом деле они его уже достигли.
In Zen We Trust
Re[2]: [flame] Null Coalescing Conditional Operator
От: Mr.Delphist  
Дата: 07.08.14 09:58
Оценка:
Здравствуйте, Ops, Вы писали:

Ops>Сахар же. Как и ?: вообще.


Сахар-то сахар, но с сайд-эффектами
Re[3]: [flame] Null Coalescing Conditional Operator
От: slava_phirsov Россия  
Дата: 07.08.14 11:04
Оценка:
Здравствуйте, Abyx, Вы писали:

_>>А что ты хотел? Чтобы они там, в своей WG21 сказали "все, мы достигли абсолюта" — и самораспустились бы?


A>ты так говоришь как будто на самом деле они его уже достигли.


Иногда нужно просто вовремя остановиться. Та же проблема была у группы по Ada (тут я по памяти процитирую мнение Р.Гласса, которое он высказал ЕМНИП в "Креативное программирование 2.0": "Изящную стрелу, которая должна была поразить только одну цель, они превратили в массу, заливающую все вокруг" — я сам на Ada не писал, так что полагаюсь на мнение человека, который с ним знаком, "мопед не мой ит.д.")
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
Re[4]: [flame] Null Coalescing Conditional Operator
От: Abyx Россия  
Дата: 07.08.14 11:50
Оценка: +1 -1
Здравствуйте, slava_phirsov, Вы писали:

_>Здравствуйте, Abyx, Вы писали:


_>>>А что ты хотел? Чтобы они там, в своей WG21 сказали "все, мы достигли абсолюта" — и самораспустились бы?


A>>ты так говоришь как будто на самом деле они его уже достигли.


_>Иногда нужно просто вовремя остановиться. Та же проблема была у группы по Ada (тут я по памяти процитирую мнение Р.Гласса, которое он высказал ЕМНИП в "Креативное программирование 2.0": "Изящную стрелу, которая должна была поразить только одну цель, они превратили в массу, заливающую все вокруг" — я сам на Ada не писал, так что полагаюсь на мнение человека, который с ним знаком, "мопед не мой ит.д.")


я на Ada тоже не писал, и я как-то не понимаю при чем она тут.

что касается С++, то я на нем писал.
и в С++ не хватает очень многих вещей.

в частности возможности писать
auto&& x = f() ?: g() ?: h();


вместо

auto&& x = ([&]{
    if (auto&& temp = f())
        return temp;

    if (auto&& temp = g())
        return temp;

    return h();
})();
In Zen We Trust
Re[5]: [flame] Null Coalescing Conditional Operator
От: flаt  
Дата: 07.08.14 19:18
Оценка:
Здравствуйте, Abyx, Вы писали:

A>что касается С++, то я на нем писал.

A>и в С++ не хватает очень многих вещей.

Очень многих. Но будет ли это C++? Во времена 2003 стандарта говорили, что С++ учат лет 5. Сколько учить С++17?
Re[3]: [flame] Ну а чо, раз пошла такая пьянка - режь последний огурец!
От: se_sss  
Дата: 15.08.14 11:11
Оценка: -1
_>А как такая идея: сделать тип auto типом по умолчанию? В старые добрые времена, ЕМНИП, если при объявлении тип (переменной, результата функции) не указывался, то подразумевалось, что это int. Пусть теперь это будет auto, не?

Это абсолютно разумный следующий шаг.
auto в его новом значении (С++11) бессмысленен.
Re[4]: [flame] Ну а чо, раз пошла такая пьянка - режь последний огурец!
От: saf_e  
Дата: 15.08.14 11:37
Оценка: +1
Здравствуйте, se_sss, Вы писали:


_>>А как такая идея: сделать тип auto типом по умолчанию? В старые добрые времена, ЕМНИП, если при объявлении тип (переменной, результата функции) не указывался, то подразумевалось, что это int. Пусть теперь это будет auto, не?


_>Это абсолютно разумный следующий шаг.

_>auto в его новом значении (С++11) бессмысленен.

ИМХО, понизит читабельность. Станет непонятно где объявляется новый тип, а где реюзается старый.
Re[6]: [flame] Null Coalescing Conditional Operator
От: Abyx Россия  
Дата: 15.08.14 12:00
Оценка: +1
Здравствуйте, flаt, Вы писали:

F>Во времена 2003 стандарта говорили, что С++ учат лет 5. Сколько учить С++17?


лолшто? С++ учат 5 лет? кто? люди с проблемами в развитии чтоли?
мне помнится хватило всего пары месяцев чтобы начать писать нормальный код, при этом я тогда учил плюсы как хобби.
In Zen We Trust
Re[5]: [flame] Ну а чо, раз пошла такая пьянка - режь последний огурец!
От: slava_phirsov Россия  
Дата: 15.08.14 22:20
Оценка:
Здравствуйте, saf_e, Вы писали:

_>ИМХО, понизит читабельность. Станет непонятно где объявляется новый тип, а где реюзается старый.


Ты, конечно, имел в виду не "тип", а "переменная"?

В perl для этого необходимо явно указывать my $variable, а вот в Python — действительно, объявление переменной от присвоения существующей переменной нового значения ничем не отличается (скажу по секрету, мир от этого, как ни странно, не рухнул ))) )
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
Re[6]: [flame] Ну а чо, раз пошла такая пьянка - режь последний огурец!
От: flаt  
Дата: 16.08.14 16:30
Оценка:
Здравствуйте, slava_phirsov, Вы писали:

_>В perl для этого необходимо явно указывать my $variable,

«Необходимо» только если включен соответствующий режим (use strict 'vars'). Иначе как в Си, где тип переменной был не обязателен.
Re[7]: [flame] Ну а чо, раз пошла такая пьянка - режь последний огурец!
От: slava_phirsov Россия  
Дата: 16.08.14 19:13
Оценка:
Здравствуйте, flаt, Вы писали:

_>>В perl для этого необходимо явно указывать my $variable,

F>«Необходимо» только если включен соответствующий режим (use strict 'vars'). Иначе как в Си, где тип переменной был не обязателен.

Я уже на автомате в начале каждого модуля пишу
use warnings;
use strict;

, как рекомендует Alpaca book, и не парюсь
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.