Size: a a a

Конференция C++ Russia

2020 June 25

AZ

Alexander Zaitsev in Конференция C++ Russia
сейчас бы обсуждать какие-то недоязыки без поддержки завтипов
источник

АГ

Александр Гранин... in Конференция C++ Russia
Pavel Zhigulin
Я вообще считаю CTAD глобальный фэйлом С++, где-то на уровне std::initializer_list, но мне никто не верит)
Я верю
источник

AV

Alexey Veselovsky in Конференция C++ Russia
выучить все нюансы CTAD и нюансы использования std::initializer_list, или же haskell?
источник

AZ

Alexander Zaitsev in Конференция C++ Russia
Alexey Veselovsky
выучить все нюансы CTAD и нюансы использования std::initializer_list, или же haskell?
выучить что-то полезное для работы, или же haskell?
источник

AV

Alexey Veselovsky in Конференция C++ Russia
Alexander Zaitsev
выучить что-то полезное для работы, или же haskell?
это уже третья опция
источник

AV

Alexey Veselovsky in Конференция C++ Russia
источник

ES

Egor Suvorov in Конференция C++ Russia
А какие в CTAD нюансы? Работает же вроде так же, как и вывод типов из аргументов функций.
Только вместо набора перегрузок — набор конструкторов из общего случая шаблона. Иногда явные deduction guides, если очень-очень надо.
источник

АГ

Александр Гранин... in Конференция C++ Russia
Alexey Veselovsky
выучить все нюансы CTAD и нюансы использования std::initializer_list, или же haskell?
Проще выучить собрание сочинений Маркса
источник

АГ

Александр Гранин... in Конференция C++ Russia
Egor Suvorov
А какие в CTAD нюансы? Работает же вроде так же, как и вывод типов из аргументов функций.
Только вместо набора перегрузок — набор конструкторов из общего случая шаблона. Иногда явные deduction guides, если очень-очень надо.
Насчет CTAD я не знаю, но вот при подготовке своих докладов постоянно сталкиваюсь с тем, что компилятор не может понять типы шаблонных вызовов. Причем когда они, по логике, явно видны. Последний такой случай был с концептами и темплитными функциями
источник

PZ

Pavel Zhigulin in Конференция C++ Russia
Egor Suvorov
А какие в CTAD нюансы? Работает же вроде так же, как и вывод типов из аргументов функций.
Только вместо набора перегрузок — набор конструкторов из общего случая шаблона. Иногда явные deduction guides, если очень-очень надо.
Нюансы в


std::vector vec{ std::vector{1} };


А также в том, что deduction guides написан хрен знает где и чтобы быть на 100% уверенным в том, что у тебя там ща инстанцируется, нужно этот deduction guide по коду искать) Что не так просто, т.к. go to definition для них не предусмотрен) К тому, вообще необходимость поиска - та еще хрень.

С initializer_list - это вообще вещь прикольная.  Например этот код не скомпилируется:


struct X {
     X(std::initializer_list<int> list) {}
};

X x {1,2,3,4}; //Ok
auto x = make_unique<X>({1,2,3,4}); //Упс :)


Ну, а так есть даж неплохая статья https://foonathan.net/2016/12/fixing-initializer-list/
источник

ES

Egor Suvorov in Конференция C++ Russia
А, точно, виноваты конструкторы копирования и перемещения, как обычно.
источник

ES

Egor Suvorov in Конференция C++ Russia
Спасибо.
источник

PZ

Pavel Zhigulin in Конференция C++ Russia
Вообще, любые конструкторы зло :) Но наличие аж целых трех - зло в кубе :)
источник

m

magras in Конференция C++ Russia
Александр Гранин
Вывод типов в С++ - это одно название. На самом деле он не работает почти
Я слышал мнение, что вывод типов сложнее сделать при наличии перегрузок. На первый взгляд звучит правдоподобно.
источник

АГ

Александр Гранин... in Конференция C++ Russia
Вывод типов сложнее сделать, когда нет системы типов. В С++ системы типов нет, хотя типы, конечно, есть
источник

m

magras in Конференция C++ Russia
Александр Гранин
Вывод типов сложнее сделать, когда нет системы типов. В С++ системы типов нет, хотя типы, конечно, есть
А что такое система типов? Всякие kind'ы?
источник

АГ

Александр Гранин... in Конференция C++ Russia
magras
А что такое система типов? Всякие kind'ы?
Не обязательно. Главное - консистентная и выразительная основа. И никакая система типов немыслима без алгебраических типов данных, например
источник

m

magras in Конференция C++ Russia
Александр Гранин
Не обязательно. Главное - консистентная и выразительная основа. И никакая система типов немыслима без алгебраических типов данных, например
хм. Кажется я начинаю понимать в чем претензия к плюсам. Фактически у нас есть только duck typing и type traits, благодаря которым мы можем выживать и без алгебраических типов, но это костыль.
источник

АГ

Александр Гранин... in Конференция C++ Russia
magras
хм. Кажется я начинаю понимать в чем претензия к плюсам. Фактически у нас есть только duck typing и type traits, благодаря которым мы можем выживать и без алгебраических типов, но это костыль.
Да. И std::variant + struct как замена АлгТД - это тоже костыль, существенно неудобный и ограничивающий дальнейшее развитие языка. Так, на std::variant нельзя сделать нормальный паттерн-матчинг, потому что паттерн-матчинг - это языковая фича, а std::variant - контейнер. Такое направление зависимости - когда языковая фича зависит от библиотеки - видится мне противоестественным
источник

m

magras in Конференция C++ Russia
Вообще, наверное, шаблоны ломают любую систему типов, так как специализация может переопределить все.
источник