Я сам программирую на
Взял на себя смелость перевести статью и пару комментариев к ней.
Но прежде чем читать, посмотрите, пожалуйста, на прекрасную карту языка С++ (The C++ Lands). Особая благодарность за карту Алёне Сагалаевой:
- Оригинал статьи
«C++ Hating» (автор Dean Michael Berris) - Статья о закате
С++ «A skeptic’s history ofC++» (автор Chad Perrin)
У меня представился случай прочитать на сайте TechRepublic интересную. хорошо написанную, но совершенно неточную и провокационную статью. Эта писанина одна из тех, что пытаются предсказать смерть
Не буду вдаваться в детали — если вам интересно, то оригинал можно найти по ссылке. Разберу только отрывок, на который не могу не отреагировать.
Можно считать, что дниС++ сочтены. Альтернатива, которая наиболее подходит для решения схожих задач — этоObjective-C . Другой вариант — Objective Caml, язык который регулярно приводится в качестве примера длявысоко-производительных задач и по некоторым показателям часто опережаетС++ . На нем можно писать кратко и структурировано, предоставляет разработчикам более понятные и интересные модели, которые порой отсутствуют в языках того же уровня. Язык D также можно назвать конкурентом, хотя его проприетарные корни могут помешать его широкому применению. В языке Go от Google много спорных компромиссов, но без сомнения его возможности дают большое преимущество при создании некоторого типа программного обеспечения, включая параллелизм.
Однако, исходя из уроков истории,С++ будет еще долгое время занимать свою нишу. Он годами использовался при разработке операционок. Без спору,С++ дает некоторые преимущества перед С для некоторых видов систем, в которых критична производительность и уже существуют наработки. Но сила подобных наработок лежит в сопровождении их разработчиками, которые игнорируют альтернативы, и эта та особенность, которую не легко можно обойти потенциальным конкурентам.
потенциальными конкурентами.
Так же как существует жёлтый журнализм, то я бы назвал эту статью хорошим примером жёлтого блогизма. Материал в ней сенсационен и эмоционален, но не раскрываются факты, на которых они основаны. Если вы полностью прочтите статью, то увидите, что она завалена анекдотами, на основе которых пытаются сделать вывод о кончине
Давайте посмотрим, что он на самом деле говорится в статье и попробуем прочитать между строк.
Можно считать, что дниС++ сочтены. Альтернатива, которая наиболее подходит для решения схожих задач — этоObjective-C .
К сожалению, автор не указал какие задачи имеются в виду. Он привёл пример браузеров.
Cказано, что существует множество альтернатив
- Google Chrome — кроссплатформенный браузер, первый по скорости и производительности. Если вы захотите заменить язык программирования, на котором он написан, то придется использовать тот язык, который портируется на многие платформы. Я говорю не только о Mac OSX, Windows или Linux — также имею в виду Android (проверьте, Google TV — это Android с портированным Chrome).
- Adobe Creative Suite — системы, работающие с видео, аудио и графикой очень требовательны к производительности. Если вы захотите портировать продукты Adobe, то вам придется использовать язык, при помощи которого можно создавать программы использующие наименьшее количество ресурсов компьютера при выполнения простых задач создания/редактирования, и при этом оставляют достаточно ресурсов для выполнения других задач системы. Ох, и конечно же необходимо
что-бы программа работала как на OS X, так и на Windows.
- Microsoft Office — широко распространенная, расширяемая, встраиваемая и самая нашпигованная фичами система. При портировании Microsoft Office, нужно чтобы в результате не получился монстр и программа быстро реагировала на ваши действия. Вы должны быть уверены, что можно будет написать мощные расширения, которые смотрелись как одно целое с программой.
- World of Warcraft — и здесь я рассматриваю не только десктопного клиента, который перерабатывает огромное количество событий, следует куче правил, отрисовывает графику и делает еще кучу всего связанного с игрой. Подумайте также о серверной части. Нужны ли еще
какие-либо слова об этой прекрасной программе?
Я даю вам возможность самим назвать хотя бы один другой язык программирования, который позволяет написать программы подобные этим и предоставить тот же уровень функциональности, стабильности, расширяемости, портабельности. Прежде, чем вы назовёте С, хочу напомнить, что С — это подмножество
Другой вариант — Objective Caml, язык который регулярно приводится в качестве примера длявысоко-производительных задач и по некоторым показателям часто опережаетС++ . На нем можно писать кратко и структурировано, предоставляет разработчикам более понятные и интересные модели, которые порой отсутствуют в языках того же уровня.
Вы действительно думаете, что
Если говорить о высокопроизводительном коде, то здесь большую роль играет используемый компилятор, а не используемый язык высокого уровня. Это верно для всех компилируемых языков. Легко можно сказать, что один язык лучше другого, если инструменты первого лучше, чем у второго, но в реальности производительность продукта в большей степени зависит от нескольких вещей — железа, компиляторов и кода. Одна из основных причин низкой производительности некоторых программ — это плохой код. Например, когда выбирается алгоритм без учёта реальной ситуации, входных данных,… Если сравнивать пузырьковую сортировку в
Говоря об эстетике, то это дело вкуса. Поэма, написанная на французском, не будет для меня прекрасна, поскольку я не читаю/говорю/пишу на французском — и тут уже не важно насколько она прекрасна для другого человека. То же самое и для
Большая часть вопросов об эффективности и профессиональности связана не только с техническими особенностями, но и теми знаниями и их обмен между разработчиками. Вы не можете сказать, что вы профессионал в
У некоторых может возникнуть мнение, что прочитанная книга о
Язык D также может составить конкуренцию, хотя его проприетарность может помешать широкому применению. Язык Go от Google, содержит много спорных компромиссов, но без сомнения его конструкции дают большое преимущество при создании некоторого типа программного обеспечения, включая параллелизм.
Цитируя Джона Дворака (John Dvorak) — «ерунда все это».
Если считаете, что проприетарность может мешать широкому применению, то взгляните на Java, который стал новым Cobol’ом в мире бизнеса. Вспомните об ассемблере x86 — он тоже проприетарен. Существует много закрытых языков программирования, которые широко применяются, проприетарность не помеха: что реально имеет значение — это техническая сторона. Хакеры которые выбирают только те инструменты, которыми будут пользоваться. Если вы хотите продать мне мышеловку, то и она должна быть достаточно хороша, чтобы я решил потратить на неё деньги.
По поводу параллельности, то реальная проблема в том, что основная часть программистов не знает как писать эффективные параллельные программы. Вот где загвоздка. И не имеет значения, какой язык используется. Недостаток знания в предмете, машинных архитектурах, шаблонах разнообразного доступа к данным, в совокупности с ограничениями на ресурсы — вот, что делает параллельное программирование «сложным». Даже когда упоминается Erlang или Go, то
Однако, исходя из уроков истории,С++ будет еще долгое время занимать свою нишу. Он годами использовался при разработке операционок. Без спору,С++ дает некоторые преимущества перед С для некоторых видов систем, в которых критична производительность и уже существуют наработки. Но сила подобных наработок лежит в сопровождении их разработчиками, которые игнорируют альтернативы, и эта та особенность, которую не легко можно обойти потенциальным конкурентам.
потенциальными конкурентами.
B cнова — фигня все это.
Разработчики, использующие
Кроме того, Lisp не предназначен для создания высокопроизводительных программ, по крайней мере до тех пор, пока не будете настраивать эти программы под нагрузку, с которой вы возможно столкнётесь.
Заключение
Я смотрю на количество слов в статье — их около 2000. Этот вид ненависти к
Я слышал много критики в адрес
Если и есть одна критика в сторону
Об авторе Dean Michael Berris:
Я программист по профессии, специализирующийся на разработке высокопроизводительных сетевых приложений на
Пара критических комментариев к статье и ответы на них.
Программируя наС++ очень легко попасть в ловушки. На нем сложно программировать, поскольку многие вещи просто скрыты от разработчика компилятором (например, компилятор создает по умолчанию конструктор копирования, и если он не был явно создан, то это ведет к побайтовому копированию указателей и может привести в аварии в программе. Даже программа, которая большую часть времени работает нормально, может нести в себе ошибку неправильного использования удаленного указателя. Очень сложно программировать наС++ , когда поджимают сроки и, особенно, когда в команде присутствуют новички.
УС++ намного меньше поддерживаемых библиотек, по сравнению например, в Java. Это означает, что каждый раз приходится реализовывать простые вещи, которые уже есть в других языках.
Очень большая платформозависимость. Нужно приложить много усилий для портирования с Unix на Windows и обратно.
С++ можно применять для академических проектов, в которых важна гибкость языка и есть достаточно времени, чтобы привести программу к идеальному виду.
Это все равно, что называть молоток хорошим, но опасным инструментом, когда вы не умеете им пользоваться.
Но посмотрите на
Если вы не любите работать с низкоуровневыми инструментами, то учите STL, используйте Boost, изучайте Loki или ACE. Если вы не понимаете, что такое указатели, то не сможете применять даже С в реальных программах и ничего не добьётесь от
Для
Я не уверен, что вы используете
Если вы сравниваетеС++ c молотком, то существует по крайней мере 5 разных приспособлений и насадок к нему и непонятно какую из них выбрать. Выбрав неверный, вы отобьете себе руки. Да, если выберите правильный, то сможете работать быстрее, но какова вероятность выбора правильного молотка?
C++ был одним из моих инструментов более 10 лет. Я участвовал в больших проектах и некоторые из них все еще используются. Однако, было много проектов, которые останавливалиcь еще до своего завершения — выходили за рамки отпущенного времени и бюджета. После этого команда java программистов реализовывала ту же функциональность в течение 2 недель и без существенных багов. Даже производительность java версии была выше (с++ код не был оптимизирован).
Я видел опытных программистов делающих глупые ошибки, которые так легко совершить, но трудно найти вС++ .
Портирование кода с unix на windows — это полный кошмар. Причудливые конструкции с шаблонами имеют большой шанс не быть скомпилированными на другой платформе.
Портирование с windows на unix тоже не сахар.
STL хороша и делает программирование проще и библиотека поддерживается всеми компиляторам. Она предоставляет много «базовых вещей», такие как контейнеры, необходимые нам для реализации бизнес логики. Но помимо хорошего дизайна и удобных штучек, ее сообщения об ошибках просто ужасны. STL может немного различаться на разных платформах, что может привести к проблемам при портировании.
Мы используем ACE/TAO фрейморк, но и с ним возникали проблемы на windows платформе, хотя заявляется, что библиотека платформонезависимая.
Мы тестируем, как Boost может использоваться в наших проектах.
Проблема заключается в том, что мы уже имеем 3 разный фреймворка (2 из них внутренние разработки), которые уже используются и не могут быть просто заменены другим без переписывания большого количества кода — нам это не позволяет бюджет. Написание 4го приведет еще к большей путанице (проблема cвязана нес++ , а с непредсказуемой сложностью добавления фунциональности и растущем временем на рефакторинг кода)
Каждый язык имеет свои хорошие и плохие стороны. Очень важно выбрать правильный для проекта.
ХотяC++ предоставляет достаточную гибкость по сравнению с другими языками, но это не тот инструмент для задач, где нужна скорость разработки.
Извините, но инструмент, который вы описали не имеет ничего общего с молотком.
О том, что разработка на
Когда вы говорите о глупых ошибках, то на самом деле это зависит от человека пишущего код. Я написал клиента к memcache с нуля за 1 неделю, используя современный
Уверен, что не я один имею такой же положительный опыт.
Портирование на другую платформу — это только вопрос использования стандартных языковых конструкций. Это также подразумевает использование абстракций, которые скрывают от программиста платформозависимые вещи. Пишите библиотеки и при этом думайте о том как она будет поддерживаться.
Если говорить о сообщениях об ошибках, то это обязанность компилятора. Cогласен, GCC ужасен в этом плане. Но другие компиляторы могут выводить диагностику лучше, чем GCC — я имею в виду clang — он должен выстрелить в скором времени. MSVC 10 тоже может давать хорошие сообщения.
О вашем проекте я должен сказать, что вы должны нанять эксперта, который знает что делать в подобной ситуации. Наймите BoostPro и обучите вашу команду использовать современные
Я знаю хорошие и плохие стороны