Comments 70
Даже если и так, всё равно не понятно, откуда такой прирост.
Всё стали программировать макросы в Excel?
Это ведь единственное применение этой технологии?
UFO landed and left these words here
Давно уже замечено, что этот рейтинг не отвечает действительности.
Несмотря на то, что C++ — язык, дающий разработчику, как говорится, все карты в руки, область его применения не всеобъемлюща


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

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

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

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

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

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

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

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

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

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

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

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



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

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

C++ хороший язык, но правильно писать на нем достаточно сложно. Надо знать много технических нюансов.
я сам убежденный .Net-Чик. для меня C# и JS это главные языки. но недавно столкнулся с задачей программирования по видеокарту. и понял что обёртки под .Net полная багнутая фигня. А C++ позволяет работать напрямую. Да и доки все под C++. Так что юзаю C++ и радуюсь. непросто но в целом после C# более менее освоил за неделю. но на C++ все равно будет только вычислительное ядро. всю бизнес логику буду выносить в C# обертку. в общем всему свое место — бизнес логике — C#, перофмансу и низкоуровневому доступу к железу — C++. думаю правда это и так все знают )))
UFO landed and left these words here
на самом деле, для некоторых модулей и используется чистый С. но мы тут про С++ все таки больше говорим, а не про многообразие подобных воркаэраундов…
UFO landed and left these words here
А почему считается, что постоянно выходящие новые стандарты языка это хорошо?
Как минимум потому что, скорее всего, это означает, что язык востребован, за ним следят, интересуются, понимают, что он «не идеален», пытаются улучшить, да и вообще, если есть стандарт, то скорее всего — у языка большая коммюнити…
Потому что язык развивается, а именно:
1) в стандарт попадают новые элементы стандартной библиотеки, делая ваш код менее зависимым от сторонних библиотек и более мультиплатформеным (при должном подходе);
2) в язык добавляются новые синтаксические конструкции, которые увеличивают производительность (move-семантика, например);
3) в язык добавляются новшества, которые позволяют делать код более абстрактным (различные trait'ы) и/или, например, ограждают программиста от допущения некоторых ошибок (например, ключевое слово override или конструкция static_assert).

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

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

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

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

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

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

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

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

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

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

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

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

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