-
- Вот в этом и отличие C++ от C# или Java. В том, что в последних "капец какой оверхед". - fk0(05.10.2020 11:08)
- В C++ оверхед как правило нулевой, а иногда и отрицательный,
например std::sort() vs qsort(). - йцyкeн(04.10.2020 22:55)
- А если нужно сделать 10 сортировок разных типов данных/предикатов и
флеша для кода в обрез? - Kabdim(05.10.2020 12:41)
- Ну, qsort ведь никуда не делся. Кроме того, мне ваш пример кажется
чисто умозрительным. В моей практике такое не встречалось. Скорее
наблюдается другое: там, где я раньше применил бы сортированный
массив, теперь больше чем в половине случаев я использую map, и
нужда в сортировке отпадает. - йцyкeн(05.10.2020 13:02)
- Увы, но между qsort и std::sort -- огромная пропасть. Странно этого не понимать. Начиная с того, что std::sort таки работает с объектами любых типов, а qsort только с имеющими тривиальный конструктор копирования. Потом qsort гораздо менее эффективен из-за сортировки обменом (std::sort требует чтоб value_type у итератора был перемещаемым и из-за этого может не тупо менять один сдругим, но двигать по памяти за ~вдвое меньшее число операций). qsort может сортировать только fk0(327 знак., 06.10.2020 02:25)
- Я веду к тому что мнение "оверхед у темплейтов нулевой" несколько
упрощеннолукавое. Есть ситуации, особенно в эмбедед
программировании, где оверхед МП начинает быть чувствительным. - Kabdim(05.10.2020 13:12)
- Да, пример с std::sort() был не самый удачный, учитывая, что в
предыдущем посте речь шла о размере, а не о скорости. Однако
аргумент о том, что шаблоны ведут к "code bloat" тоже лукавый. Как
бы предполагается, что без шаблонов дублирования кода не
происходит, но на деле ещё как происходит. Откройте реальный проект
на тёплом ламповом Си - копипасты там будет предостаточно. - йцyкeн(05.10.2020 13:34)
- На холодном транзисторном C++ многие библиотечные функции на самом деле ничего не дублируют. Тот же std::vector не плодит функции под кажды отдельный тип, а использует обобщённые функции где целесообразно. Разумеется не сам по себе, а код так написан руками. - fk0(06.10.2020 02:29)
- Некоторые считают, что "explicit is better than implicit". - s_h_e(05.10.2020 13:37)
- Да, пример с std::sort() был не самый удачный, учитывая, что в
предыдущем посте речь шла о размере, а не о скорости. Однако
аргумент о том, что шаблоны ведут к "code bloat" тоже лукавый. Как
бы предполагается, что без шаблонов дублирования кода не
происходит, но на деле ещё как происходит. Откройте реальный проект
на тёплом ламповом Си - копипасты там будет предостаточно. - йцyкeн(05.10.2020 13:34)
- Ну, qsort ведь никуда не делся. Кроме того, мне ваш пример кажется
чисто умозрительным. В моей практике такое не встречалось. Скорее
наблюдается другое: там, где я раньше применил бы сортированный
массив, теперь больше чем в половине случаев я использую map, и
нужда в сортировке отпадает. - йцyкeн(05.10.2020 13:02)
- Кстати отличный пример, когда C++ с шаблонами обставляет другие
языки. А то тут один товарищ утверждал, мол метапрограммирование не
нужно. - fk0(05.10.2020 11:06)
- Ну и чего ты продолжаешь передергивать? Если ты вдруг забыл, я
писал что МП плох в простоте и безошибочности использования и это
огромная проблема. Но его безальтернативность в С++ очевидна. У нас
разные точки зрения и ничего плохого в этом нет. - Kabdim(05.10.2020 12:52)
- Следуя такой логике, язык PIC18 -- совершенно безошибочный, там
всего-то 35 простых инструкций... fk0(58 знак., 06.10.2020 02:13)
- Неа, следуя твоей логике я бегаю по саванне с камнем примотанным к палке и охочусь на мамонтов, потому что так еще проще чем программировать с МП. ) - Kabdim(06.10.2020 12:37)
- Это нормальная логика, если твоя цель - не надуть до бесконечности
щеки на рынке труда, накачанном очередным биржевым пузырем, а
получить (выдать) полезный результат. - s_h_e(06.10.2020 10:03)
- Полезный результат это такая, очень неопределённая, эфемерная
сущность. В чём он полезный, и как его измерять. В
американизированных фирмах есть такая должность -- product owner.
По идее он, или CTO, с достаточным техническим бэкграундом должны
хорошо понимать жизненный цикл (почти всегда программного)
продукта. Он отнюдь не заключается в том, чтоб просто "любому
студенту написать программу за три месяца", как это часто думают
те, которым нужен быстрый результат. А потом fk0(4420 знак., 06.10.2020 20:38)
- Когда-то я ездил на автомобиле с впрыском, но при этом педаль газа соединялась с дроссельной заслонкой тросиком. Сейчас между ними 100500 строчек (говно)кода. Откуда взялась эта сложность? Но уходить она явно никуда не собирается. - йцyкeн(06.10.2020 21:59)
- Сам себе противоречишь, тут же оверинжиниринг и тут же сложность-константа. Нихрена не константа. По минимальной сложности есть ограничения, а в плюс можно огого как улететь. Это миллион раз обсуждалось, могу только повторится. Проблема плюсов не сложность, а то, что их применяют там, где здоровенный кусок спецификации языка нахрен не упал. А это практически везде. И это всегда издержки. s_h_e(414 знак., 06.10.2020 21:16)
- На рынке есть бесконечное множество контор, которым нужен быстрый
результат - лифты, умные дома, контроллеры собачьих будок и прочие
ардуины, там знание языка не нужно. А есть Huawei и Quantenna,
которые пылесосом выкачивают топовых спецов, предлагая зарплаты в
районе 200к. evgeniy1294(128 знак., 06.10.2020 12:32)
- И про них тоже. Есть у них быстрые решения. Нужно через пол года на рынке продукт. Пусть говно, а не продукт, но если его не вывести на рынок через пол года -- в следующем году по направлению вообще работы не будет. Причин почему -- масса, начиная с того, чтоб направление получило финансирование менеджерам нужна какая-то демонстрация, нужен фидбэк от продажников и т.д. -- никто не будет вкладываться непонятно во что, нужно конкурировать за средства с другими направлениями, fk0(1183 знак., 06.10.2020 20:52)
- Про хуявей не знаю, а куантенна это давно уже онсеми. И нихрена они про знание языка не спрашивали у меня например, спрашивали в основном про алгоритмы и понимание общих принципов работы выч. систем. s_h_e(183 знак., 06.10.2020 12:46)
- Полезный результат это такая, очень неопределённая, эфемерная
сущность. В чём он полезный, и как его измерять. В
американизированных фирмах есть такая должность -- product owner.
По идее он, или CTO, с достаточным техническим бэкграундом должны
хорошо понимать жизненный цикл (почти всегда программного)
продукта. Он отнюдь не заключается в том, чтоб просто "любому
студенту написать программу за три месяца", как это часто думают
те, которым нужен быстрый результат. А потом fk0(4420 знак., 06.10.2020 20:38)
- Следуя такой логике, язык PIC18 -- совершенно безошибочный, там
всего-то 35 простых инструкций... fk0(58 знак., 06.10.2020 02:13)
- Проблема в том, что это "обставляет" в обычной разработке не нужно
(т.е. нужно, но в очень ограниченном наборе сфер). На болидах F1 на
работу никто не ездит. - s_h_e(05.10.2020 12:15)
- Что значит не нужно? Тебе значит колёса, педали, руль дай, а всё
что под капотом -- не нужно. Вот как-то так звучит. Без того, что
"не нужно" -- элементарно не сделать библиотечных функций. Тех,
которые "в обычной разработке". Ты говоришь, мол не нужно, а сам
пользуешься но не замечаешь. Как-то так. - fk0(06.10.2020 02:16)
- Любую библиотечную функцию можно написать на ассемблере,
гарантирую. - s_h_e(06.10.2020 10:09)
- Очевидно, что std::sort ты на ассемблере не напишешь при всём
желании. И даже на подмножестве C++ без шаблонов. В том у суть
метапрограммирования, оно лежит уже в другом пространстве,
измерении, не достигаемом любнми "классическими" средствами. - fk0(06.10.2020 21:03)
- Ну ладно вам, эти все шаблоны в динамических языках вообще не
нужны, кек. А если сильно нужны - то генерируется текст и eval() на
него (нет, правда) - lloyd(06.10.2020 21:07)
- Шаблоны работают не на уровне текста, а в пространстве типов. На уровне текста далеко не уедешь, ведь захочется не просто подставлять, а ещё понимать что именно тебе подсунули и в зависимости от аргумента делать выбор. В динамических языках динамическая же диспетчеризация. И в ряде статических (где нет статического полиморфизма). Что в лучшем случае -- далековато от оптимального кода. Если этот случай вообще наступит, возвращаясь к сортировке, а не припомню где можно fk0(1888 знак., 07.10.2020 12:29)
- В чём сила шаблонов C++?
В правде.В том, что они не ломают строгую статическую типизацию, так что сравнивать их с динамическими языками абсолютно некорректно даже по функционалу. Про скорость я даже заикаться не буду. - йцyкeн(06.10.2020 22:05)- Вообще-то не ломают никакую типизацию, только отодвигают время
опредления типа к моменту компиляции в месте использования. Хотя
сравнивать действительно некорректно, в динамиеских языках можно
натворить еще больше дичи, чем с шаблонами. - Kabdim(07.10.2020 11:37)
- Ключевое слово было "статическую". - йцyкeн(07.10.2020 12:24)
- Давайте с другого конца, вот к примеру: Kabdim(54 знак., 07.10.2020 12:31)
- Если это C++, то конечно статическая. То же самое, что int i = 0; - йцyкeн(07.10.2020 12:47)
- А если: #define MAKE_VAR(a,b) auto a = b MAKE_VAR(i, 0); ---- А
почему тогда статическая типизация ломается в таком (к примеру)
выражении Kabdim(519 знак., 07.10.2020 15:24)
- В вашем примере статическая типизация работает как доктор прописал:
если при объявлении переменной она получила тип
vector<int>, потом его поменять нельзя. - йцyкeн(07.10.2020 18:14)
- Мои глаза, из-за жарких споров с другим участником конфы, прочитали не то что было вами написано. Извиняюсь. - Kabdim(08.10.2020 15:44)
- В вашем примере статическая типизация работает как доктор прописал:
если при объявлении переменной она получила тип
vector<int>, потом его поменять нельзя. - йцyкeн(07.10.2020 18:14)
- А если: #define MAKE_VAR(a,b) auto a = b MAKE_VAR(i, 0); ---- А
почему тогда статическая типизация ломается в таком (к примеру)
выражении Kabdim(519 знак., 07.10.2020 15:24)
- Если это C++, то конечно статическая. То же самое, что int i = 0; - йцyкeн(07.10.2020 12:47)
- Давайте с другого конца, вот к примеру: Kabdim(54 знак., 07.10.2020 12:31)
- Ключевое слово было "статическую". - йцyкeн(07.10.2020 12:24)
- Вообще-то не ломают никакую типизацию, только отодвигают время
опредления типа к моменту компиляции в месте использования. Хотя
сравнивать действительно некорректно, в динамиеских языках можно
натворить еще больше дичи, чем с шаблонами. - Kabdim(07.10.2020 11:37)
- Ну ладно вам, эти все шаблоны в динамических языках вообще не
нужны, кек. А если сильно нужны - то генерируется текст и eval() на
него (нет, правда) - lloyd(06.10.2020 21:07)
- Вот не надо так говорить в присутствии людей, которые реально писали на ассемблере. Когда-то у меня не было выбора, теперь выбор есть, и добровольно на эти галеры я не вернусь. - йцyкeн(06.10.2020 11:31)
- Очевидно, что std::sort ты на ассемблере не напишешь при всём
желании. И даже на подмножестве C++ без шаблонов. В том у суть
метапрограммирования, оно лежит уже в другом пространстве,
измерении, не достигаемом любнми "классическими" средствами. - fk0(06.10.2020 21:03)
- Любую библиотечную функцию можно написать на ассемблере,
гарантирую. - s_h_e(06.10.2020 10:09)
- F1 из семейства стм32 ещё вполне себе в ходу, вообще-то. - SciFi(05.10.2020 12:19)
- Что значит не нужно? Тебе значит колёса, педали, руль дай, а всё
что под капотом -- не нужно. Вот как-то так звучит. Без того, что
"не нужно" -- элементарно не сделать библиотечных функций. Тех,
которые "в обычной разработке". Ты говоришь, мол не нужно, а сам
пользуешься но не замечаешь. Как-то так. - fk0(06.10.2020 02:16)
- Ну и чего ты продолжаешь передергивать? Если ты вдруг забыл, я
писал что МП плох в простоте и безошибочности использования и это
огромная проблема. Но его безальтернативность в С++ очевидна. У нас
разные точки зрения и ничего плохого в этом нет. - Kabdim(05.10.2020 12:52)
- подписываюсь! утверждаю что даже для МК с 16к флеша и 2к озу также
работает. ибо ООП не в коде и размере чегото а в форме мышления и
изобразительном инструменте оного. - klen(04.10.2020 23:55)
- Переписывал тяжелый в сопровождении код в ООП. Размер загружаемого модуля уменьшился с 32 кБ до 28 кБ. И что интересно - дальнейшее добавление функционала практически не увеличивало размер загружаемого модуля. И добавление нового функционала уже не приводило к капитальным поломкам программы (как это происходило раньше). - _volkanaft_(05.10.2020 04:56)
- А если нужно сделать 10 сортировок разных типов данных/предикатов и
флеша для кода в обрез? - Kabdim(05.10.2020 12:41)
- Задача ООП состоит в структурировании кода, 1МБ флеша вмещает в себя сотни тысяч строк кода, организовать такой объём без ООП непросто. evgeniy1294(311 знак., 04.10.2020 22:41)
- Казалось бы, при чем тут ООП. Чистый ООП очень хорошо ложится на
гуи, которые есть и у микроконтроллеров. - lloyd(04.10.2020 22:11)
- Где-то есть, а где-то нет. Где-то вместо него HTML или другой какой язык разметки. - Cкpипaч(04.10.2020 22:23)