Подтвердить что ты не робот

Что нужно, чтобы люди ушли от С++?

Даже большинство людей, которые любят С++, признают, что у него много бородавок, не связанных с его нишей, как язык программирования системы/производительности. К ним относятся его устаревшая система управления модулем (заголовочные файлы), требование для форвардных объявлений, синтаксические причуды, которые делают его грамматику неразрешимой (например, < > угловые скобки для объявления шаблона), включение макросов, которые работают на текстовом уровне, а не в реальном языковые функции для решения макросов, которые используются для дублирования функций, таких как массивы и строки (версии STL и C этих типов), практически без синтаксического сахара и общего отсутствия современных функций, таких как потоки, сборка мусора, делегирование/закрытие, и т.д. (Примечание. Да, в средах с ограниченным объемом памяти или в реальном времени у вас могут быть веские причины не желать сбора мусора, но это может быть легко отключено и быть стандартным способом управления памятью.)

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

Для тех из вас, кто использует С++ в качестве основного языка, что заставило вас лично решить, что его бородавки стоит смириться? Что нужно сделать, чтобы вы передумали и решили использовать более новый язык с меньшим количеством подобных бородавок? Вы используете С++, потому что вам это действительно нравится, или вы неохотно используете его из-за устаревших проблем или потому, что для его ниши не существует другого зрелого, основного языка?

4b9b3361

Ответ 1

Дайте мне язык программирования, который:

  • стандартизирован и не управляется одной компанией.
  • не связан с одной платформой (не только в теории)
  • компилируется в собственный код
  • дает мне ту же эффективность, что и С++.
  • предоставляет очень продуманную стандартную библиотеку
  • имеет хотя бы одну зрелую реализацию для различных важных платформ.

... и я могу рассмотреть возможность переключения; -)

Ответ 2

У части вашего вопроса есть ошибочное предположение. Вы предполагаете, что у нас есть выбор языка. В всех проектах, над которыми я работаю, на которых используется С++, нет реального выбора. Это проекты, которые существовали задолго до того, как я присоединился к компании и были написаны на С++. У них есть многолетняя история за ними и соответствующий объем кода.

Я думаю, что это самая большая ошибка, которую люди делают, когда говорят, что "С++ умрет" или "почему люди все еще используют С++?". Я определенно согласен с тем, что, за исключением программ на системном уровне, вы не увидите много новых проектов, начинающихся на С++. ИМХО, это не имеет большого смысла. Не обязательно из-за присущих ошибок на языке, но все труднее найти людей, которые хорошо разбираются в кодировании С++.

То, что люди часто забывают рассмотреть, - это миллионы (миллиарды?) строк С++, которые сегодня управляют нашим миром. Переход на другой язык чрезвычайно дорогостоящий и не может быть выполнен по прихоти. Требуется огромное оправдание, чтобы приложить время и усилия для переписывания приложений такого размера. Вот почему С++ не умрет. По крайней мере, в ближайшее время.

Ответ 3

Я использую С++ (и делаю это в течение почти 25 лет), потому что это лучший язык системного программирования. Я бы сказал, что я не признаю ни одного из так называемых "бородавок", которые вы описываете, - это функции!

Для несистемного программирования я использую другие языки, такие как PHP, Delphi, bash скрипты, awk, perl и Smalltalk. Один размер не подходит всем, если вы, конечно, не какой-то язык фанатик.

Ответ 4

К ним относятся его устаревшая система управления модулем (файлы заголовков)

Я не вижу никаких проблем с тем, как С++ использует файлы заголовков. Предоставляя два способа включения заголовков, вы можете указать на исходном уровне, должны ли символы поступать из вашего приложения или из установленных в системе факсимильных сообщений. Все современные компиляторы С++ поддерживают прекомпилированные заголовки, поэтому нет штрафа за производительность. Разделение заголовков из реализаций позволяет разработчикам использовать библиотеки, запрограммированные на других языках.

синтаксические причуды, которые делают его грамматику неразрешимой (например, < > угловые скобки для объявления шаблона), практически без синтаксического сахара,

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

включение макросов, которые работают на текстовом уровне вместо реальных языковых функций для адресатов макросов, используются,

В препроцессоре много не нравится, но может быть очень полезно работать с токенами с точки зрения генерации кода. Конечно, такие вещи, как макросы M4, обеспечивают гораздо более эффективный способ сделать это, но недостатком является то, что это не стандартная часть языка. Стандартный препроцессор c/С++ доступен в любом случае компилятором.

дублирование функций, таких как массивы и строки (версии STL и C этих типов)

Эта функция не дублирует. Низкоуровневые байтовые байты (без арифметики указателей) необходимы для реализации концепций более высокого порядка, таких как универсальные контейнеры. Помните, что С++ предназначен для программирования систем, на которые он встроен, но и для обеспечения выразительной способности выполнять реальную работу.

и общее отсутствие современных функций, таких как потоки, сборка мусора, делегирование/закрытие и т.д. (Примечание. Да, в условиях ограниченной памяти или в режиме реального времени у вас могут быть веские причины не желать сбора мусора, но это может легко быть отключенным и быть стандартным способом управления памятью.)

Threading - это то, что требует сотрудничества от операционной системы таким образом, что язык программирования не может действительно стандартизоваться. Многие языки абстрагируют это в единый интерфейс, но этого не произошло в С++ (это происходит, по-видимому). Сборщики мусора доступны для С++, но он обеспечивает более мощную концепцию RAII. Opting Out - это не С++-способ, так как если средство сбора мусора когда-либо стандартизовывается на этом языке, оно обязательно будет входить в него, так что вам не придется платить за него, если вы его не используете.

Ответ 5

Да, мне нравится С++ намного больше, чем Java, потому что я гораздо свободнее выражать себя.

С++ необходим, потому что это единственный действительно масштабируемый язык на данный момент. Там есть способ настроить каждый аспект программы, чтобы он никогда не иссякал.

Другое дело, что многословие идет в коде библиотеки, а не в коде "использования". Как только библиотека работает, код использования обычно хорош и краток (и легко читается, если вы правильно сделали библиотеку).

В Java/С# все многословие переносится на код использования - try/catch/finally... все эти вещи нужно вводить снова и снова. Ик...

Я упоминал объекты на основе стека? Как люди живут без них...??

Единственное место, на котором С++ действительно падает, отражается (хотя даже это может быть сделано, например COM).

Да, очищенный С++ с более сильным синтаксисом будет приятным, но мы знаем, что этого никогда не произойдет. Вы можете привыкнуть к синтаксису, и в целом это небольшая цена, чтобы заплатить за то, что вы получаете взамен.

Ответ 6

его ниша как язык программирования/производительности

Это довольно большая ниша! Скорее всего, если в программном обеспечении более 10 миллионов пользователей написано на С++:

  • для Windows
  • IE
  • PhotoShop
  • Firefox
  • Управление
  • SQL Server
  • MySQL
  • Поисковая система Google
  • AutoDesk

Источник: http://www.research.att.com/~bs/applications.html

Ответ 7

Для меня я предпочитаю С++, потому что:

  • Это все еще достаточно прямое представление о том, что будет делать оборудование, или достаточно близко, чтобы вы могли сделать образованные выводы о фактическом поведении и производительности программы.
  • Он достаточно гибкий, чтобы позволить мне использовать или реализовывать большинство парадигм программирования.
  • Он обладает высокой совместимостью с другими библиотеками и модулями и самой большой существующей базой поддержки ссылочного и непосредственно используемого кода.
  • Большинство "бородавок" легко устранить с помощью хороших практик программирования и/или библиотек служебных программ, в отличие от других языков, где "бородавки" являются менее фиксируемыми (например: вы можете легко исправить утечки памяти с помощью интеллектуальных указателей и легко диагностировать повреждение памяти с помощью прямого анализа памяти, вы не можете легко отлаживать проблемы с повреждением памяти на языке более высокого уровня, например С#, и да, я их имел)
  • Приложения на С++ обычно можно запускать на любых версиях ОС, при этом единственное ограничение - это усилие; Языки более высокого уровня обычно требуют времени выполнения, которое может быть или не быть.

Что мне понадобится, чтобы предпочесть что-то еще для основного развития? Ну, в дополнение к рассмотрению вышеуказанных причин в некотором роде, другой "более высокий уровень" язык должен был бы передать ощущение, что я все равно смогу реализовать и отладить все, что я могу сделать на С++. На самом деле единственное, что подошло мне ближе, это С++/CLI, но синтаксически еще хуже, сложнее понять и не удается выполнить тест, требуемый во время выполнения (и, возможно, он не добавляет многого с точки зрения других желаемых преимуществ).

Я предполагаю, что в ближайшие 30 лет, прежде чем я уйду на пенсию, мне будет заплачено написать что-то другое, кроме С++. Есть, конечно, области разработки, где С++ не является предпочтительным, и сильные мотивации для поставщиков языков, чтобы заставить разработчиков работать на языках более высокого уровня, работающих на проверенных временем и/или проверенных временем исполнениях (например, Java, С# и т.д.). На данный момент, для меня, С++ по-прежнему является правильным инструментом для работы, и мне нравится получать деньги, чтобы продолжать писать.:)

Ответ 9

Мое мнение таково, что людям нужны языки более высокого уровня, которые каким-то образом предлагали бы те же предложения С++. Выполнение чего-то на языке высокого уровня (пусть говорят Java) при выполнении с большей скоростью, собственной бинарной компиляции и других функций, не прибегая к чему-то вроде JNI, было бы "тем, что мне нужно, чтобы отойти от С++".

Ответ 10

Когда они придумывают язык, который работает быстрее в меньшем объеме памяти и более широко поддерживается.

Ответ 11

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

Ответ 12

Как вы описали, у С++, конечно же, есть свои бородавки, с этим С++ FQA делает хорошую работу, указывая на многие из них. Тем не менее, люди и организации, которые уже давно используют язык, охватывают большое количество идиом, gotchas и рекомендации, которые делают работу с ней более терпимой. Стиль программирования на С++ также эволюционировал за эти годы. С нативной компиляцией и зрелым набором инструментов на многих платформах С++ по-прежнему остается жестким соперником.

Единственный способ для С++ быстро потерять свое место, на мой взгляд, для крупной компании, такой как IBM или Google, стоять за жизнеспособной альтернативой, например язык D, и выталкивать его изо всех сил. Но этого практически невозможно добиться, учитывая огромное количество уже существующего С++ в своих собственных кодовых файлах.

Ответ 13

Лучший способ понять, почему С++ - это так, и оценить его достижения, - это прочитать "Дизайн и эволюция С++".

Для всех своих бородавок С++ - довольно хороший язык.

Ответ 14

В основном я использую С++ для встроенных платформ, которые обычно требуют большого тесного взаимодействия с оборудованием. Я действительно не вижу здесь OO-заменителя. Если бы я заменил С++ для чего-нибудь здесь, это было бы чем-то, что могло бы решить все входящие в момент компиляции, поэтому мне не пришлось беспокоиться об этом. В принципе, что-то, что могло бы облегчить мою разработку, но не обеспечивало какой-либо среды выполнения накладные расходы (отражение, сбор мусора и т.п.).

Для меня С++ - это все о производительности исполнения и абсолютном управлении. Нет причудливых вещей, которые работают "за кадром".

Ответ 15

Я занимаюсь научными вычислениями, где мой графический интерфейс находится в С#, а мой backend - С++. Не исключено, что С# может по крайней мере равняться С++ с точки зрения производительности, но это не то место, где сосредоточен центр управления С#/insert. Было бы сложно, но в рамках возможности иметь С# и С++ (или очень близко к ней) для численного расчета, поскольку IL скомпилирован до машинного кода. Если/Когда это произойдет, я с радостью сделаю переключатель.

Ответ 16

Когда новый язык может быть столь же выразительным, как и С++. Из-за конфликта интересов между возможностями высокого и низкого уровня это трудно достичь. Именно поэтому у нас есть взаимодействие между языком и процессом в первую очередь.

Кроме того, C это, вероятно, сложнее делать с C, потому что он такой худой и мощный. Из-за этого C выигрывает на арене низкого уровня. И C создает хорошую поддержку для С++ и объектного C.

Короче, вы все равно будете видеть C и С++ в течение длительного времени.

Ответ 17

Мой личный выбор использовать С++ (когда у меня есть выбор) - это потому, что это один из единственных языков многоцелевого программирования, который не интерпретируется и имеет достаточно "колоколов и свистов", чтобы я мог сделать что-то относительно быстро, Теперь есть множество причин, по которым я выбираю другие языки (например, Python, Java, Perl, ksh и т.д.), Когда появляется такая возможность. Я использую другие языки для "одноразовых" приложений и сценариев, где производительность не является проблемой, и ни одна из них не является "развертыванием на местах". Поддержка развертывания для многих языков сценариев очень ориентирована на веб-сайты, и я сейчас работаю над инфраструктурой и технологией "невидимого клея". Мы ищем серверы приложений J2EE для решения проблем с развертыванием и поддержкой, но у нас уже есть несколько полезных методов для исполняемых служб.

Самая большая причина, по которой во многих случаях я буду продолжать использовать С++ по своему выбору, заключается в том, что она поддерживает почти все, что мне нужно, после добавления нескольких библиотек для обработки непереязычных языковых платформ (потоки, сокеты и т.д.).). И... Да... Я рассматриваю темы, которые должны быть представлены за пределами языка программирования. Это основная причина, по которой я склонен уклоняться от других языков - мне действительно нравятся языки с явным костяным ядром, где функциональность предоставляется через дополнительные библиотеки.

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

Последняя причина в том, что я выбираю С++ по сравнению с другими языками, так это то, что я на самом деле думаю, что он более детерминирован, чем другие языки. Я знаю, что Java - это нейтральное решение платформы, и Ruby и Python - это быстрые альтернативы развития du'jour. Проблема в том, что приложения, которые интерпретируются, всегда выполняют по прихоти их интерпретатора. Это не всегда Bad Thing, и это, безусловно, не всегда хорошая вещь.

Скорее всего, С++ будет здесь еще немного. Я предполагаю, что большое количество более чистых языков ООП начнет расходовать долю рынка на более динамичные языки общего назначения (возможно, Ruby и Python), и что эти языки заберут еще более серьезные отбивные OO. Я переключусь на другой язык, когда солнце начнет действительно устанавливаться на С++, и есть еще один язык, который хорошо принят "промышленностью". Я уверен, что это произойдет когда-нибудь... ведь С++ фактически заменил C как мой язык выбора несколько лет назад.

Ответ 18

С++ - это инструмент в моей панели инструментов. Так что java и python и несколько других вещей.

Удобная среда моей компании позволяет мне использовать все, что подходит.

  • С++ == perf при необходимости.
  • Java ==, когда perf не так необходим (из-за того, что сетевой/внешний IO значительно перевешивает циклы CPU), и необходима скорость разработки.

Инструменты в панели инструментов. Используйте то, что подходит.

Ответ 19

Почему? Вы стоите, чтобы получить прибыль, если я начну писать код на другом языке?:-P

Все шутя в сторону, я пишу код на С++, потому что мой работодатель платит мне. Это действительно так просто. Если бы они решили использовать другой язык, я бы начал использовать его. Теперь о том, почему они решили использовать его, я могу только догадываться. Я предполагаю, что у них есть две основные причины:

  • Там есть достаточный запас колледжа выпускников, которые достаточно хороши в С++, чтобы они могли выполнить бизнес-целей.
  • С++ предлагает хорошие   достаточная производительность в режиме реального времени   распределенных систем.

Ответ 20

К сожалению, вы не обнаружили фундаментальной элегантности и концептуальной целостности языка. Он предлагает такое же удобное и последовательное представление о мире, как и любой другой язык, что отражается в его постоянном использовании на протяжении многих лет. YMMV, но все равно рассмотрим.

Ответ 21

Вы идете об этом наоборот. Люди выбирают области проблем/приложений, которые им интересны. Выбор языка следует из этого решения и довольно тривиален.

Никто не выбирает язык программирования. Языки программирования сами по себе скучны и говорят о них без ссылки на область проблем/приложений, абсурдно.

Лично я хотел работать в машинном обучении. Как град. Я работал над анализом графических представлений огромных наборов данных (IMDB, Netflix). Я использовал С++ для большей части моей работы. Я бы любил работать на С# или Java или еще лучше, но Python, но природа проблемы требовала от меня использовать С++. В течение 5 лет я влюбился в С++ для золотого баланса, который достигается между эффективностью и абстракцией. Я буду использовать С++ всякий раз, когда я вижу необходимость в нем. Программисты на C++ - это жесткие прагматики, которые не позволят чему-либо стоять на пути к достижению цели. Они не будут цепляться за С++ просто за это.

Ответ 22

Я принимаю это как принятое, что на высоком уровне и на низкоуровневых частях проекта не нужно (и вообще не должно быть) написано на том же языке в эти дни. Таким образом, вы либо ждёте, когда работодатели поймут, что, хотя сложнее найти разработчиков для работы на нескольких языках, на самом деле легче найти хороших разработчиков или ждать, пока армия некомпетентных не сможет получить доступ к программе полиглота.

Ответ 23

Пересмотр списка "проблем" с помощью С++, единственное, что я могу подойти к согласию, - это преобразование строк STL/C.

Я могу спросить, почему вы хотите, чтобы С++ был С#?