|
Отличная статья про соотношение C и C++, Дают ли новые языки программирования прирост скорости разработки |
|
|
|
Aug 26 2016, 19:29
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Ссылка - https://habrahabr.ru/post/308550/Наконец-то выразили словами то, что я всегда хотел сказать. Т.е. для малых встраиваемых систем на Cortex-M3..M7, или для 8-и битников подавно преимущества C++ сводятся к нулю. Поскольку в проектах для них задействовано слишком мало программистов. Нужно не меньше сотни. А большее влияние на скорость разработки оказывают параметры IDE. В частности скорость компиляции. Поскольку это определяют культуру проектов.
|
|
|
|
|
Aug 26 2016, 20:35
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
вот уж скорость компиляции для "малых встраиваемых систем" вообще не заметна должна быть. а цифры в статье высосаны непонятно из чего. и для малых встраиваемых систем какой-нибудь простенький ГУЙ, например, с плюсами, даже одним человеком, пожалуй будет веселее и писАться, и затем читаться, чем на просто С, ну пусть и на 10-20%. а писать обёртки на С++ для какого-нибудь GPIO и таймеров пожалуй действительно баловство. ну и даже если плюсы не ускоряют разработку на небольших проектах, их надо теперь отовсюду выпилить что ли и запретить, мешают они кому-то?
|
|
|
|
|
Aug 26 2016, 20:59
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(Grizzzly @ Aug 26 2016, 23:15)  Не согласен, что именно IDE определяет скорость компиляции и тем более культуру программирования. Использование редактора, компилятора, СУВ и make без лишних сущностей в виде IDE зачастую требует большей культуры, строгости и т.д. и т.п. Но это слишком субъективно и не совсем по теме, не мог пройти мимо  Да, наверно понятие "культура" здесь сильно многозначное, сложно вокруг него дискутировать. Но я здесь имел в виду то, как делится проект на файлы и библиотеки, какие средства отладки интегрируются в исходники и как используются. Сколько версий создается и существует одновременно, как планируется время для отладки и какие средства на неё выделяются и т.д. Строгость или дисциплина тут не при чём.
|
|
|
|
|
Aug 26 2016, 21:01
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Очень понравился комментарий: QUOTE Десять программистов не сделают работу в десять раз быстрее, чем один программист, даже если говорить об одном и том же языке. Примерно на трети текста стало не интересно, я не настолько зануда. Полностью согласен. Статья - ерунда.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Aug 26 2016, 21:05
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(_pv @ Aug 26 2016, 23:35)  вот уж скорость компиляции для "малых встраиваемых систем" вообще не заметна должна быть. Ну это уже не малые будут, а примитивные. Проект с микролинуксом компилироваться может десятки минут, .NET micro framework тоже не меньше 15 мин компилируется. Те же RTOS со всем middleware компилируются по 5 мин и дольше. Чтобы накомпилить 1 мег бинарника не меньше 10 мин надо. А в GCC и все полчаса.
|
|
|
|
|
Aug 26 2016, 21:18
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 15-01-05
Из: Москва
Пользователь №: 1 980

|
Не согласен с топикстартером. А статья написана в стиле сумасшедшего бреда, обсуждают среднюю температуру по больнице. Код на С++ лучше структурирован - а значит легче для понимания. Если ваша программа занимает 1-2 экрана - не важно, на каком языке пишете, берите любой из популярных который лучше знаете. Но если это программа для прибора с датчиками, протоколами, алгоритмами и конечными автоматами - С++ будет намного эффективнее. Полиморфизм, инкапсуляция и шаблоны дадут более компактный, простой и человекочитаемый код. В простом коде сложнее допустить ошибки, его легче поддерживать. Я писал на Ассемблере и Си для PIC и Avr, а год назад свой проект под M3 переписывал на Си++. Код стал красивее
|
|
|
|
|
Aug 26 2016, 21:43
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 15-01-05
Из: Москва
Пользователь №: 1 980

|
Цитата(AlexandrY @ Aug 27 2016, 00:31)  Так не о красоте же речь. Вот гарантию даю, я скобочками, отступами, раскраской и подбором имён сделаю код на С-и красивее вашего.  Кажется вы пропустили абзац в моем посте. Я не только о красоте говорил. Чем больше программа, тем эффективнее в ней будет применение высокоуровнего языка. Это - факт.
|
|
|
|
|
Aug 27 2016, 03:57
|

Местный
  
Группа: Участник
Сообщений: 201
Регистрация: 28-07-16
Пользователь №: 92 747

|
Цитата(quarz @ Aug 26 2016, 21:18)  Код на С++ лучше структурирован - а значит легче для понимания. Думаю, сам по себе C++ не делает код структурированным. Структурированным его делает разработчик, если знает как. Потребовалось мне однажды поправить чужой проект для сравнительно небольшого устройства. Автор, вдохновленный передовыми возможностями ООП, напихал в суперкласс кучу всяких разностей, предполагая, что будет тыща версий устройств и все это когда-то кому-то пригодится. Однако предположение за 15 лет так и не оправдалось, устройство просуществовало в одном варианте со всеми избыточными наворотами кода. После прорубания через заросли исходников, выяснилось, что весь код умещается на пару читабельных экранов без нагромождений ООП. Цитата(quarz @ Aug 26 2016, 21:18)  Но если это программа для прибора с датчиками, протоколами, алгоритмами и конечными автоматами - С++ будет намного эффективнее. Это скользкая оценка. Как, например, измерить эффективность языка программирования? И насколько это "намного" эффективнее? Цитата(AlexandrY @ Aug 26 2016, 21:31)  Вот гарантию даю, я скобочками, отступами, раскраской и подбором имён сделаю код на С-и красивее вашего. У меня возникают похожие мысли. Цитата(quarz @ Aug 26 2016, 21:43)  Чем больше программа, тем эффективнее в ней будет применение высокоуровнего языка. Это - факт. А если на заключительном этапе разработки в базовом классе обнаружен баг и его исправление затронет все производные от него структуры с последующим затратным тестированием? Будет ли это эффективно? По поводу объемов кода... Читал я об использовании несколько лукавого критерия "количество строк кода" при оценке целесообразности применения C или C++ для конкретного проекта: - до 10 000 применять C; - от 10 000 до 100 000 возможны варианты C/C++; - от 100 000 применять C++. Мои личные ощущения в целом согласуются с таким подходом. Для написания математического ядра или эмбеддерства мои проекты не вылазили за 20 000 строк, поэтому стойкой потребности в языке с развитыми средствами ООП не возникало. Периодически заглядываю в исходники модулей ядра и дровишек для Linux и тоже в основном все понятно в чужом коде на чистом C. Явное и естественное желание использовать ООП возникло при обдумывании GUI оберток, где все может меняться налету, наследоваться, бегать, прыгать, скакать и масштабироваться. В более низкоуровневой области использование ООП напрашивается при описании хитровывернутых протоколов с кучей настроек, режимов и свистелок.
Сообщение отредактировал BackEnd - Aug 27 2016, 03:57
--------------------
"Классики марксизма говорили, что общественно-экономическая формация меняется с изменением средств производства, которые всегда принадлежали имущему классу. И сейчас мы находимся в системе координат капитализма, когда самые передовые средства производства принадлежат уже не капиталистам. Люди, у которых нет обуви, имеют гаджеты. Сейчас создана такая информационная паутина, что вместо коллективного бессознательного можно говорить о коллективном сознании. Если иметь мозги и гаджеты, можно перевернуть весь мир. Коллективное сознание будет управлять миром! Это исторический путь, который нельзя миновать." Вячеслав Мальцев
|
|
|
|
|
Aug 27 2016, 07:35
|
Частый гость
 
Группа: Участник
Сообщений: 197
Регистрация: 8-07-16
Пользователь №: 92 484

|
Цитата(quarz @ Aug 26 2016, 21:18)  Полиморфизм, инкапсуляция и шаблоны дадут более компактный, простой и человекочитаемый код. В простом коде сложнее допустить ошибки, его легче поддерживать. То что код будет компактный - это вовсе не значит что он будет более читабельный и его удобней поддерживать. Когда у тебя (а хуже когда в чужом коде, который ты поддерживаешь) куча многоэтажных (причем ПЕРЕКРЕСТНЫХ) иерархий классов, шаблонов, перегрузок и виртуальных функций, то чтобы понять какой же код на самом деле у тебя здесь работает нужно перелопатить всю иерархию и просмотреть все варианты перегрузки и проанализировать шаблоны. Отладка и поиск бага в такой программе то ещё "удовольствие". И получается, что когда нужно ДЕТАЛЬНО понять что конкретно и где у тебя вызывается (а не просто получить общее "абстрактное" представление о коде) как же работает данный код, то в страничке кода на С++ можно разбираться НЕДЕЛЮ. Т.е. ООП направлен на скрытие "несущественных деталей". А как быть если копаться в этих "деталях" и искать в них баги как раз и есть твоя работа? А их от тебя "скрыли". Чем усложнили твою работу
Сообщение отредактировал Укушенный воблой - Aug 27 2016, 07:41
|
|
|
|
|
Aug 27 2016, 08:11
|
Профессионал
    
Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596

|
В современной парадигме ООП для того чтобы всё корректно наследовалось, перегружалось и пр - принято плодить много однострочных методов. метод длиннее 20 строк? надо рефакторить!
В результате вместо куска алгоритма функционально на один экран, в котором разобраться - три минуты, получается 25+ методов, раскиданных по тексту черти где, и понимание сути алгоритма растягивается минут на 20.
Вообще, у меня сложилось впечатление, что приличное количество программистов переняли себе определенный стиль поведения, сходный с дорожными рабочими. В духе - зачем сразу делать качественные дороги, когда можно делать некачественные и потом бесконечно их ремонтировать? Зачем сразу писать код, который будет гарантированно работать, и лишать тем самым себя стабильного заработка на среднесрочную перспективу? Ведь переключение на написание другой программы потребуется опять РАЗБИРАТЬСЯ с тем что должно быть реализовано, знакомиться с новой предметной областью. А это надо мозгами опять шевелить, а не куски методов туда-сюда копипастить. Лень.
--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
|
|
|
|
|
Aug 27 2016, 10:45
|

Местный
  
Группа: Участник
Сообщений: 201
Регистрация: 28-07-16
Пользователь №: 92 747

|
Цитата(krux @ Aug 27 2016, 08:11)  Вообще, у меня сложилось впечатление, что приличное количество программистов переняли себе определенный стиль поведения, сходный с дорожными рабочими. В духе - зачем сразу делать качественные дороги, когда можно делать некачественные и потом бесконечно их ремонтировать? На эту тему есть фейковое интервью Страуструпа, но как раз про это. Если кто не видел оригинал прикола http://www.erenkrantz.com/Humor/FakeIEEESt...Interview.shtmlПеревод http://archive.is/tC8ZR
--------------------
"Классики марксизма говорили, что общественно-экономическая формация меняется с изменением средств производства, которые всегда принадлежали имущему классу. И сейчас мы находимся в системе координат капитализма, когда самые передовые средства производства принадлежат уже не капиталистам. Люди, у которых нет обуви, имеют гаджеты. Сейчас создана такая информационная паутина, что вместо коллективного бессознательного можно говорить о коллективном сознании. Если иметь мозги и гаджеты, можно перевернуть весь мир. Коллективное сознание будет управлять миром! Это исторический путь, который нельзя миновать." Вячеслав Мальцев
|
|
|
|
|
Aug 27 2016, 12:08
|

Профессионал
    
Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718

|
Цитата Можно цифру? Во сколько раз легче? статья настолько бредовый бред насколько вообще можно так набредятить. подстать хабрядику. пример с квадратами абсолютно синтетический. вон, некоторый и загрузчик дос в машинных кодах помнят. совершенно забывается вопрос отладки. и это самое начало статьи. Цитата Хорошо. Но, всё же, можно цифру? Похоже, что интервьювер попадает под статью о защите диких животных - аналогичный уровень интеллекта. Цитата не уверен, понимаете ли вы, что я имею в виду. правильно ответил. наверно тут и надо было закончить интервью. Цитата что C++ как-то значительно снизил трудоёмкость. закрыл вкладку и дальше не читал. это как гладить холодильником - ну, сзади же тёплое. PS. отдаю должное тов. AlexandrY. В течение последних нескольких дней он заметно встрепенул "отпускной" форум холиварами. Маладэсь.
|
|
|
|
|
Aug 27 2016, 14:17
|

ядовитый комментатор
     
Группа: Свой
Сообщений: 2 765
Регистрация: 25-06-11
Пользователь №: 65 887

|
Отдаю должное посту свыше от smalcom- встретились бы мы в реальной жизни, пожал бы Вам руку и проставился пивом  Одним словом- поддерживаю на все 100. Что касается: Цитата AlexandrY течение последних нескольких дней заметно встрепенул "отпускной" форум холиварами. Дык не только тут, еще и на том же хабре пытается гнать на людей очередное нечто. Что характерно- люди с платкой все делают правильно, и то что изображено на картинке- тоже правильно. Но видать после своих опусов в подфоруме для плат надо на ком-нибудь отыграться
|
|
|
|
|
Aug 28 2016, 09:21
|

unexpected token
   
Группа: Свой
Сообщений: 899
Регистрация: 31-08-06
Из: Мехелен, Брюссель
Пользователь №: 19 987

|
Тема сия - мегахоливарная. Уже несколько таких было. Тысячу раз перемололи и С, и С++, и ООП. Граждане, окститесь, ну зачем вам это снова? На Хабре недавно наткнулся на переводную статью (ссылку приводить не буду) о том что ООП бесполезно и вообще умерло  И это уже не первый случай публикования ереси для Хабра. Так что рассматривать этот ресурс серьезно не стоит (пмсм). Меня лично мало беспокоит, кто на чем программирует для эмбеда, если это не касается моих коллег Недавно у нас был индус-практикант из TUDelft. Чтоб экстренно прервать измерительную процедуру, написанную на Питоне, он выключал электрометр Keithley, с которым программа общалась по GPIB. А вы тут про С++ в МК...
--------------------
А у тебя SQUID, и значит, мы умрем.
|
|
|
|
|
Aug 28 2016, 10:04
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(alexunder @ Aug 28 2016, 12:21)  Тема сия - мегахоливарная. Уже несколько таких было. Так потому и холиварная, что реально разницы в производительности программирования что на C, что на C++ нет. Тем более статья так совпала с моим личным опытом. А у меня знаете ли под сотню проектов. И с ООП и без ООП. Прямо сейчас поддерживаю 50 программных проектов. Да и область обсуждения я сузил только определенным сценарием разработки и только для определенного класса систем. Тут все гораздо однозначней. А если граждане холиварят значит их это волнует. Почему мы не должны говорить о том что нас волнует? Или в мире ничего не меняется, и мы будем смотреть в рот Страуструпу который и Cortex-M4 в руках то не держал? Другое дело когда в дискуссию лезут просто посторонние, обычно тролящие в теме про PCB. Это уже местного модератора проблема должна быть.
|
|
|
|
|
Aug 28 2016, 11:59
|
Частый гость
 
Группа: Участник
Сообщений: 176
Регистрация: 20-02-14
Из: Томск
Пользователь №: 80 612

|
Цитата(smalcom @ Aug 28 2016, 15:29)  т.е. у вас не бывает так, что написал сразу хорошо программу, сдал и она тебя не беспокоит. У вас только так, потом пилить, пилить и пилить? Не знаю, как у Вас, а у меня поддержка проектов в основном - это изменение функционала по пожеланиям клиентов. Т.е. девайсы продаются своим чередом, но у клиентов (как старых так и новых) изредка возникает желание что-то изменить в функционале. Прибыль мы получаем от продажи устройств. А поддержка ПО позволяет расширять продажи. По запросам клиентов формируется новая версия ПО, которую они могу взять с сайта и самостоятельно обновить программу в устройстве. А теперь давайте представим, у "AlexandrY" около 50 проектов на контроле. Если по каждому из них возникает потребность что-то изменить хотя бы раз в год, каждую неделю перед службой поддержки ставится новая задача. У меня тоже около 10 проектов в поддержке, поэтому представляю, что это такое.
|
|
|
|
|
Aug 28 2016, 17:31
|

Профессионал
    
Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718

|
Цитата Смысл в том, что таких как вы я не рекомендую к найму. Цитата Нет, с C++ никуда сползать не надо, это ничего не даст. не надо юлить. Уже в собственном троллинге запутались. А, вы так думаете? Искренне сочувствую, всегда сочувствую блаженным.
|
|
|
|
|
Aug 28 2016, 18:04
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(gazpar @ Aug 28 2016, 18:33)  Тут уже писали, что для каждого инструемнта есть свой класс задач. И в своём классе задач определённый инструмент действительно повышает эффектиность разработки, т.к. не просто заточен под это, а создан для этого. А можете это логически доказать, или с помощью аналогий? А то ведь например человеческие языки как то не дают никаких преимуществ нациям. Они сначала дали преимущество обезьянам, а потом как-то развитие их продуктивности застыло. Странно. Статья как раз говорит, что нет никаких таких классов задач особенных для C или C++. Просто чтобы C++ показал эффективность он должен использоваться в проекте с толпой народу.
|
|
|
|
|
Aug 29 2016, 01:25
|
Частый гость
 
Группа: Участник
Сообщений: 147
Регистрация: 9-01-14
Пользователь №: 79 952

|
Цитата(AlexandrY @ Aug 28 2016, 22:04)  А можете это логически доказать, или с помощью аналогий? Есть несколько типовых примеров. Один озвучу. Числа бывают разные: действительные, натуральные, целые, рациональные, иррациональные, комплексные. Попробуйте реализовать работу с комплексными числами на Си и С++. Если интересно, можете глянуть вариант на С++ в книге Дж. Коплиена. А потом скажите, где более эффективная и понятная реализация(легче поддерживаемая и развиваемая, к примеру).
|
|
|
|
|
Aug 29 2016, 05:40
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(gazpar @ Aug 29 2016, 04:25)  А потом скажите, где более эффективная и понятная реализация(легче поддерживаемая и развиваемая, к примеру). Известный аргумент. Но! Комплексные числа это такая мелочь приближающаяся по своему значению к нулю во встраиваемых системах. Спросите здесь программистов, кто на Cortex-M4 использовал комплексные числа хоть раз в жизни. Я ни разу! Хотя нет, наверно использовал, но это всегда скрыто было в готовых библиотеках. Но ладно, по существу метод предложенный Коплиен Дж. Программирование на C++ (2005) на странице 99 весьма специфичен и требует перестройки мышления. Т.е. переходя к комплексным числам нужно вспомнить что там некоторые операторы перегружены, причем не все. Чтобы узнать какие вам надо влезть в этот класс и подробно его рассмотреть Это у вас будет убивать хороший кусок времени каждый раз при возвращении к работе с этими числами. Потом как интересно вы будете смотреть на эти числа в отладчике. IAR навороченная среда, но даже он в таком виде комплексные числа не показывает. Вам придется лезть каждый раз в недра объекта. По сути класс Коплиен-а экономит пару скобочек и запятых, считай считанные секунды или минуты на протяжении года работы программиста. Но усложнит отладку и поддержку, а это уже гораздо серьезней, тут речь о часах.
|
|
|
|
|
Aug 29 2016, 09:25
|
Частый гость
 
Группа: Участник
Сообщений: 147
Регистрация: 9-01-14
Пользователь №: 79 952

|
Цитата(AlexandrY @ Aug 29 2016, 08:40)  По сути класс Коплиен-а экономит пару скобочек и запятых, считай считанные секунды или минуты на протяжении года работы программиста. Но усложнит отладку и поддержку, а это уже гораздо серьезней, тут речь о часах. А также экономит реализацию в коде операций: сложения, вычитания, деления, умножения и т.п. Применить можно для реализации каких-либо формул с комплексными числами. Отладку- нет, поддержку- нет; т.к. время для вникания составляет 20 минут от силы, потому как там всё просто и понятно реализовано(у Коплиена).
|
|
|
|
|
Aug 29 2016, 16:15
|
Частый гость
 
Группа: Участник
Сообщений: 197
Регистрация: 8-07-16
Пользователь №: 92 484

|
Цитата(gazpar @ Aug 29 2016, 02:25)  Есть несколько типовых примеров. Один озвучу.
Числа бывают разные: действительные, натуральные, целые, рациональные, иррациональные, комплексные.
Попробуйте реализовать работу с комплексными числами на Си и С++. Если интересно, можете глянуть вариант на С++ в книге Дж. Коплиена.
А потом скажите, где более эффективная и понятная реализация(легче поддерживаемая и развиваемая, к примеру). На "синтетических" (специально придуманных, чтобы показать преимущества того или иного языка, задачах) примерах все хорошо и блестяще выглядит. Взять хотя бы классический пример "точка, круг, круг в квадрате", который почти во всех книгах по ООП приводится. Но только когда дело касается РЕАЛЬНЫХ, а не надуманных задач, то тут то и начинается целый геморрой. Не случайно же на "чистом" С++ практически никто из программистов не пишет. Все используют разного рода фреймворки, надстройки, проблемно-ориентированные библиотеки и прочие DSL-и Цитата(Leka @ Aug 29 2016, 09:02)  Из инета: "...С++ вреден для мозга... Погружение программиста в С++ неизбежно приводит к тому, что он наполняет проект ненужными сложностями, которые кажутся ему «замечательными» и «способствующими разработке», но в действительности ухудшают модифицируемость до такой степени, что отдельно взятый компонент невозможно доработать без переписывания всего приложения с нуля..." Именно так. В С++ программе можно только "наследоваться" и перегружать. Но не дай Бог лезть в базовые классы. Рискуешь обрушить всю иерархию и гигабайты уже написанного кода
Сообщение отредактировал Укушенный воблой - Aug 29 2016, 16:17
|
|
|
|
|
Aug 29 2016, 17:34
|
Профессионал
    
Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596

|
Цитата(Укушенный воблой @ Aug 29 2016, 19:15)  Но не дай Бог лезть в базовые классы. Рискуешь обрушить всю иерархию и гигабайты уже написанного кода Цитата(smalcom @ Aug 29 2016, 19:49)  Смеялся так, что чуть со стула не упал. это надо расценивать так, что вы smalcom каждый ваш проект лезете перегружать, например, в iostream?
--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|