Комментарии 70
Интересно, откуда в список вылез Visual Basic c приростом большим, чем у JavaScript?
+12
Может быть это VBA?
0
НЛО прилетело и опубликовало эту надпись здесь
Давно уже замечено, что этот рейтинг не отвечает действительности.
+8
Несмотря на то, что C++ — язык, дающий разработчику, как говорится, все карты в руки, область его применения не всеобъемлюща
Удивлен! В какой же это области нельзя применить С++?
+8
НЛО прилетело и опубликовало эту надпись здесь
Согласен, в настоящее время самый кроссплатформенный и высокопроизводительный код на компилируемом языке пишется на C++.
+6
Когда то в универе у нас был c++ и я страшно не любил программирование из-за этого. Позже появилась Java, с которой я сейчас и работаю, и полюбил писать код. Однако решил начать c++ с нуля и знаете, это чертовски крутой язык. Да, он сложнее, но он настолько крут, что даже Чак Норис не настолько крут.
-11
Чак Норрис настолько крут, что минусует комментарии даже не зная что такое хабр.
+19
Вы с ФП не сталкивались. После ФП понимаешь, что Scala/Haskell/Kotlin/OCaml/etc настолько круты, что всякие C++/Java кажутся жалкой поделкой (последние 3 года пишу на C++, говорю не от балды). Я опускаю вопрос производительности, т.к. спорить тут не о чем — числодробилки на C/C++, спору нет.
0
НЛО прилетело и опубликовало эту надпись здесь
Да, мы пишем на старом стандарте. Новый приятен, не спорю. Но до ФЯП ему далеко.
+1
НЛО прилетело и опубликовало эту надпись здесь
Просто при написании кода на современном C++ я тоже получаю удовольствие. Иногда кажется, что весьма плохое и извращённое удовольствие, это да.
Тоже очень люблю и практикую уже более 10 лет C++, далее поток сознания
… и очень часто погружаюсь и ощущаю то Бесконечное Добро Сострадание и Милосердие, что содержится в нём :)
Часто и особо чувствую я это когда нужна мне, например, такая простая вещь как if этапа компиляции, который уж внутри шаблона точно не проблема сделать. Нужен он, конечно же, дабы можно было сделать шаблон сшахматами и дамами функциональностью, которой можно аннигилировать целые планеты одним вызовом которую регулировать в широких пределах… а его нет.
Но как говорилось в одном анекдоте «у нас есть метод» ибо в стандарте есть Полностью Прекрасное sfinae, которым с помощью enable_if и оверхедом по коду в пачку функций таки можно добиться функциональности эквивалентной по смыслу if-у этапа компиляции.
Часто и особо чувствую я это когда нужна мне, например, такая простая вещь как if этапа компиляции, который уж внутри шаблона точно не проблема сделать. Нужен он, конечно же, дабы можно было сделать шаблон с
Но как говорилось в одном анекдоте «у нас есть метод» ибо в стандарте есть Полностью Прекрасное sfinae, которым с помощью enable_if и оверхедом по коду в пачку функций таки можно добиться функциональности эквивалентной по смыслу if-у этапа компиляции.
у нас есть метод - бонус для осиливших вышенаписанное
Трое математиков и трое физиков собираются ехать на поезде в другой город на конференцию. Они встречаются перед кассой на вокзале. Первой подходит очередь физиков, и они, как все нормальные люди, покупают по билету на человека. Математики же покупают один билет на всех.
– Как же так? — удивляются физики, — Ведь в поезде контролёр, вас же без билетов оттуда выгонят!
– Не волнуйтесь, — отвечают математики, — У нас есть МЕТОД.
Перед отправкой поезда физики рассаживаются по вагонам, но стараются проследить за применением загадочного «метода». Математики же все набиваются в один туалет. Когда контролёр подходит к туалету и стучит, дверь приотворяется, оттуда высовывается рука с билетом. Контролёр забирает билет, и дальше все они без проблем едут в пункт назначения.
После конференции те же вновь встречаются на вокзале. Физики, воодушевившись примером математиков, покупают один билет. Математики не берут ни одного.
— А что же вы покажете контролёру?
— У нас есть МЕТОД.
В поезде физики набиваются в один туалет, математики — в другой. Незадолго до отправления, один из математиков подходит к туалету, где прячутся физики. Стучит. Высовывается рука с билетом. Математик забирает билет и возвращается к коллегам.
МОРАЛЬ: Нельзя использовать математические методы, не понимая их!
– Как же так? — удивляются физики, — Ведь в поезде контролёр, вас же без билетов оттуда выгонят!
– Не волнуйтесь, — отвечают математики, — У нас есть МЕТОД.
Перед отправкой поезда физики рассаживаются по вагонам, но стараются проследить за применением загадочного «метода». Математики же все набиваются в один туалет. Когда контролёр подходит к туалету и стучит, дверь приотворяется, оттуда высовывается рука с билетом. Контролёр забирает билет, и дальше все они без проблем едут в пункт назначения.
После конференции те же вновь встречаются на вокзале. Физики, воодушевившись примером математиков, покупают один билет. Математики не берут ни одного.
— А что же вы покажете контролёру?
— У нас есть МЕТОД.
В поезде физики набиваются в один туалет, математики — в другой. Незадолго до отправления, один из математиков подходит к туалету, где прячутся физики. Стучит. Высовывается рука с билетом. Математик забирает билет и возвращается к коллегам.
МОРАЛЬ: Нельзя использовать математические методы, не понимая их!
Ну а если серьёзно, то в виду отсутствия if этапа компиляции и, например, switch для basic_string, который тоже нужен и который также очень легко сделать, приходится в современном C++11 — C++14 использовать либо макросы препроцессора либо жрать кактус и писать без макросов ещё более унылый для восприятия код :(
В общем, искренне не понимаю почему такие простые вещи, думаю многие смогут назвать ещё несколько подобных, не реализованы до сих пор.
0
Был у меня опыт написания на Scala,Groovy. Кратко и красиво спору нет.
0
Мы в универе начинали с одновременного изучения C++ и Pascal. В C++ изучали в основном подмножество C, просто написание учебных программ без использования стандартной библиотеки. Он мне показался более понятным и удобным, чем Pascal. Но сейчас я пишу на более «высокоуровневых» языках.
C++ хороший язык, но правильно писать на нем достаточно сложно. Надо знать много технических нюансов.
Скрытый текст
В принципе, это неплохой язык для начального обучения, если не лезть в дебри метапрограммирования и сложных ООП абстракций. Потом уже можно переходить на другие языки, с пояснениями в плане «в C++ надо было делать так, а в этом языке это делается вот так, и это удобнее». Для начинающих будет более понятно, зачем придумали сборщики мусора, динамическую типизацию, и как устроена работа со строками. А то я пару раз сталкивался с вопросами вида «а почему C++ сам int в строку не конвертирует?».
C++ хороший язык, но правильно писать на нем достаточно сложно. Надо знать много технических нюансов.
+2
А то я пару раз сталкивался с вопросами вида «а почему C++ сам int в строку не конвертирует?».
А потом появляются вот такие статьи
+4
я сам убежденный .Net-Чик. для меня C# и JS это главные языки. но недавно столкнулся с задачей программирования по видеокарту. и понял что обёртки под .Net полная багнутая фигня. А C++ позволяет работать напрямую. Да и доки все под C++. Так что юзаю C++ и радуюсь. непросто но в целом после C# более менее освоил за неделю. но на C++ все равно будет только вычислительное ядро. всю бизнес логику буду выносить в C# обертку. в общем всему свое место — бизнес логике — C#, перофмансу и низкоуровневому доступу к железу — C++. думаю правда это и так все знают )))
+4
А почему считается, что постоянно выходящие новые стандарты языка это хорошо?
+3
Как минимум потому что, скорее всего, это означает, что язык востребован, за ним следят, интересуются, понимают, что он «не идеален», пытаются улучшить, да и вообще, если есть стандарт, то скорее всего — у языка большая коммюнити…
+12
Потому что язык развивается, а именно:
1) в стандарт попадают новые элементы стандартной библиотеки, делая ваш код менее зависимым от сторонних библиотек и более мультиплатформеным (при должном подходе);
2) в язык добавляются новые синтаксические конструкции, которые увеличивают производительность (move-семантика, например);
3) в язык добавляются новшества, которые позволяют делать код более абстрактным (различные trait'ы) и/или, например, ограждают программиста от допущения некоторых ошибок (например, ключевое слово override или конструкция static_assert).
Всё это продвигает язык на новый уровень, при этом полностью сохраняя совместимость со старым кодом (если он был написан без ошибок).
1) в стандарт попадают новые элементы стандартной библиотеки, делая ваш код менее зависимым от сторонних библиотек и более мультиплатформеным (при должном подходе);
2) в язык добавляются новые синтаксические конструкции, которые увеличивают производительность (move-семантика, например);
3) в язык добавляются новшества, которые позволяют делать код более абстрактным (различные trait'ы) и/или, например, ограждают программиста от допущения некоторых ошибок (например, ключевое слово override или конструкция static_assert).
Всё это продвигает язык на новый уровень, при этом полностью сохраняя совместимость со старым кодом (если он был написан без ошибок).
+2
Наверное, нет такого программиста, который бы не слышал о сложности С++.И большей частью — это миф. Да в языке есть непростые для понимания конструкции (привет, Александреску!) но вовсе не обязательно ими пользоваться. Можно писать в стиле Java или C# и иметь почти идентичный код. Но рано или поздно захочется поэкспериментировать с шаблонами и макросами.
Но что мы получаем взамен? Производительность + глубинный контроль происходящих процессовНе все так радужно. Сейчас мало кто пишет на голом языке без парочки фреймворков. Или внешних библиотек. И вся обещанная вами производительности и глубинный контроль легко разобьются о стены закрытой библиотеки или криво написанного фреймворка, точно так же как в любом другом языке.
+9
И большей частью — это миф. Да в языке есть непростые для понимания конструкции (привет, Александреску!) но вовсе не обязательно ими пользоваться.
Вот я тоже всегда удивлюсь фразам типа «С++ — сложный».
Сам с паскаля на него за неделю перешел. И спокойно достаточно писал нормальный код.
Уже больше 10 лет я пишу на С++.
И сейчас могу встретить код, который поставит меня в тупик.
Это же не сложность языка. Это сложность кода который можно на нем писать.
На русском тоже можно писать сказки, которые даже ребенок понимает. А можно — юридические документы, которые может понять и разобраться только специалист в соответствующей области. Это опять же не сложность языка, а широкие возможности.
+5
Ну, вы с такой аргументацией в защите C++ уже доходите до абсурда, по сути заявляя, что русский язык — не сложный. Следуя вашей логике, и квантовая физика не сложная, и функциональный анализ, и вообще ничего сложного в мире не существует, ведь это не они сложные, а с ними делают сложные вещи.
С++ это не принцесса, которая какает бабочками, а вполне конкретный язык, который объективно сложен. Скотт Мейерс достаточно компетентен, как считаете? У него есть что сказать о сложности C++: The Last Thing D Needs
С++ это не принцесса, которая какает бабочками, а вполне конкретный язык, который объективно сложен. Скотт Мейерс достаточно компетентен, как считаете? У него есть что сказать о сложности C++: The Last Thing D Needs
+4
Мой цикл разработки высокопроизводительных приложений обычно таков:
1) Написание алгоритма на C++ с использованием всей мощи конструкций этого языка и библиотек для того, чтобы код был красивым и понятным. Отладка алгоритма.
2) Выявление, какие сложности языка, дающие красоту, ухудшают производительность программы или расход памяти.
3) Перевод программы на C или в C-подобный стиль, собственная реализация тех структур данных и библиотечных функций, которые оказались неэффективными.
4) Profit
1) Написание алгоритма на C++ с использованием всей мощи конструкций этого языка и библиотек для того, чтобы код был красивым и понятным. Отладка алгоритма.
2) Выявление, какие сложности языка, дающие красоту, ухудшают производительность программы или расход памяти.
3) Перевод программы на C или в C-подобный стиль, собственная реализация тех структур данных и библиотечных функций, которые оказались неэффективными.
4) Profit
0
К сожалению развитие C++ напоминает снежный ком, который рано или поздно просто превратится в черную дыру, с которой ни разработчики стандарта, ни разработчики компиляторов совладать не смогут. Возможности копятся, но старые костыли как были, так и остаются, чего стоит только механизм сборки и разделение исходов на 2 .h/.cpp, а еще ведь inline и шаблоны писать только в .h файлах, но всё остальное не надо, будет компилироваться долго, но почему-то никто не думает о том, что наличие одного файла в других языках не мешает компилироваться быстрее.
+8
НЛО прилетело и опубликовало эту надпись здесь
Спасибо за наводку, поглядел чутка, опять попытка сделать что-то новое, но оставить старое. В итоге получим +1 фичу, но при этом .h и .cpp останутся, судя по тому что я понял, это нечто унифицированное типа precompiled headers. В итоге разделение по файлам на месте и никуда не делось. Да и при этом имя модуля одно, пространства имён другое, общего ничего, зачем опять это нагромождение сущностей. Почему нельзя было как в .NET, в проекте доступны все модули подключенные в проект, а уж хотите вы писать using namespace или нет, это ваше дело, нет лишней сущности в виде имени модуля.
0
НЛО прилетело и опубликовало эту надпись здесь
C# в некотором роде и есть работа по упрощению и декостыляции С++.
-2
C# — это ответ Microsoft на лицензионные претензии Sun касательно Java. Вспомните такую штуку как MS Visual J++ и то, как удивительным образом она исчезла после 6-й версии и появился .NET. К C++ это не имеет ни малейшего отношения.
+3
Если на то пошло, Java тоже не в вакууме появилась. С-синтаксис какбэ намекает, откуда брали основу его разработчики. Но вы правы, стратегически C# это крайне удачный ответ MS на огораживание Java.
+1
Ну кому нормальные модули нужны тот уже на D перешел. github.com/Syniurge/Calypso кстати позволяет использовать С++ библиотеки напрямую.
0
Так какие крупные компании перешли? Facebook попонтовались и всё. Переписывать полностью проекты никто не будет.
+1
www.sociomantic.com самая крупная использующая D повсеместно.
Переписывать понятно дело никто не будет, однако новые проекты проще на D писать или на C# (кому нужен .NET).
Сейчас вот с веб-сервером vibed разбираюсь. Пока очень радует.
Переписывать понятно дело никто не будет, однако новые проекты проще на D писать или на C# (кому нужен .NET).
Сейчас вот с веб-сервером vibed разбираюсь. Пока очень радует.
0
Статья ниочем. Кроме ссылки на TIOBE ничего вразумительного. Согласно томуже TIOBE C++ планомерно идет ко дну www.tiobe.com/index.php/content/paperinfo/tpci/C__.html, даже у Си картина лучьше www.tiobe.com/index.php/content/paperinfo/tpci/C.html
-4
Дело еще не только в сложности с++, но и в сложной и запутанной инфраструктуре. Одни только системы сборки чего стоят: make, cmake, automake, qmake. Все это не слишкой юзерфрендли. Другие тянутся еще с незапямятных времен. Современному айтишнику привыкшему к девларативности на каждом шагу (json yaml xml) странный синтаксис того же make кажется избыточным
0
В статье упущено главное: решаемые задачи. Речь не о платформах (C++ не для web, Java для Android и т.п.), а вот о чем: на сегодняшний день по каким-то причинам C# используется для enterprise-проектов. И все. Из известных продуктов, написанных на WPF кроме АВ Касперского даже вспомнить ничего не могу. Xamarin не так популярен для Android, как Java.
Это означает следующее: если вы — C# разработчик, то с высокой вероятностью придется заниматься автоматизацией бизнеса, так сказать. CRM, ERP, и прочие корпоративные проекты. Чем я занимаюсь последние 5 лет, что безумно надоело. Все интересные задачи, где много алгоритмов, наукоемкая предметная область, исследования и инновации — все на С++, но никак не C#. Печаль.
Это означает следующее: если вы — C# разработчик, то с высокой вероятностью придется заниматься автоматизацией бизнеса, так сказать. CRM, ERP, и прочие корпоративные проекты. Чем я занимаюсь последние 5 лет, что безумно надоело. Все интересные задачи, где много алгоритмов, наукоемкая предметная область, исследования и инновации — все на С++, но никак не C#. Печаль.
+1
Где бы взять наукоемкие задачи, исследования и инновации в приложениях на WPF или под Андроид?..
+1
Наукоемкие — это не только обсчет данных с БАКа на суперкомпьютере. Хотя бы что-то связанное с исследовательской, а не бизнесовой предметной областью. На WPF можно очень быстро делать качественный UI — это актуально в любой сфере, в т.ч. и научной (например, на C# быстро можно вывести кучу графиков, сделать сложное окно со множеством регионов, отображаемых динамически в зависимости от условий, генерить word отчеты с кучей таблиц и пр.). Кроме того, что мешает разрабатывать коробочный софт (для пользователей) на C#?
0
Ничего не мешает. Но какая связь между наукоемкостью и WPF? Вычислить что бы то ни было и отобразить — это две совершенно разные задачи, зачем вы связываете одну с другой?
+1
Затем, что проще работать на одном стеке технологий. Далеко не во всех проектах нужна сверхпроизводительность, в .net кроме unsafe есть и другие способы написания вполне производительного кода, для работы с БД и параллельными вычислениями в .net есть хорошие решния — т.е. можно взять и написать на C# все, не только UI на WPF, но и все что ниже этого UI. Я не говорил о связи между интересными проектами и WPF, речь шла как раз о том, что этой связи быть не должно: есть задача, пишешь хоть на С++, хоть на C#. А сейчас это не так. Мне нравится C#, но не интересны задачи, обычно на нем решаемые.
0
Но что мешает решать на нем другие задачи?
0
Работодатель, очевидно) Полистайте вакансии .net и C++ разработчиков, весьма ощутимая разница в проектах. В первом случае больше Enterprise, во-втором — интересные разработки чего-то нового (распознавание изображений, биометрия и т.п.). У каждого языка сложилась своя ниша, хотя оба из них — языки общего назначения.
0
Работодатель запрещает вам заниматься интересными проектами — или запрещает использовать C#?
В любом случае, язык не виноват в причудах работодателя.
В любом случае, язык не виноват в причудах работодателя.
0
Возможность стоять у истоков нового проекта, выбирать для него технологии — это редкость. В большинстве случаев за каждой открытой вакансией стоит уже запущенный проект (в той или иной степени готовности), технологии выбраны, и нельзя сказать, что этот выбор свободен от сложившихся в индустрии стереотипов. В итоге, то что реально интересно, это С++ (нередко на Linux), а не .net (хотя он мог для этой задачи подходить еще больше). У сторонников Linux вообще какая-то обостренная нелюбовь к .net
+2
Эти задачи как раз требуют максимально-возможной производительности, нередко являющейся основным конкурентным преимуществом решения, зачастую то же распознавание изображений например должно быть в жестком реалтайме, оттого и C++
0
C++ — это безбрежный океан, где каждый может найти свой четко очерченный островок по своим возможностям и способностям.
0
А вы скажите, на чем писать кроссплатформенные desktop приложения, с легким использованием любых API, предоставляемых конкретной платформой, если не на C++?
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
C++ в современном мире