Зачем нужны concept?
От: PavelCH  
Дата: 29.09.20 17:44
Оценка:
Пытаюсь понять зачем нужны а с++ концепты. Ну первое что лежит на поверхности это избегание ошибок на этапе генерации. А что ещё? Как практически применять эту штуку? Для чего комитет заседал столько времени? Почему они должны "спасти мир"? Что такого без них нельзя было делать а с ними можно?
Нехай щастить
Отредактировано 29.09.2020 17:44 PavelCH . Предыдущая версия .
Re: Зачем нужны concept?
От: kov_serg Россия  
Дата: 29.09.20 18:13
Оценка: +4
Здравствуйте, PavelCH, Вы писали:

PCH>Пытаюсь понять зачем нужны а с++ концепты. Ну первое что лежит на поверхности это избегание ошибок на этапе генерации. А что ещё? Как практически применять эту штуку? Для чего комитет заседал столько времени? Почему они должны "спасти мир"? Что такого без них нельзя было делать а с ними можно?

Ничего особенного — просто более удобный костыль для метапрограммирования.
Re: Зачем нужны concept?
От: reversecode google
Дата: 29.09.20 18:33
Оценка: 2 (1)
вы не сможете в какой то контейнер подсунуть что попало
если это ограничено концептом
и ошибка из трех страниц уменьшится максимум двумя строками
о том что ваш параметр шаблона не подходит, действует конкретное ограничение и какое именно
Re[2]: Зачем нужны concept?
От: PavelCH  
Дата: 29.09.20 18:33
Оценка:
_>Ничего особенного — просто более удобный костыль для метапрограммирования.
То есть только контроль ошибок на этапе компиляции? И никакого двойного дна?
Нехай щастить
Re: Зачем нужны concept?
От: YuriV  
Дата: 29.09.20 18:39
Оценка:
Здравствуйте, PavelCH, Вы писали:

PCH>Пытаюсь понять зачем нужны а с++ концепты. Ну первое что лежит на поверхности это избегание ошибок на этапе генерации. А что ещё? Как практически применять эту штуку? Для чего комитет заседал столько времени? Почему они должны "спасти мир"? Что такого без них нельзя было делать а с ними можно?


Ну тут всё уже расписали. В концептах плохо одно — их нужно было внести ещё в С++11, как просил комитет Страустрап, — включить их хотя бы как экспериментальную фичу.
Re[2]: Зачем нужны concept?
От: σ  
Дата: 29.09.20 20:08
Оценка:
PCH>>Пытаюсь понять зачем нужны а с++ концепты. Ну первое что лежит на поверхности это избегание ошибок на этапе генерации. А что ещё? Как практически применять эту штуку? Для чего комитет заседал столько времени? Почему они должны "спасти мир"? Что такого без них нельзя было делать а с ними можно?

YV>Ну тут всё уже расписали. В концептах плохо одно — их нужно было внести ещё в С++11, как просил комитет Страустрап, — включить их хотя бы как экспериментальную фичу.


Бывает такой статус у фич в стандарте?
Re[3]: Зачем нужны concept?
От: Doom100500 Израиль  
Дата: 30.09.20 06:28
Оценка:
Здравствуйте, σ, Вы писали:

PCH>>>Пытаюсь понять зачем нужны а с++ концепты. Ну первое что лежит на поверхности это избегание ошибок на этапе генерации. А что ещё? Как практически применять эту штуку? Для чего комитет заседал столько времени? Почему они должны "спасти мир"? Что такого без них нельзя было делать а с ними можно?


YV>>Ну тут всё уже расписали. В концептах плохо одно — их нужно было внести ещё в С++11, как просил комитет Страустрап, — включить их хотя бы как экспериментальную фичу.


σ>Бывает такой статус у фич в стандарте?


Например
Спасибо за внимание
Re[2]: Зачем нужны concept?
От: B0FEE664  
Дата: 30.09.20 08:03
Оценка:
Здравствуйте, reversecode, Вы писали:

R>вы не сможете в какой то контейнер подсунуть что попало

R>если это ограничено концептом
R>и ошибка из трех страниц уменьшится максимум двумя строками
R>о том что ваш параметр шаблона не подходит, действует конкретное ограничение и какое именно

Так ведь есть static_assert
И каждый день — без права на ошибку...
Re[3]: Зачем нужны concept?
От: Videoman Россия https://hts.tv/
Дата: 30.09.20 13:05
Оценка: +1
Здравствуйте, PavelCH, Вы писали:

PCH>То есть только контроль ошибок на этапе компиляции? И никакого двойного дна?


Для меня основная фишка в том что теперь все перегрузки будут работать в зависимости от концепта. Т.е. раньше приходилось писать весь это мрак с SFINAE для того что бы правильно подставлялись те ли иные функции, а теперь это не нужно. Т.е. это не только контроль ошибок, т.к. ошибок могло и не быть, а вот методы вызывались не те.
Re[4]: Зачем нужны concept?
От: σ  
Дата: 30.09.20 13:17
Оценка:
PCH>>>>Пытаюсь понять зачем нужны а с++ концепты. Ну первое что лежит на поверхности это избегание ошибок на этапе генерации. А что ещё? Как практически применять эту штуку? Для чего комитет заседал столько времени? Почему они должны "спасти мир"? Что такого без них нельзя было делать а с ними можно?

YV>>>Ну тут всё уже расписали. В концептах плохо одно — их нужно было внести ещё в С++11, как просил комитет Страустрап, — включить их хотя бы как экспериментальную фичу.


σ>>Бывает такой статус у фич в стандарте?


D>Например


Я про стандарт спрашивал, при чём тут википедия?
Re: Зачем нужны concept?
От: _NN_ www.nemerleweb.com
Дата: 30.09.20 14:40
Оценка: 2 (2)
Здравствуйте, PavelCH, Вы писали:

PCH>Пытаюсь понять зачем нужны а с++ концепты. Ну первое что лежит на поверхности это избегание ошибок на этапе генерации. А что ещё? Как практически применять эту штуку? Для чего комитет заседал столько времени? Почему они должны "спасти мир"? Что такого без них нельзя было делать а с ними можно?


Это C++, всё гораздо сложнее

template <typename T>
  requires std::is_standard_layout_v<T>
void fun(T v);
 
template <typename T>
  requires std::is_standard_layout_v<T>
        && std::is_trivial_v<T>
void fun(T v);

fun(1); // compiler error: ambiguous call


template <typename T>
concept standard_layout 
  = std::is_standard_layout_v<T>;
 
template <typename T>
  requires standard_layout<T>
void fun(T v);
 
template <typename T>
  requires standard_layout<T> && std::is_trivial_v<T>
void fun(T v);
 
int main()
{
  fun(1); // Вторая перегрузка так как более точная
}


https://akrzemi1.wordpress.com/2020/03/26/requires-clause/
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[5]: Зачем нужны concept?
От: Doom100500 Израиль  
Дата: 30.09.20 14:52
Оценка:
Здравствуйте, σ, Вы писали:

σ>>>Бывает такой статус у фич в стандарте?


D>>Например


σ>Я про стандарт спрашивал, при чём тут википедия?


Не, ну она ведь описывает стандартную библиотеку. Раз в стандартной библиотеке есть, значит есть и в стандарте, разве нет?
Спасибо за внимание
Re[4]: Зачем нужны concept?
От: PavelCH  
Дата: 30.09.20 15:28
Оценка:
V>Для меня основная фишка в том что теперь все перегрузки будут работать в зависимости от концепта.
О. Это уже что-то. Я знал что есть двойное дно, но не мог его увидеть. То есть, если я правильно понял, используется несколько версий одной и той же функции с разной логикой и подставляются в зависимости от условия requires? А где про это можно почитать с примерами? Интересует применение на практике.
Нехай щастить
Re[2]: Зачем нужны concept?
От: AeroSun  
Дата: 30.09.20 16:35
Оценка: :))
ппц , реально проще и понятнее статик ассертами обложить, чем "дебажить в уме" что не так пошло
Что-то не то напридумывали...
Re[3]: Зачем нужны concept?
От: night beast СССР  
Дата: 30.09.20 17:07
Оценка: +3
Здравствуйте, AeroSun, Вы писали:

AS> ппц , реально проще и понятнее статик ассертами обложить, чем "дебажить в уме" что не так пошло

AS>Что-то не то напридумывали...


статик ассерты не участвуют в поиске имен.
что ты там обкладывать собрался?
Re[5]: Зачем нужны concept?
От: Videoman Россия https://hts.tv/
Дата: 30.09.20 17:31
Оценка: +1
Здравствуйте, PavelCH, Вы писали:

PCH>То есть, если я правильно понял, используется несколько версий одной и той же функции с разной логикой и подставляются в зависимости от условия requires?

Да. На мой взгляд в этом основная их фишка. Уж очень достает писать кучку std::enable_if<....................................................>

PCH>А где про это можно почитать с примерами? Интересует применение на практике.

Если честно, я пока на С++17 сижу и не успел перевести что-то на С++20 и с синтаксисом концептов детально не разбирался, но слежу за их развитием. Зато, уже успел намаяться с std::enable_if в попытках уточнить или изменить перегрузку и понял что concepts это то чего очень не хватает.

Для примера у нас есть класс представляющий эелемент какого-нибудь json элемента и у него конструкторы. Приходится писать так:
        template <typename BoolType, std::enable_if_t<is_bool_v<BoolType>, int> = 0>
        Element(BoolType value);
        template <typename IntType, std::enable_if_t<is_int_v<IntType>, int> = 0>
        Element(IntType value);
        template <typename UintType, std::enable_if_t<is_uint_v<UintType>, int> = 0>
        Element(UintType value);
        template <typename FloatType, std::enable_if_t<is_float_v<FloatType>, int> = 0>
        Element(FloatType value);
        ...

С концептами это должно превратиться во что-то типа:
        template <BoolType ValueType>
        Element(ValueType value);
        template <IntType ValueType>
        Element(ValueType value);
        template <UintType ValueType>
        Element(ValueType value);
        template <FloatType ValueType>
        Element(ValueType value);
        ...
Re[4]: Зачем нужны concept?
От: Videoman Россия https://hts.tv/
Дата: 30.09.20 17:37
Оценка: +2
Здравствуйте, night beast, Вы писали:

NB>

NB>статик ассерты не участвуют в поиске имен.
NB>что ты там обкладывать собрался?

AeroSun конечно не в теме, но толика здравого смысла улавливается. Перефразирую вопрос правильно:
Если например у меня не срабатывает перегрузка какого-то метода где используется concept, а он, например, на целую страницу, как мне понять что пошло не так? Как его "дебажить"?
Re[5]: Зачем нужны concept?
От: night beast СССР  
Дата: 30.09.20 18:03
Оценка:
Здравствуйте, Videoman, Вы писали:

V>AeroSun конечно не в теме, но толика здравого смысла улавливается. Перефразирую вопрос правильно:

V>Если например у меня не срабатывает перегрузка какого-то метода где используется concept, а он, например, на целую страницу, как мне понять что пошло не так? Как его "дебажить"?

написать эмуляцию

я не говорю что static_assert не нужен, я говорю что предлагать его как альтернативу совсем левой фичи довольно глупо.

PS. перечитал ответ AeroSun, возможно он действительно криво выразил свою мысль. в твоей формулировке смысл имеется.
Отредактировано 30.09.2020 18:05 night beast . Предыдущая версия .
Re: Зачем нужны concept?
От: Pzz Россия https://github.com/alexpevzner
Дата: 01.10.20 09:42
Оценка: +1 :)
Здравствуйте, PavelCH, Вы писали:

PCH>Пытаюсь понять зачем нужны а с++ концепты. Ну первое что лежит на поверхности это избегание ошибок на этапе генерации. А что ещё? Как практически применять эту штуку? Для чего комитет заседал столько времени? Почему они должны "спасти мир"? Что такого без них нельзя было делать а с ними можно?


Чтобы можно было в темплейтах ветвиться по сути, а не по вторичным половым признакам.
Re[2]: Зачем нужны concept?
От: PavelCH  
Дата: 01.10.20 20:44
Оценка:
Pzz>Чтобы можно было в темплейтах ветвиться по сути, а не по вторичным половым признакам.
Можете расшифровать?
Нехай щастить
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.