Size: a a a

2021 February 04

O

Ofee in pro.cxx
Danya
А потом будут плеваться от SFINAE
Мы точно всё ещё про новичков?

Боюсь, к моменту, когда эти новички займутся метапрограммированием, концепты станут более распространены и я не вижу причин в этом случае не плеваться от SFINAE с их стороны
источник

D

Danya in pro.cxx
Я думаю концептов будет больше SFINAE только лет через 5-7
источник

P

Pepe 🐸 in pro.cxx
Danya
В 17 мало фич, которые могут понадобиться новичку, имхо
тот же курс яндекса для новичков использует фичи 17го стандарта, и вообще да, чем новее тем лучше
источник

MK

Mikhail Kalugin in pro.cxx
Дмитрий Шебордаев
Это справедливо только для потоков которые постоянно утилизируют CPU, если есть точки синхронизации, что означает остановку, то потоком может быть и сильно больше
Постановка вопроса вообще не верная. Количество потоков зависит от реализации многопоточность в ОС (причем, довольно долго в Linux например их вообще не было). А вот сколько из них будет работать одновременно определяется возможностями процессора.
источник

AZ

Alexander Zaitsev in pro.cxx
оффтоп
источник

MK

Mikhail Kalugin in pro.cxx
Ofee
Там, всё же, речь про новичков. В общем, моё мнение в том, что начинать учить язык с чего-то старше C++17 только потому что полторы синтаксических конструкции могут оказаться непонятны новичку – дикость. Не случится у него шока, если он увидит удобный structured binding при работе с std::map или инициализатор в if в случайном примере кода
Возможно, но это как с информативной вообще - когда на курсах учат писать на C++ в том же ключе что и на python (все что относится к устройству компьютера запретная черная магия). Например, если писать в современном стиле, предполагающем использование auto везде , где только возможно, новичок никогда не научится выводить типы в уме, вообще будет очень смутно понимать что это такое и как работают преобразования. Лучше язык учить постепенно, Для плюсов это значит (неожиданно) от сложного и неудобного к простому - язык так развивался. IMHO. Впрочем, возможно, для того чтобы быстро научиться как-то кодить и начать работать это очень плохой подход.
источник

P

Pepe 🐸 in pro.cxx
Mikhail Kalugin
Возможно, но это как с информативной вообще - когда на курсах учат писать на C++ в том же ключе что и на python (все что относится к устройству компьютера запретная черная магия). Например, если писать в современном стиле, предполагающем использование auto везде , где только возможно, новичок никогда не научится выводить типы в уме, вообще будет очень смутно понимать что это такое и как работают преобразования. Лучше язык учить постепенно, Для плюсов это значит (неожиданно) от сложного и неудобного к простому - язык так развивался. IMHO. Впрочем, возможно, для того чтобы быстро научиться как-то кодить и начать работать это очень плохой подход.
да, лучше учить прямо с декеем массива до пойнтера, очень интуитивно
источник

P

Pepe 🐸 in pro.cxx
а вообще именно типизация и улучшилась в плюсах со временем
источник

MK

Mikhail Kalugin in pro.cxx
Pepe 🐸
да, лучше учить прямо с декеем массива до пойнтера, очень интуитивно
Может быть, тогда вообще держаться подальше от плюсов: есть же всякие шарпы, явы, го... Либо хочешь выжать максимум из железа (но тогда нужно знать как оно работает) либо хочешь удобств... Самая мощная система типизации (из тех что я видел) в Scala, самый лучший вывод типов в Haskell... В C# есть LINQ, в Go - фашизм (в хорошем смысле - все в точности как у всех) и простота освоения (язык, сделанный для обезьян), Rust почти как C, только безопасный и с трейтами и так далее. Если человек выбирает C++ то рано или поздно, но придется все таки понять как код работает на самом (хотя бы в общих чертах). Если идти от поинтеров и ручного управления памятью, то многие вопросы отпадут сами собой: на ранних этапах обучения сломать страх перед железом и ту же многопоточку будет делать гораздо легче.
источник

P

Pepe 🐸 in pro.cxx
Mikhail Kalugin
Может быть, тогда вообще держаться подальше от плюсов: есть же всякие шарпы, явы, го... Либо хочешь выжать максимум из железа (но тогда нужно знать как оно работает) либо хочешь удобств... Самая мощная система типизации (из тех что я видел) в Scala, самый лучший вывод типов в Haskell... В C# есть LINQ, в Go - фашизм (в хорошем смысле - все в точности как у всех) и простота освоения (язык, сделанный для обезьян), Rust почти как C, только безопасный и с трейтами и так далее. Если человек выбирает C++ то рано или поздно, но придется все таки понять как код работает на самом (хотя бы в общих чертах). Если идти от поинтеров и ручного управления памятью, то многие вопросы отпадут сами собой: на ранних этапах обучения сломать страх перед железом и ту же многопоточку будет делать гораздо легче.
зачем держаться подальше от плюсов? Плюсы очень мощный и удобный инструмент и тем удобнее чем новее. А как работают изначальные дизайны знать интересно, но речь шла с чего начинать, начинать с того чтобы пытаться понять имплиситные конверсии или auto? По моему легче понять как авто работает
источник

MK

Mikhail Kalugin in pro.cxx
Pepe 🐸
зачем держаться подальше от плюсов? Плюсы очень мощный и удобный инструмент и тем удобнее чем новее. А как работают изначальные дизайны знать интересно, но речь шла с чего начинать, начинать с того чтобы пытаться понять имплиситные конверсии или auto? По моему легче понять как авто работает
Джун никогда не напишет код (в смысле инструкции процессора) лучше, чем делает компилятор Rust. Суть в том, что на самом деле, нет ни каких «изначальных дизайнов» добавилось: auto, лямбды, переменные шаблоны (дословный перевод, лень искать русский термин), константы в шаблонах, концепты (в C++20), корутины - про управление памятью ничего нет, внутри оно как было ручным без сборки мусора или подсчета ссылок так и осталась - вся магия «умных указателей» живет в stl - компилятор с этим ничего не делает.
источник

MK

Mikhail Kalugin in pro.cxx
Pepe 🐸
зачем держаться подальше от плюсов? Плюсы очень мощный и удобный инструмент и тем удобнее чем новее. А как работают изначальные дизайны знать интересно, но речь шла с чего начинать, начинать с того чтобы пытаться понять имплиситные конверсии или auto? По моему легче понять как авто работает
Так что - три варианта: учить железо, принимать все на веру (просто зубрить алгоритмические сложности и потокобезопасность не задумываясь о том, почему оно так) или не связываться с плюсами.
источник

P

Pepe 🐸 in pro.cxx
Mikhail Kalugin
Джун никогда не напишет код (в смысле инструкции процессора) лучше, чем делает компилятор Rust. Суть в том, что на самом деле, нет ни каких «изначальных дизайнов» добавилось: auto, лямбды, переменные шаблоны (дословный перевод, лень искать русский термин), константы в шаблонах, концепты (в C++20), корутины - про управление памятью ничего нет, внутри оно как было ручным без сборки мусора или подсчета ссылок так и осталась - вся магия «умных указателей» живет в stl - компилятор с этим ничего не делает.
нет были же изначальные дизайны обусловленные железом того времени, не было тредов когда-то, просто потому что такое было железо, да и есть вещи которые просто из С выросли и потом вообще поменялись (type punning), появились новые семантики (move) и эти изначальные дизайны не какие-то незыблемые вещи.
источник

MK

Mikhail Kalugin in pro.cxx
Pepe 🐸
нет были же изначальные дизайны обусловленные железом того времени, не было тредов когда-то, просто потому что такое было железо, да и есть вещи которые просто из С выросли и потом вообще поменялись (type punning), появились новые семантики (move) и эти изначальные дизайны не какие-то незыблемые вещи.
Память с «того времени» почти не изменилась, только хуже стало - потому что, по факту, то, что сейчас считают «настольным компьютером» в то время называли бы NUMA - кластером. Несколько процессоров, каждый со своей памятью обращаются к общей памяти (больше чем собственная у любого из них и чуть медленнее) по каналам связи, чуть медленные чем интерлинк, но быстрее чем связь между двумя из узлов кластера (CPU и GPU)... Компилятору до этого всего в общем случае дела нет - если производительность сильно проседает на промахах в кэше - то это проблема программиста (который пишет как удобней). Любой язык это компромис между скоростью и удобством и C++ не исключение. Есть мнение, что сначала надо учить самое простое, а все эти кэши и ядра - потом, но у меня есть подозрение, что это самое «потом» никогда не наступит (время учить что-то сложное упущено - как и мотивация)
источник

UK

Uyutnov Kirill in pro.cxx
То, с какого стандарта начинать учить плюсы - диктует отрасль. Яндексы ориентированы на коммерцию и современные реалии. Тут хоть с драфтов начинай, пока выучат - вступят в силу как стандарты. Но пока именно в РФ большой пласт кода 11 и 14 стандартов. Поэтому начинать нужно с них. Разговор именно за плюсы.
источник

MK

Mikhail Kalugin in pro.cxx
Uyutnov Kirill
То, с какого стандарта начинать учить плюсы - диктует отрасль. Яндексы ориентированы на коммерцию и современные реалии. Тут хоть с драфтов начинай, пока выучат - вступят в силу как стандарты. Но пока именно в РФ большой пласт кода 11 и 14 стандартов. Поэтому начинать нужно с них. Разговор именно за плюсы.
Если цель - как можно быстрее подготовить программиста для конкретной организации - то подход хороший. Если честно, я последнее время сильно валюсь в «академическую информатику» наверное..
источник

P

Pepe 🐸 in pro.cxx
Mikhail Kalugin
Память с «того времени» почти не изменилась, только хуже стало - потому что, по факту, то, что сейчас считают «настольным компьютером» в то время называли бы NUMA - кластером. Несколько процессоров, каждый со своей памятью обращаются к общей памяти (больше чем собственная у любого из них и чуть медленнее) по каналам связи, чуть медленные чем интерлинк, но быстрее чем связь между двумя из узлов кластера (CPU и GPU)... Компилятору до этого всего в общем случае дела нет - если производительность сильно проседает на промахах в кэше - то это проблема программиста (который пишет как удобней). Любой язык это компромис между скоростью и удобством и C++ не исключение. Есть мнение, что сначала надо учить самое простое, а все эти кэши и ядра - потом, но у меня есть подозрение, что это самое «потом» никогда не наступит (время учить что-то сложное упущено - как и мотивация)
у меня другое впечатление. Многие никогда не выучивают новые стандарты, я вижу код написанный в 2018 который выглядит как из 1999
источник

MK

Mikhail Kalugin in pro.cxx
Pepe 🐸
у меня другое впечатление. Многие никогда не выучивают новые стандарты, я вижу код написанный в 2018 который выглядит как из 1999
Да, другая сторона медали, к сожалению... Писать на «C с Классами» кое где до сих пор модно...
источник

UK

Uyutnov Kirill in pro.cxx
Pepe 🐸
у меня другое впечатление. Многие никогда не выучивают новые стандарты, я вижу код написанный в 2018 который выглядит как из 1999
Не без этого.
источник

UK

Uyutnov Kirill in pro.cxx
Но учить новые стандарты и саморазвиаваться это одно, а с какого стандарта сейчас начинать изучать плюсы это все же другое. К тому же, человека изучающего 11 и 14 более старым синтаксисом не удивишь - ему будет понятно, что писали олды )
источник