PVS-Studio corporate blog
Programming
C++
Comments 70
+12
Интересно, откуда в список вылез Visual Basic c приростом большим, чем у JavaScript?
+3
Даже если и так, всё равно не понятно, откуда такой прирост.
Всё стали программировать макросы в Excel?
Это ведь единственное применение этой технологии?
UFO landed and left these words here
+8
Давно уже замечено, что этот рейтинг не отвечает действительности.
+8
Несмотря на то, что C++ — язык, дающий разработчику, как говорится, все карты в руки, область его применения не всеобъемлюща


Удивлен! В какой же это области нельзя применить С++?
UFO landed and left these words here
UFO landed and left these words here
+1
А нужен ли обычному вебу с++? В нашей компании к примеру сервер-сайд тоже частично на с++.
0
ActiveX же. Хоть и закрывает и устарел, но нельзя сказать, что «нельзя применить C++»
0
При том, что с его помощью можно применить C++ в «браузер-сайде».
0
Ну тогда уж и NPAPI (плагины к FF и до недавнего времени к Chrome).
+6
Согласен, в настоящее время самый кроссплатформенный и высокопроизводительный код на компилируемом языке пишется на C++.
-11
Когда то в универе у нас был c++ и я страшно не любил программирование из-за этого. Позже появилась Java, с которой я сейчас и работаю, и полюбил писать код. Однако решил начать c++ с нуля и знаете, это чертовски крутой язык. Да, он сложнее, но он настолько крут, что даже Чак Норис не настолько крут.
+19
Чак Норрис настолько крут, что минусует комментарии даже не зная что такое хабр.
0
Вы с ФП не сталкивались. После ФП понимаешь, что Scala/Haskell/Kotlin/OCaml/etc настолько круты, что всякие C++/Java кажутся жалкой поделкой (последние 3 года пишу на C++, говорю не от балды). Я опускаю вопрос производительности, т.к. спорить тут не о чем — числодробилки на C/C++, спору нет.
+2
Люблю Haskell и C++ одновременно, и с удовольствием пишу код на них обоих. Если стандарт плюсов достаточно свеж, конечно.
+1
Да, мы пишем на старом стандарте. Новый приятен, не спорю. Но до ФЯП ему далеко.
0
Конечно, далеко.

Просто при написании кода на современном C++ я тоже получаю удовольствие. Иногда кажется, что весьма плохое и извращённое удовольствие, это да.
0
Просто при написании кода на современном C++ я тоже получаю удовольствие. Иногда кажется, что весьма плохое и извращённое удовольствие, это да.

Тоже очень люблю и практикую уже более 10 лет C++, далее поток сознания
… и очень часто погружаюсь и ощущаю то Бесконечное Добро Сострадание и Милосердие, что содержится в нём :)

Часто и особо чувствую я это когда нужна мне, например, такая простая вещь как if этапа компиляции, который уж внутри шаблона точно не проблема сделать. Нужен он, конечно же, дабы можно было сделать шаблон с шахматами и дамами функциональностью, которой можно аннигилировать целые планеты одним вызовом которую регулировать в широких пределах… а его нет.

Но как говорилось в одном анекдоте «у нас есть метод» ибо в стандарте есть Полностью Прекрасное sfinae, которым с помощью enable_if и оверхедом по коду в пачку функций таки можно добиться функциональности эквивалентной по смыслу if-у этапа компиляции.

у нас есть метод - бонус для осиливших вышенаписанное
Трое математиков и трое физиков собираются ехать на поезде в другой город на конференцию. Они встречаются перед кассой на вокзале. Первой подходит очередь физиков, и они, как все нормальные люди, покупают по билету на человека. Математики же покупают один билет на всех.

– Как же так? — удивляются физики, — Ведь в поезде контролёр, вас же без билетов оттуда выгонят!
– Не волнуйтесь, — отвечают математики, — У нас есть МЕТОД.

Перед отправкой поезда физики рассаживаются по вагонам, но стараются проследить за применением загадочного «метода». Математики же все набиваются в один туалет. Когда контролёр подходит к туалету и стучит, дверь приотворяется, оттуда высовывается рука с билетом. Контролёр забирает билет, и дальше все они без проблем едут в пункт назначения.

После конференции те же вновь встречаются на вокзале. Физики, воодушевившись примером математиков, покупают один билет. Математики не берут ни одного.

— А что же вы покажете контролёру?
— У нас есть МЕТОД.

В поезде физики набиваются в один туалет, математики — в другой. Незадолго до отправления, один из математиков подходит к туалету, где прячутся физики. Стучит. Высовывается рука с билетом. Математик забирает билет и возвращается к коллегам.

МОРАЛЬ: Нельзя использовать математические методы, не понимая их!



Ну а если серьёзно, то в виду отсутствия if этапа компиляции и, например, switch для basic_string, который тоже нужен и который также очень легко сделать, приходится в современном C++11 — C++14 использовать либо макросы препроцессора либо жрать кактус и писать без макросов ещё более унылый для восприятия код :(

В общем, искренне не понимаю почему такие простые вещи, думаю многие смогут назвать ещё несколько подобных, не реализованы до сих пор.
0
Был у меня опыт написания на Scala,Groovy. Кратко и красиво спору нет.
+2
Мы в универе начинали с одновременного изучения C++ и Pascal. В C++ изучали в основном подмножество C, просто написание учебных программ без использования стандартной библиотеки. Он мне показался более понятным и удобным, чем Pascal. Но сейчас я пишу на более «высокоуровневых» языках.
Скрытый текст
В принципе, это неплохой язык для начального обучения, если не лезть в дебри метапрограммирования и сложных ООП абстракций. Потом уже можно переходить на другие языки, с пояснениями в плане «в C++ надо было делать так, а в этом языке это делается вот так, и это удобнее». Для начинающих будет более понятно, зачем придумали сборщики мусора, динамическую типизацию, и как устроена работа со строками. А то я пару раз сталкивался с вопросами вида «а почему C++ сам int в строку не конвертирует?».

C++ хороший язык, но правильно писать на нем достаточно сложно. Надо знать много технических нюансов.
+4
я сам убежденный .Net-Чик. для меня C# и JS это главные языки. но недавно столкнулся с задачей программирования по видеокарту. и понял что обёртки под .Net полная багнутая фигня. А C++ позволяет работать напрямую. Да и доки все под C++. Так что юзаю C++ и радуюсь. непросто но в целом после C# более менее освоил за неделю. но на C++ все равно будет только вычислительное ядро. всю бизнес логику буду выносить в C# обертку. в общем всему свое место — бизнес логике — C#, перофмансу и низкоуровневому доступу к железу — C++. думаю правда это и так все знают )))
+3
перофмансу и низкоуровневому доступу к железу — C++. думаю правда это и так все знают )))

С таким же успехом можно было взять и обычный C без ++.

А вообще довольно много уже языков поддерживают напрямую C-заголовки и линковку к нативным библиотекам: golang, rust, objective-c, swift.

Так то выбор в этом плане намного больше чем кажется.
0
на самом деле, для некоторых модулей и используется чистый С. но мы тут про С++ все таки больше говорим, а не про многообразие подобных воркаэраундов…
+3
А почему считается, что постоянно выходящие новые стандарты языка это хорошо?
+12
Как минимум потому что, скорее всего, это означает, что язык востребован, за ним следят, интересуются, понимают, что он «не идеален», пытаются улучшить, да и вообще, если есть стандарт, то скорее всего — у языка большая коммюнити…
+2
Потому что язык развивается, а именно:
1) в стандарт попадают новые элементы стандартной библиотеки, делая ваш код менее зависимым от сторонних библиотек и более мультиплатформеным (при должном подходе);
2) в язык добавляются новые синтаксические конструкции, которые увеличивают производительность (move-семантика, например);
3) в язык добавляются новшества, которые позволяют делать код более абстрактным (различные trait'ы) и/или, например, ограждают программиста от допущения некоторых ошибок (например, ключевое слово override или конструкция static_assert).

Всё это продвигает язык на новый уровень, при этом полностью сохраняя совместимость со старым кодом (если он был написан без ошибок).
+9
Наверное, нет такого программиста, который бы не слышал о сложности С++.
И большей частью — это миф. Да в языке есть непростые для понимания конструкции (привет, Александреску!) но вовсе не обязательно ими пользоваться. Можно писать в стиле Java или C# и иметь почти идентичный код. Но рано или поздно захочется поэкспериментировать с шаблонами и макросами.

Но что мы получаем взамен? Производительность + глубинный контроль происходящих процессов
Не все так радужно. Сейчас мало кто пишет на голом языке без парочки фреймворков. Или внешних библиотек. И вся обещанная вами производительности и глубинный контроль легко разобьются о стены закрытой библиотеки или криво написанного фреймворка, точно так же как в любом другом языке.
+5
И большей частью — это миф. Да в языке есть непростые для понимания конструкции (привет, Александреску!) но вовсе не обязательно ими пользоваться.

Вот я тоже всегда удивлюсь фразам типа «С++ — сложный».
Сам с паскаля на него за неделю перешел. И спокойно достаточно писал нормальный код.
Уже больше 10 лет я пишу на С++.
И сейчас могу встретить код, который поставит меня в тупик.
Это же не сложность языка. Это сложность кода который можно на нем писать.

На русском тоже можно писать сказки, которые даже ребенок понимает. А можно — юридические документы, которые может понять и разобраться только специалист в соответствующей области. Это опять же не сложность языка, а широкие возможности.
+4
Ну, вы с такой аргументацией в защите C++ уже доходите до абсурда, по сути заявляя, что русский язык — не сложный. Следуя вашей логике, и квантовая физика не сложная, и функциональный анализ, и вообще ничего сложного в мире не существует, ведь это не они сложные, а с ними делают сложные вещи.

С++ это не принцесса, которая какает бабочками, а вполне конкретный язык, который объективно сложен. Скотт Мейерс достаточно компетентен, как считаете? У него есть что сказать о сложности C++: The Last Thing D Needs
0
Мой цикл разработки высокопроизводительных приложений обычно таков:

1) Написание алгоритма на C++ с использованием всей мощи конструкций этого языка и библиотек для того, чтобы код был красивым и понятным. Отладка алгоритма.

2) Выявление, какие сложности языка, дающие красоту, ухудшают производительность программы или расход памяти.

3) Перевод программы на C или в C-подобный стиль, собственная реализация тех структур данных и библиотечных функций, которые оказались неэффективными.

4) Profit
+8
К сожалению развитие C++ напоминает снежный ком, который рано или поздно просто превратится в черную дыру, с которой ни разработчики стандарта, ни разработчики компиляторов совладать не смогут. Возможности копятся, но старые костыли как были, так и остаются, чего стоит только механизм сборки и разделение исходов на 2 .h/.cpp, а еще ведь inline и шаблоны писать только в .h файлах, но всё остальное не надо, будет компилироваться долго, но почему-то никто не думает о том, что наличие одного файла в других языках не мешает компилироваться быстрее.

0
Спасибо за наводку, поглядел чутка, опять попытка сделать что-то новое, но оставить старое. В итоге получим +1 фичу, но при этом .h и .cpp останутся, судя по тому что я понял, это нечто унифицированное типа precompiled headers. В итоге разделение по файлам на месте и никуда не делось. Да и при этом имя модуля одно, пространства имён другое, общего ничего, зачем опять это нагромождение сущностей. Почему нельзя было как в .NET, в проекте доступны все модули подключенные в проект, а уж хотите вы писать using namespace или нет, это ваше дело, нет лишней сущности в виде имени модуля.
+1
Потому что обратную совместимость нужно учитывать, к сожалению.
-2
C# в некотором роде и есть работа по упрощению и декостыляции С++.
+3
C# — это ответ Microsoft на лицензионные претензии Sun касательно Java. Вспомните такую штуку как MS Visual J++ и то, как удивительным образом она исчезла после 6-й версии и появился .NET. К C++ это не имеет ни малейшего отношения.
+1
Если на то пошло, Java тоже не в вакууме появилась. С-синтаксис какбэ намекает, откуда брали основу его разработчики. Но вы правы, стратегически C# это крайне удачный ответ MS на огораживание Java.
-1
Про удачность C# по сравнению с Java надо бы рассуждать в другом посте. Мой камент был к тому, что ни о какой декостылизации С++ в C# не может идти и речи.
+1
Так какие крупные компании перешли? Facebook попонтовались и всё. Переписывать полностью проекты никто не будет.
0
www.sociomantic.com самая крупная использующая D повсеместно.
Переписывать понятно дело никто не будет, однако новые проекты проще на D писать или на C# (кому нужен .NET).
Сейчас вот с веб-сервером vibed разбираюсь. Пока очень радует.
0
Дело еще не только в сложности с++, но и в сложной и запутанной инфраструктуре. Одни только системы сборки чего стоят: make, cmake, automake, qmake. Все это не слишкой юзерфрендли. Другие тянутся еще с незапямятных времен. Современному айтишнику привыкшему к девларативности на каждом шагу (json yaml xml) странный синтаксис того же make кажется избыточным
-2
Намного интереснее выглядит возможность воплотить в железе ту же JVM, сделать на уровне языка что-то типо inline assembler только для jvm и вот вам скорость и гибкость
0
Для любителей юзерфрендли есть IDE, которые всё это генерируют сами.
+1
В статье упущено главное: решаемые задачи. Речь не о платформах (C++ не для web, Java для Android и т.п.), а вот о чем: на сегодняшний день по каким-то причинам C# используется для enterprise-проектов. И все. Из известных продуктов, написанных на WPF кроме АВ Касперского даже вспомнить ничего не могу. Xamarin не так популярен для Android, как Java.

Это означает следующее: если вы — C# разработчик, то с высокой вероятностью придется заниматься автоматизацией бизнеса, так сказать. CRM, ERP, и прочие корпоративные проекты. Чем я занимаюсь последние 5 лет, что безумно надоело. Все интересные задачи, где много алгоритмов, наукоемкая предметная область, исследования и инновации — все на С++, но никак не C#. Печаль.

+1
Где бы взять наукоемкие задачи, исследования и инновации в приложениях на WPF или под Андроид?..
0
Наукоемкие — это не только обсчет данных с БАКа на суперкомпьютере. Хотя бы что-то связанное с исследовательской, а не бизнесовой предметной областью. На WPF можно очень быстро делать качественный UI — это актуально в любой сфере, в т.ч. и научной (например, на C# быстро можно вывести кучу графиков, сделать сложное окно со множеством регионов, отображаемых динамически в зависимости от условий, генерить word отчеты с кучей таблиц и пр.). Кроме того, что мешает разрабатывать коробочный софт (для пользователей) на C#?
+1
Ничего не мешает. Но какая связь между наукоемкостью и WPF? Вычислить что бы то ни было и отобразить — это две совершенно разные задачи, зачем вы связываете одну с другой?
0
Затем, что проще работать на одном стеке технологий. Далеко не во всех проектах нужна сверхпроизводительность, в .net кроме unsafe есть и другие способы написания вполне производительного кода, для работы с БД и параллельными вычислениями в .net есть хорошие решния — т.е. можно взять и написать на C# все, не только UI на WPF, но и все что ниже этого UI. Я не говорил о связи между интересными проектами и WPF, речь шла как раз о том, что этой связи быть не должно: есть задача, пишешь хоть на С++, хоть на C#. А сейчас это не так. Мне нравится C#, но не интересны задачи, обычно на нем решаемые.
0
Работодатель, очевидно) Полистайте вакансии .net и C++ разработчиков, весьма ощутимая разница в проектах. В первом случае больше Enterprise, во-втором — интересные разработки чего-то нового (распознавание изображений, биометрия и т.п.). У каждого языка сложилась своя ниша, хотя оба из них — языки общего назначения.
0
Работодатель запрещает вам заниматься интересными проектами — или запрещает использовать C#?

В любом случае, язык не виноват в причудах работодателя.
+2
Возможность стоять у истоков нового проекта, выбирать для него технологии — это редкость. В большинстве случаев за каждой открытой вакансией стоит уже запущенный проект (в той или иной степени готовности), технологии выбраны, и нельзя сказать, что этот выбор свободен от сложившихся в индустрии стереотипов. В итоге, то что реально интересно, это С++ (нередко на Linux), а не .net (хотя он мог для этой задачи подходить еще больше). У сторонников Linux вообще какая-то обостренная нелюбовь к .net
0
А с чему им любить .NET, когда реализация его в виде mono была долгое время далеко не идеальна…
0
Эти задачи как раз требуют максимально-возможной производительности, нередко являющейся основным конкурентным преимуществом решения, зачастую то же распознавание изображений например должно быть в жестком реалтайме, оттого и C++
0
C++ — это безбрежный океан, где каждый может найти свой четко очерченный островок по своим возможностям и способностям.
0
А вы скажите, на чем писать кроссплатформенные desktop приложения, с легким использованием любых API, предоставляемых конкретной платформой, если не на C++?
Only those users with full accounts are able to leave comments., please.