О ненависти к С++

http://goo.gl/n9sAv
  • Перевод
С++ or not C++, C++ или Java/Python/Ruby? Как часто вы задаёте или слышите подобные вопросы? Не хотелось бы поднимать очередной холивар — по моему мнению, умные люди давно должны были бы прийти к выводу, что при выборе языка нет той серебряной пули, которая бы поставила окончательную точку, — у каждого языка есть свои плюсы и минусы и чаще всего проблемы в прокладке между клавиатурой и стулом.



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

Взял на себя смелость перевести статью и пару комментариев к ней.

Но прежде чем читать, посмотрите, пожалуйста, на прекрасную карту языка С++ (The C++ Lands). Особая благодарность за карту Алёне Сагалаевой:







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

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

Можно считать, что дни С++ сочтены. Альтернатива, которая наиболее подходит для решения схожих задач — это Objective-C. Другой вариант — Objective Caml, язык который регулярно приводится в качестве примера для высоко-производительных задач и по некоторым показателям часто опережает С++. На нем можно писать кратко и структурировано, предоставляет разработчикам более понятные и интересные модели, которые порой отсутствуют в языках того же уровня. Язык D также можно назвать конкурентом, хотя его проприетарные корни могут помешать его широкому применению. В языке Go от Google много спорных компромиссов, но без сомнения его возможности дают большое преимущество при создании некоторого типа программного обеспечения, включая параллелизм.

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



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

Давайте посмотрим, что он на самом деле говорится в статье и попробуем прочитать между строк.

Можно считать, что дни С++ сочтены. Альтернатива, которая наиболее подходит для решения схожих задач — это Objective-C.


К сожалению, автор не указал какие задачи имеются в виду. Он привёл пример браузеров. Так-что давайте познакомимся с этим поближе.

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, язык который регулярно приводится в качестве примера для высоко-производительных задач и по некоторым показателям часто опережает С++. На нем можно писать кратко и структурировано, предоставляет разработчикам более понятные и интересные модели, которые порой отсутствуют в языках того же уровня.


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

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

Говоря об эстетике, то это дело вкуса. Поэма, написанная на французском, не будет для меня прекрасна, поскольку я не читаю/говорю/пишу на французском — и тут уже не важно насколько она прекрасна для другого человека. То же самое и для C++ — я видел (и надеюсь, что писал) прекрасный код на C++, но программист на Java или С будет, возможно, иного мнения, поскольку они не знают язык так же как я.

Большая часть вопросов об эффективности и профессиональности связана не только с техническими особенностями, но и теми знаниями и их обмен между разработчиками. Вы не можете сказать, что вы профессионал в C++, если это не подтвердят коллеги по цеху.

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

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


Цитируя Джона Дворака (John Dvorak) — «ерунда все это».

Если считаете, что проприетарность может мешать широкому применению, то взгляните на Java, который стал новым Cobol’ом в мире бизнеса. Вспомните об ассемблере x86 — он тоже проприетарен. Существует много закрытых языков программирования, которые широко применяются, проприетарность не помеха: что реально имеет значение — это техническая сторона. Хакеры которые выбирают только те инструменты, которыми будут пользоваться. Если вы хотите продать мне мышеловку, то и она должна быть достаточно хороша, чтобы я решил потратить на неё деньги.

По поводу параллельности, то реальная проблема в том, что основная часть программистов не знает как писать эффективные параллельные программы. Вот где загвоздка. И не имеет значения, какой язык используется. Недостаток знания в предмете, машинных архитектурах, шаблонах разнообразного доступа к данным, в совокупности с ограничениями на ресурсы — вот, что делает параллельное программирование «сложным». Даже когда упоминается Erlang или Go, то все-равно не эффективно писать приложения, когда вы делаете это неправильно и не используете идиомы и шаблоны для параллельных программ.

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


B cнова — фигня все это.

Разработчики, использующие С++ каждый день, не живут в вакууме. Мы знаем о Ruby, Python, Haskell, Lisp, JavaScript, Java и даже такие новомодные языки как Erlang, Go, Lua и т. д. Причиной, по которым организации используют С++ для создания хороших С++ приложений, — является то, что С++ работает и позволяет делать вещи, которые могут делать и другие небольшие языки. Я буду первым, кто признает, что C++ не столь продуктивен, когда необходимо работать с задачами для которых предназначен Lisp, но чтобы вы знали, при использовании современных фич С++, таких как метапрограммирование на шаблонах, можно решать и эти задачи.

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

Заключение

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

Я слышал много критики в адрес С++ от разных людей. CEO, HR менеджеров, разработчиков, бизнес партнёров и даже С++ программистов. Но причина, по которой С++ стандартизирован ISO, причина по которой процветает рынок приложений на этом языке — это его не ограниченность дизайном — так случилось, что язык был спроектирован с учетом лучших и случайно попавших плохих частей прошлых языков для представления многогранного инструмента для создания хороших приложений. Много что можно сделать с++, намного больше, что можно сделать на других языках.

Если и есть одна критика в сторону C++, то это его неправильное понимание. Если каждый потратит на его изучение столько же времени как на Ruby/Python/JavaScript, то я уверен, что это поменяет представление о языке. Существует много хороших книг о С++ — одна из них Programming: Principles and Practice using C++. Прежде, чем стучать на C++ снова, прочитайте эту книгу и расскажите о слабостях C++ — и будет нормальным, если вы поблагодарите меня потом.

Об авторе Dean Michael Berris:

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



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

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

Очень большая платформозависимость. Нужно приложить много усилий для портирования с Unix на Windows и обратно.

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



Это все равно, что называть молоток хорошим, но опасным инструментом, когда вы не умеете им пользоваться.

Но посмотрите на С++ с той стороны, где он напрямую работает с железом. Ещё, вы говорите о «базовых вещах», но не каждый язык имеет четкое представление, что есть «базовая вещь». В С++ базовым является выделение памяти, средства работы с памятью (указатели), типы (классы, структуры, примитивные типы), объекты этих типов (объекты первого класса), управляющие структуры и функции, такие синтаксические конструкции как namespace’ы, модификаторы типов, и все те инструменты для создания модулей и библиотек.

Если вы не любите работать с низкоуровневыми инструментами, то учите STL, используйте Boost, изучайте Loki или ACE. Если вы не понимаете, что такое указатели, то не сможете применять даже С в реальных программах и ничего не добьётесь от С++.
Для С++ существует множество библиотек для разных вещей. Вы можете также использовать уже написанные С библиотеки.

Я не уверен, что вы используете C++ в рабочих проектах и обидно слушать от вас нападки тем, кто использует С++ уже продолжительное время. Но предполагаю, что коль вы считаете, что для С++ имеется меньше библиотек, чем для Java, то не удивлён вашим словам о том, что C++ «полезный инструмент для академических разработок».

Если вы сравниваете С++ c молотком, то существует по крайней мере 5 разных приспособлений и насадок к нему и непонятно какую из них выбрать. Выбрав неверный, вы отобьете себе руки. Да, если выберите правильный, то сможете работать быстрее, но какова вероятность выбора правильного молотка?

C++ был одним из моих инструментов более 10 лет. Я участвовал в больших проектах и некоторые из них все еще используются. Однако, было много проектов, которые останавливалиcь еще до своего завершения — выходили за рамки отпущенного времени и бюджета. После этого команда java программистов реализовывала ту же функциональность в течение 2 недель и без существенных багов. Даже производительность java версии была выше (с++ код не был оптимизирован).

Я видел опытных программистов делающих глупые ошибки, которые так легко совершить, но трудно найти в С++.

Портирование кода с unix на windows — это полный кошмар. Причудливые конструкции с шаблонами имеют большой шанс не быть скомпилированными на другой платформе.

Портирование с windows на unix тоже не сахар.

STL хороша и делает программирование проще и библиотека поддерживается всеми компиляторам. Она предоставляет много «базовых вещей», такие как контейнеры, необходимые нам для реализации бизнес логики. Но помимо хорошего дизайна и удобных штучек, ее сообщения об ошибках просто ужасны. STL может немного различаться на разных платформах, что может привести к проблемам при портировании.
Мы используем ACE/TAO фрейморк, но и с ним возникали проблемы на windows платформе, хотя заявляется, что библиотека платформонезависимая.

Мы тестируем, как Boost может использоваться в наших проектах.

Проблема заключается в том, что мы уже имеем 3 разный фреймворка (2 из них внутренние разработки), которые уже используются и не могут быть просто заменены другим без переписывания большого количества кода — нам это не позволяет бюджет. Написание 4го приведет еще к большей путанице (проблема cвязана не с++, а с непредсказуемой сложностью добавления фунциональности и растущем временем на рефакторинг кода)

Каждый язык имеет свои хорошие и плохие стороны. Очень важно выбрать правильный для проекта.

Хотя C++ предоставляет достаточную гибкость по сравнению с другими языками, но это не тот инструмент для задач, где нужна скорость разработки.


Извините, но инструмент, который вы описали не имеет ничего общего с молотком.
О том, что разработка на С++ более дорога, говорит больше о команде, чем о языке программирования, не правда ли? Я не уверен о каком тип программ вы говорите, но если речь идет о сетевом приложении (я это понял по использованию ACE/TAO), то не вижу где могут возникнуть проблемы. Зная ACE и профессионально используя его ранее, я уверен, что вы быстро реализуете требуемую функциональность, поскольку это уже готовый фреймворк.

Когда вы говорите о глупых ошибках, то на самом деле это зависит от человека пишущего код. Я написал клиента к memcache с нуля за 1 неделю, используя современный C++ стиль, и библиотека все еще используется в том месте, где я ее написал (подсказка: ищите по ключевому слову memcache++). Переписал сервер с нуля за два месяца, 1 месяц использовал для тестирования и улучшений, и это при том, что работал один — сервер может обрабатывать около 5k запросов в секунду (RPS), при этом используется не более 60% CPU и средняя нагрузка 2:1 для СPU. И мне трудно понять, почему многие испытывают сложно с++, когда мне удается делать подобные вещи.

Уверен, что не я один имею такой же положительный опыт.

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

Если говорить о сообщениях об ошибках, то это обязанность компилятора. Cогласен, GCC ужасен в этом плане. Но другие компиляторы могут выводить диагностику лучше, чем GCC — я имею в виду clang — он должен выстрелить в скором времени. MSVC 10 тоже может давать хорошие сообщения.

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

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

Ну. И что?
Реклама
Комментарии 180
  • +4
    Сейчас С++ самый мощный и гибкий язык программирования, но его дни будут рано или поздно сочтены, сейчас этого не происходит только по тому что еще нету ни одного языка во всех аспеках превосходящего С++
    • +15
      это можно сказать про любой язык :)
    • +4
      Злые языки говорят о том, что самый гибкий — это LISP.

      То, что большинство понимает под «мощностью» языка — это умение работать на самом низком уровне. На самом деле мощность — это обратное понятие, это возможность выстраивать абстракции любого порядка.

      А гибкость — это возможность изменения синтаксиса под конкретную задачу, здесь С++ откровенно сливает.
      • +4
        В языке LISP макросов не было, и вообще был он достаточно ограничен. Вы, очевидно, про молодой и динамично развивающийся (:]) Common Lisp говорите.
        • +1
          Естественно.
          • +3
            Молодой и динамично развивающийся — это Clojure, а Common Lisp был стандартизирован черте знает когда.
            • +3
              :] — это ASCII соответствие картинке *trollface*
      • +4
        «Существует много хороших книг о С++ — одна из них Programming: Principles and Practice using C++.»
        ссылка не пашет, 404.
        а статья весьма и весьма интересна.
        а касается «ловушек на с++» или «глупые ошибки, которые так легко совершить, но трудно найти в С++», дорогие коллеги! практика и еще раз практика. с годами работы на с++ это нарабатывается.

      • +12
        «такие новомодные языки как Erlang» — да ну ладна?
        • +6
          А что? Erlang вот недавно таки стал модным, а более молодая Java так и осталась уделом энтузиастов. ;)
          • 0
            ага, лол на лоле сидит.
            Добавил бы: И кобол, язык эзотериков
          • –25
            ага, только С++ это пичалька
            был С — «отлично, теперь нам не надо мучаться с грусными местами АСМа, встроенные оптимизации тоже хороши»
            С++ появился — «смотрите, ООП, какие то другие фички, пространства имён, это всё так современно но при этом мы можем писать как на Си»
            С++ продолжился — «особое С++ ООП, шаблоны, большой новый мир, да ещё и с поддержкой Си»
            С++0X — «новые фичи из других языков, метапрограммирование, шаблонное программирование, многопоточность… стоп, мы всё ещё можем писать на Си ????»
            я к чему это всё
            язык вылезает из низкоуровненного в «высокие абстракции», но при этом по сути он как был низкого уровня, так и остался
            конечно можно говорить что настоящий ПРО во всём этом не потеряется, но НАСТОЯЩИЙ про забьёт на такое дело, абстракции и так тонкая материя, подмешивать сюдя ещё и почти што асм это точно приведёт к необходимости переписывать код (и не обязательно именно рефакторить, замечу)
            а бизнес в 99.9% не ждёт того что вы будете переписывать свой месячный труд
            P.S.
            а язык который действительно написан сразу и на века — это перл, С++ рядом не лежал
            • +51
              ну юзерпик нам как бы все говорит, да.
              • 0
                ПГМ
                Пхп головного мозга.
              • +1
                >конечно можно говорить что настоящий ПРО во всём этом не потеряется, но НАСТОЯЩИЙ про забьёт на такое дело, абстракции и так тонкая материя, подмешивать сюдя ещё и почти што асм это точно приведёт к необходимости переписывать код (и не обязательно именно рефакторить, замечу)
                а бизнес в 99.9% не ждёт того что вы будете переписывать свой месячный труд
                P.S.
                а язык который действительно написан сразу и на века — это перл, С++ рядом не лежал

                это как речь гадалки вроде бы гладко и четко говорит, да вот бред и выдумки.
                • 0
                  Гревние дреки ранее придумали термин «софизм».
              • +3
                «С++ or not C++, C++ или Java/Python/Ruby?» — нужно учесть еще, что огромное количество кода написано, миллионы и миллиарды строк = куча библиотек. Кто будет все это переписывать на другие языки? С++, Fortran, Java… Выбор к тому или другому языку несомненно зависит от стоящей перед программистом задачи и навыков, но порой просто нет выбора…
                • +1
                  Прекрасная карта языка С++. Спасибо Вам за ссылку и Елене Сагалаевой за разработку.
                  • +2
                    Прочитав название сразу же хочется сказать «не нравится — не ешь». Вариантов масса: заставляет начальство, всегда можно изучить другой язык и найти другую работу. Нет любимого тебе языка, пиши свой, но ты при этом должен осознавать всю работу, которую придется сделать. Нет нужной билиотеки классов, сборщика мусора? Милости просим к перуклавиатуре, потомки будут благодарны. Для каждого языка, есть своя область применения и С++ как и ООП ИМХО не панацея от всех бед…
                    • 0
                      Страуструп в своей книге «The Design and Evolution of C++» сказал, что сравнение языков программирования субъективно. Да и не нужно забывать, что программирование, в первую очередь, это математика, а не конкретная платформа/язык/идиома. Подобные выкрики о скорой кончине С++ слышал часто, но только от людей, которые его совсем не знают.

                      Немного изменю слова А. Степанова: «Читайте Кнута, а не рассуждайте о жизненном цикле языков программирования»

                      Спасибо за статью!
                      • +18
                        Как всегда у цппшников аргументы в стиле «ты просто не умеешь их готовить».
                        • +6
                          Надо признать, «умение готовить» — очень важно везде :)
                          • 0
                            на каждый обед делать себе кулинарный изык несколько затруднительно. ОБычно надо пожрать побыстрее, посытнее и как можно быстрее…
                            • +3
                              И это часто приводит к язве желудка впоследствии :)
                              • 0
                                можно поесть быстро, сытно и не слишком уж сильно убивая желудок :)
                                • 0
                                  Это встанет вам слишком дорого :)
                                  • 0
                                    Если питаться в ресторанах то да :)
                              • 0
                                А "на каждый обед делать себе кулинарный изык" вовсе и не надо. Ситуация вообще выглядит не так. Просто кто-то умеет пользоваться фишками различных языков (и, соответственно, работает быстро, эффективно и качественно), а кто-то — нет. Профессионал может быстро приготовить вкусное и полезное блюдо из любых (хороших) продуктов, а дилетант угробит что угодно и останется голодным.

                                Хотя, надо признать, что для разных задач — разные языки. Как и в кулинарии. Из клубники шашлык не приготовишь.
                                • 0
                                  > для разных задач — разные языки.

                                  Плюс много. С++ хорош в своей не слишком-то чётко определённой сфере, но тем не менее, примеры которые приведены в топике очень неплохи. Это те вещи, когда сишные конструкции начинают выносить мозг, а .net слишком тормозной. В таких случаях я за C++.
                            • +2
                              И «ты просто ещё наступил не на все грабли недостаточно опытен»
                              • +12
                                >Как всегда у цппшников аргументы в стиле «ты просто не умеешь их готовить».

                                Аргумент «невозможно сразу начать использовать сложный инструмент правильно» верен для любого сложного инструмента. C++ — как раз такой сложный инструмент.
                                Так что да, если в вашей С++-программе что-то идёт не так, как вы того ожидали — вы действительно «не умеете его готовить». И это не эксклюзивная фича С++, такое есть в любом другом языке.

                                Java:
                                Вопрос: «А-а-а, какого хрена protected-метод доступен из другого класса, не являющегося наследником??»
                                Ответ: «В Java protected методы доступны в пределах пакета, а раз возникает такой вопрос, то вы не знаете Java».

                                Python:
                                Вопрос: «А-а-а, какого хрена я меняю один объект внутри метода, а меняется совсем другой объект и в другом месте??»
                                Ответ: «В Python объекты передаются по ссылке, и при „присвоении“ одного объекта другому на самом деле происходит создание ещё одной ссылки на тот же самый объект, а раз у вас возникает такой вопрос, то вы не знаете Python».

                                И так далее, и тому подобное, и таких примеров — сотни и тысячи.

                                Выучиить язык — это не освоить его синтаксис, написав пять хелловорлдов разной степени сложности по книжке "%languagename% за 48 часов", а понять и прочувствовать его фундаментальные основы.
                                • +1
                                  понять основы можно и за 5 минут, если они простые и понятные. а вот если они представляют из себя тысячу и одну несуразность, то и 10 лет может не хватить. вопрос: зачем нужен язык на освоение умения готовить который требуется 10 лет производя в течении которых говнокод разной степени вонючести?
                                  • 0
                                    >вопрос: зачем нужен язык на освоение умения готовить который требуется 10 лет производя в течении которых говнокод разной степени вонючести?

                                    Поздравляю, Вы 100501-й человек, задавший этот вопрос и не сумевший предложить альтернативу, которая на 100% заменит C++ в его областях.
                                    • 0
                                      эрланг уже упоминали
                                      • 0
                                        На 100%. Во всех областях.
                              • –1
                                Для разных целей нужны эти языки. Понятно, что сайт лучше писать на Java/Python/Ruby (ну кроме особых проектов и CGI), а операционную систему лучше писать на C++. Странно, что не все это понимают.

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

                                Наконец, C++ может показаться сложным и нелогичным. Но со временем и опытом к Вам придет понимание, что он прекрасен.

                                В наше время многое написано на C++, в том числе и те же Python/Ruby. И от этого никуда не деться, нужно лишь понять, почему часто выбирают именно этот язык.
                                • НЛО прилетело и опубликовало эту надпись здесь
                                  • +5
                                    Нет, написана на С одна из реализаций этого языка.

                                    Есть реализации Python'а и на C#, и на Java, к примеру.
                                    • –1
                                      И на питоне тоже есть реализация (pypy), причем самая быстрая (обгоняет реализацию на C в десятки раз на некоторых задачах).
                                      • НЛО прилетело и опубликовало эту надпись здесь
                                    • +1
                                      и какая же ОС написана на С++?
                                      • –2
                                        Догадайтесь.

                                        Понятно, что не вся ОС, но тем не менее большая часть.

                                        Или я снова перепутал C и C++?
                                        • +8
                                          /usr/src/linux $ find -name *.cpp
                                          /usr/src/linux $

                                          OH SHI~

                                          или вы о винде?
                                          так там всё винапи СИшное, на счёт либ не знаю, наверное там сейчас всё вообще на .NET xD
                                          единственная ось которая написана на С++ полностью — симбиан
                                          ну и собственно вопрос а где сейчас симбиан и что такое meego
                                          • –1
                                            Куте же!
                                            • –22
                                              Дистрибутив Kubuntu написан на C++, дистрибутив Ubuntu — преимущественно на C и Python, ОС GNU/Linux — на C.
                                              • +2
                                                Да вы шо ни разу не слышали о KDE OS!?
                                                • +2
                                                  Автор, больше не пиши. -_-
                                                  • –2
                                                    вырвалось: Jesus Fucking Christ!!!
                                                • 0
                                                  Haiku написана на С++ полностью.
                                              • +3
                                                Насколько я знаю, большая часть BeOS/Haiku. Но, как показывает жизнь, Linux, написанный по большей части на C их сделал.
                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                  • 0
                                                    BeOS — да. Haiku — развивается черепашьими темпами. Хотя, тоже, скорее из-за организационных косяков.
                                                • –1
                                                  WinNT. Что многое объясняет ;)
                                                  • +1
                                                    Да ну? Она на C чуть более, чем полностью.
                                                    • +3
                                                      [irony]Там есть ассемблерные вставки![/irony]
                                                • +2
                                                  > Ну да, время C++ возможно кончается, в нем нет различных новинок программирования

                                                  Посмотрите на новый стандарт.

                                                  > Наконец, C++ может показаться сложным и нелогичным.

                                                  Не только может показаться, он такой и есть.

                                                  > Но со временем и опытом к Вам придет понимание, что он прекрасен.

                                                  Одно другому не мешает :)
                                                  • +5
                                                    >>Наконец, C++ может показаться сложным и нелогичным.

                                                    >Не только может показаться, он такой и есть.


                                                    Сложный — да, нелогичный — вряд ли. Главная «проблема» любой логики в том, что чтобы получить верный вывод, нужно отталкиваться от верных предпосылок. А если предпосылка неверна, то и результат с большой долей вероятности получится неверный. В случае любого языка предпосылками являются знания программистом базовых основ.

                                                    То самое (чрезвычайно «любимое» всеми новичками :)) поведение дефолтного конструктора копирования и оператора присваивания в С++ — логично от начала и до конца: в старом объекте был указатель — в новый объект скопировался именно указатель. А если программист не понимает, что такое указатель и чем он отличается от непосредственно объекта и исходит из того, что при копировании указателя происходит копирование объекта — извините, тут нужно чинить «базу», а не обвинять язык в нелогичности.
                                                  • 0
                                                    Официальный интерпретатор ruby написан на C.
                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                        • +2
                                                          Его можно выучить за 21 день по книжке =)
                                                          • +1
                                                            Я так и делал, по этой самой книжке Джесса Либерти — прочитал за 2 дня, научился писать самостоятельно за месяц, а потом — несколько лет углубленного изучения и хождения по граблям. Полагаю, с остальными языками ситуация схожая: на освоение синтаксиса нужно относительно немного времени, а на получение знаний по его правильному применению — на порядок больше.
                                                            • +9
                                                              пруф пик

                                                        • 0
                                                          Си тоже не стоит на месте :)
                                                          В gcc4.6 наконец добавили очень полезный экстеншен из Plan9 C Compiler'а -fplan9-extensions
                                                          • –4
                                                            > C++, по моему впечатлению, занят тем, что переписывает C, заменяя то, что C и так умеет, своими собственными конструктами.

                                                            Любой язык-надстройка только это и делает. Единственное действительно полезное добавление в C++ — это шаблоны, да и те пора переработать с оглядкой на D.
                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                              • +1
                                                                Я посильнее порекомендую FQA:
                                                                FQA — это не FAQ, это одна из самых подробных критик Си++, где берётся вопрос, ответ из FAQ, и обсуждается
                                                                • 0
                                                                  второй вариант читабельнее, нее?
                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                    • 0
                                                                      а если у человека в проекте несколько сотен/тысяч файлов и надо быстро глазами пробежаться по паре десятков не останавливаясь на расшифровку параметров форматирования?
                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                        • 0
                                                                          ви таки знаете, я на Сях и их диалектах пишу почти 20 лет, но в плане форматирования вывода мое предпочтение однозначно на стороне С++.
                                                                  • +4
                                                                    Это Вы размеры сравниваете? Ну так «сишечка сосет» у J:
                                                                    quicksort=: (($:@(<#[) , (=#[) , $:@(>#[)) ({~ ?@#)) ^: (1<#)


                                                                    Загляните в реализацию qsort в CRT Вашего любимого компилятора C. Значит ли это, что нужно писать на J?
                                                                    Размер программы давно никого не интересует, если он приносится в жертву читабельности (иногда размер приходит один, но здесь явно не тот случай). Как пример длинные и human-readable названия идентификаторов.

                                                                    Кстати, variadic template-ы возможно принесут в нашу жизнь type safe форматировнный вывод (a-la String.Format)
                                                                    • 0
                                                                      Есть Boost.Format.
                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                        • 0
                                                                          Очередной понтовый квиксорт на «тройках», кушающий память, вместо честного алгоритма Хоара на обменах? (это вопрос, я не могу понять это по коду, но подозреваю, что, как всегда в случае квиксорта в одну строчку, это так)
                                                                    • +1
                                                                      Не сочтите за троллинг, я не программист, но знаком и с С, и с С++. И вот мне очень интересно, как на С реализовать шаблоны, например. Правда интересно, с удовольствием бы посмотрел на решение.
                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                        • 0
                                                                          они медленнее аналогов на шаблонах…
                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                        • –3
                                                                          Простите, а шаблоны нужны не для того ли, чтобы, условно говоря, извернуться — и обойти систему типов, м? Но если вообще надо что-то обходить — не похоже ли это на workaround архитектурной ошибки?
                                                                          • +2
                                                                            Нет, не для того. Шаблоны — они про метапрограммирование, а не про обход системы типов. Более того, шаблоны type safe, что является их ГЛАВНЫМ преимуществом перед препроцессорными макросами
                                                                            • 0
                                                                              Да не надо мне рассказывать, на каком этапе работы компилятора разворачиваются шаблоны, чесслово! :-D Я еще многим могу фокусы из Александреску-стайл оперы показывать.

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

                                                                              «Неуклюжим» — это про местами неоднозначный синтаксис, про проблемы отладки такого кода, про… Ну, полагаю, про проблемы программирования с шаблонами здесь никому рассказывать не надо.

                                                                              • 0
                                                                                Вот насчет неуклюжести (вернее громоздкости) согласен. Но все равно, система типов не обходится.
                                                                                • 0
                                                                                  Мне кажется, или вы мысль не закончили? ;)
                                                                                  • 0
                                                                                    Как это?

                                                                                    «Не обходится» — это когда написал «мол, так и так, хочу контейнер такого-то типа», и язык эту задачу решает без прямого размножения кода под каждый тип.

                                                                                    А та-а-а-а-ак…
                                                                              • 0
                                                                                Hint: шаблоны разворачиваются на этапе компиляции.

                                                                                А теперь подумайте, удастся ли в этих условиях «обойти систему типов» ;)
                                                                                • 0
                                                                                  ответ чуть выше :) Я ведь пару лет работал с плюсами, правда-правда :)
                                                                          • +7
                                                                            Ох, да у автора бугурт. Причем, похоже, что-то кроме плюсцов он почти ничего и не видел.
                                                                            • +10
                                                                              Предпочитаю не вести споры на теологические темы, однако хочу заметить, что на сегодняшний день нет альтернативы С и С++ и парадигмы тут ни при чем. Любой язык транслируется в машинный код и процессору без разницы на каком языке этот код писали изначально. Тот, кто сталкивается с программированием на С/С++ знает, что невозможно писать на этих языках без понимания того, как и что делает железо — и это основная проблема для новичков. Когда меня просят рассказать «об указателях и строках» я начинаю с того, что нет никаких указателей и строк — есть адреса в памяти. Какой еще язык программирования даст вам столь тесный контакт с железом и столь полный контроль над выполнением кода? Почему большинство расширений для php, python-а, lua и других языков пишутся именно на С/С++? У этих языков всегда будет своя ниша, они уникальны и разрабатывать что-то еще я не вижу смысла, пока не появится железо, не совместимое идеологически с тем, для которого мы с вами пишем код.
                                                                              • 0
                                                                                Камль?
                                                                                • +1
                                                                                  Я не знаком с ним, но если там я смогу управлять адресами вызовов методов классов — то возможно, что да.

                                                                                  class T {
                                                                                  public:
                                                                                  void moo () {
                                                                                  printf ( «moo!\n» );
                                                                                  }
                                                                                  void foo () {
                                                                                  printf ( «foo!\n» );
                                                                                  }
                                                                                  };

                                                                                  union hack {
                                                                                  void (T::*pointer)(void);
                                                                                  char * addr;
                                                                                  };

                                                                                  int main () {
                                                                                  T *t = new T();
                                                                                  hack h;
                                                                                  h.pointer = &T::moo;
                                                                                  (t->*h.pointer)();
                                                                                  char *addr = h.addr;
                                                                                  h.pointer = &T::foo;
                                                                                  (t->*h.pointer)();
                                                                                  h.addr = addr;
                                                                                  (t->*h.pointer)();
                                                                                  return 0;
                                                                                  }
                                                                                  • +6
                                                                                    вопрос только зачем это делать…
                                                                                    • 0
                                                                                      Если звезды зажигают, то это кому-нибудь нужно… ;)
                                                                                    • 0
                                                                                      за такой код в Соловец на вечное покаяние высылать нужно.

                                                                                      хотя бы потому, что указатели на члены классов не обязаны по размеру совпадать с обычным указателем.
                                                                                      • +1
                                                                                        Спасибо, капитан! Целью примера было, так сказать, «unleash the power», а не грамотный код сам по себе, да и вообще такие ужасы ни писать ни даже читать я сам никому не рекомендую. Код должен быть красив, понятен и желательно пахнуть фиалками.
                                                                                        • +1
                                                                                          Возникает очевидное противоречие: с одной стороны вы вроде как продемонстрировали «силу сильную», а с другой никому не рекомендуете эту силу использовать. Отсюда вопрос: зачем такая фича нужна и зачем требовать от языка её наличия. Нелогично. :-)

                                                                                          • 0
                                                                                            Ничего нелогичного. Это не демонстрация «сильной стороны», а скорее «иллюстрация возможностей». А уж кто и как эти возможности собирается использовать — сугубо личное и интимное. Зачем конкретно нужна такая фича, сказать прямо так не берусь, но однажды, помнится, ее использовал. Это был некий класс-обертка для практически прямого маппинга классов C++ в Lua, так что иногда всякие чудеса все таки нужны.
                                                                                  • +1
                                                                                    Вы считаете C/C++ серебряной пулей?
                                                                                    • 0
                                                                                      Несомненно — нет. Основная идея даже этой статьи в том, что спор о том что «лучше» или «хуже» зачастую бессмыслен.
                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                                    • 0
                                                                                      Язык D, как потомок C/C++, может быть, даже и подходит. Одна из его проблем в том, что от «оторвался» от предков и огромные объёмы наработок на C/C++ удобно использовать не позволяет.
                                                                                      • 0
                                                                                        > Потому что в большом проекте вы хотите встречать только очень простой, скучный, тривиальный, но зато понятный код.

                                                                                        Если это настоящая причина, то с языками вы немного ошиблись. Для этого как раз подходит Common Lisp в императивном или ООП (не функциональном!) стиле, D и Java. Набедокурить можно и в них, но в Python, Ruby и C++ это сделать на порядок проще.

                                                                                        Честно не понимаю как плюсник мог записать D в список непонятных языков.
                                                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                            • 0
                                                                                              Тема GC холиварна. Предлагаю не добавлять в обсуждение ещё один. :)

                                                                                              > Если в С++ коде я вижу int i = 0; foo(++i);, то я могу сказать что будет в переменной i после выполнения foo

                                                                                              В C++ есть тысяча и один способ сломать программу. Ну заменим пару сотен на один — lazy параметры. :) Если бы вы боялись опасных фичей — писали бы на параноидальных языках вроде Java или Ada.

                                                                                              Кстати, за foo(++i) коллеги будут бить линейкой по пальцам и в D, и в C++, и в Java. Но тут в D есть решение, которое я, пожалуй, отправлю рассылку — разрешать только чистые функции в lazy параметрах. т.е. foo(i++) можно, foo(make_some_stuff(i)) можно, foo(++i) — нельзя.
                                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                              • +2
                                                                                                Столько разговоров о GC, а делов-то:

                                                                                                // см. digitalmars.com/d/2.0/phobos/core_memory.html
                                                                                                import core.memory;

                                                                                                void main()
                                                                                                {
                                                                                                  GC.disable; // отключаем сборщик мусора
                                                                                                  …
                                                                                                  // profit!
                                                                                                }

                                                                                                Вообще-то, разработчики языка и стандартной библиотеки стараются сводить к минимуму необходимость использования указателей в D, и у них это получается — указатели, в основном, используются для взаимодействия с внешними библиотеками на C и C++.
                                                                                                • +1
                                                                                                  > GC.disable;

                                                                                                  При этом успешно начинают течь операции с массивами и лексические замыкания. Не надо FUD, это не наш стиль.

                                                                                                  Впрочем, стандартная библиотека (обе) не текут, достаточно следить за своим кодом.
                                                                                                  • 0
                                                                                                    В модуле std.container есть класс Array — аналог плюсового std::vector. Про него, в частности, сказано: «The memory allocated for the array is reclaimed as soon as possible; there is no reliance on the garbage collector». Используйте Array, если хотите работать без GC. Про то, что за встроенными динамическими массивами прибирает GC, явно сказано в документации, цитирую: «Any generated temporaries get cleaned up by the garbage collector (or by using alloca())», digitalmars.com/d/2.0/arrays.html.
                                                                                                    В той же Java, кстати, GC вообще не отключается — и ничего, живут как-то с этим (:

                                                                                                    А про лексические замыкания не понял, поясните, пожалуйста.
                                                                                                    • 0
                                                                                                      Чтобы контекст замыкания оставался доступным, он выделяется в куче. Когда замыкание перестаёт существовать, течёт весь его лексический контекст.
                                                                                            • +1
                                                                                              А есть ещё язык Ada. Про него мало кто знает, и изучать его — сложнее, чем C/C++, но для больших проектов (хотя и не любой тематики) — это один из лучших вариантов. Опять же, если «уметь готовить».
                                                                                              • +4
                                                                                                «Программирование на языке Ада» — сильно звучит ;)
                                                                                                • 0
                                                                                                  Угу. У меня книжка такая есть. Поскольку не нужна, отправил ее к бабушке храниться. Бабушка богомольная, книжки первое время пугалась.
                                                                                                  • 0
                                                                                                    А как звучит «От Паскаля к Аде»:image

                                                                                                    Авторы: В. Н. Орлов, В. Ю. Блажнов, Т. Ю. Бардинова, А. А. Маслов,
                                                                                                    Издателство: Финансы и статистика, 1990 г.
                                                                                                  • 0
                                                                                                    Pascal++
                                                                                                • 0
                                                                                                  Надо ещё учитывать то, что далеко не всякий разработчик, восторгающийся другими языками программирования, может позволить себе перейти на них с C/C++. Переписать всё заново на другом языке есть возможность не всегда. Состыковать старые наработки с новыми (на другом языке) тоже не всегда просто. А реальная жизнь требует выполнения сроков и соответствия бюджету.
                                                                                                  • +1
                                                                                                    Можно подумать, программисты на С++, начитавшись статей против своего любимого языка, бросятся писать на других языках, как будто раньше и не подозревали, что те существуют. Да, С/С++ сложен, не каждому по силам, ну и что? Альтернативы так или иначе имеются. А умрет язык — ну и что такого? Умрет только от старости, когда каждый сможет с уверенностью сказать, что язык сослужил хорошую службу и может отправляться «на покой».
                                                                                                    • +1
                                                                                                      До конца не умрёт — всё равно останутся заповедные чащи, где он будет водиться ещё многие десятилетия, пугая случайно забредших путников %)

                                                                                                      В наше время далеко не каждый программист хотя бы слышал слово «Кобол» (не говоря уже о том, чтобы знать хотя бы базовые фичи и область применения), однако мой бывший коллега (ничуть не «динозавр» из старой гвардии, ему сейчас <30) недавно устроился на новую работу и пишет именно на нём %)
                                                                                                    • 0
                                                                                                      Все эти холивары немного ни про что. Люди пишут на том, что им удобно, и что подходит к задаче.
                                                                                                      В этом смысле C++ ещё долго не потеряет смысла.

                                                                                                      На мой взгляд, к сожалению. Потому что лучше потратить то же время обучения на понимание OOP, AOP и прочей архитектуры, чем на понимание тонкостей работы со ссылками и всех подробностей сложного языка. А для производительности в современном мире, может быть, даже важнее потратить время обучения на понимание многопоточности.

                                                                                                      То есть C++ конечно может всё, но если учитывать, что на проектах бывают джуниоры, я бы предпочёл оценивать их с т.з. вышеописанного, чем разбирать их утечки памяти.
                                                                                                      • +3
                                                                                                        Microsoft Office — широко распространенная, расширяемая, встраиваемая и самая нашпигованная фичами система. При портировании Microsoft Office, нужно чтобы в результате не получился монстр и программа быстро реагировала на ваши действия. Вы должны быть уверены, что можно будет написать мощные расширения, которые смотрелись как одно целое с программой.
                                                                                                        Microsoft Office это и есть монстр.

                                                                                                        World of Warcraft — и здесь я рассматриваю не только десктопного клиента, который перерабатывает огромное количество событий, следует куче правил, отрисовывает графику и делает еще кучу всего связанного с игрой. Подумайте также о серверной части. Нужны ли еще какие-либо слова об этой прекрасной программе?

                                                                                                        Неофициальный сервер lineage 2 написан на java, и крупнейший русский фришард имеет больший онлайн на одном сервере чем официальный.

                                                                                                        Google Chrome — кроссплатформенный браузер, первый по скорости и производительности. Если вы захотите заменить язык программирования, на котором он написан, то придется использовать тот язык, который портируется на многие платформы. Я говорю не только о Mac OSX, Windows или Linux — также имею в виду Android (проверьте, Google TV — это Android с портированным Chrome).
                                                                                                        Андроид использует как основной язык когобывыдумали… Яву!

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

                                                                                                        Если считаете, что проприетарность может мешать широкому применению, то взгляните на Java, который стал новым Cobol’ом в мире бизнеса.
                                                                                                        Щито? А OpenJDK?

                                                                                                        Нет, я не спорю, C/C++ штука чрезвычайно мощная. Но в большинстве случаев это становится его минусом — эту мощь надо еще уметь использовать. Шедевры вроде uTorrent (меньше 400 кб со всей его функциональностью) — редкие исключения.
                                                                                                        • +1
                                                                                                          > Щито? А OpenJDK?

                                                                                                          А до OpenJDK широкого применения не было?
                                                                                                          • 0
                                                                                                            Неофициальный сервер lineage 2 написан на java, и крупнейший русский фришард имеет больший онлайн на одном сервере чем официальный.

                                                                                                            Больше, думается, потому что шара и язык на котором написана серверная часть в этом примере ни о чём не говорит
                                                                                                            Андроид использует как основной язык когобывыдумали… Яву!

                                                                                                            Основной, но не единственный.
                                                                                                            • 0
                                                                                                              Больше, думается, потому что шара и язык на котором написана серверная часть в этом примере ни о чём не говорит
                                                                                                              Речь не о популярности, а о способности это количество выдержать. На оффе жесткий лимит в 5000 онлайна не от хорошей жизни. А там 8000 помню было, если не больше.
                                                                                                              Основной, но не единственный.
                                                                                                              Не единственный, но основной.
                                                                                                              • 0
                                                                                                                Я конечно не могу утверждать со 100% уверенностью, но думается что такой лимит обусловлен не производительностью, а скорее комфортом в игровом мире, так-как он не резиновый. Хотя может я и неправ.
                                                                                                                • 0
                                                                                                                  Мир не раз расширяли, а лимит не меняли с самого начала.
                                                                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                              • +1
                                                                                                                Андроид использует как основной язык когобывыдумали… Яву!

                                                                                                                Вообще-то C/C++. На Java там тока UI. (источник)
                                                                                                                • +1
                                                                                                                  Oblitus имел ввиду немного другое: Java — основной язык разработки приложений для Android, а не самой OS.
                                                                                                                  Смотрите developer.android.com/sdk/ndk/overview.html, раздел Development tools. Там написано, что для C и C++ доступна лишь часть библиотек, необходимых для разработки (приведён их список).
                                                                                                                • +2
                                                                                                                  >Неофициальный сервер lineage 2 написан на java, и крупнейший русский фришард имеет больший онлайн на одном сервере чем официальный.
                                                                                                                  Откройте код этого сервера. Потом прочитайте такую замечательную и бесплатную книжку Parallel Programming. И вдруг вас озарит, что тяжело называть программистами тех людей, которые писали основную часть этого сервера.
                                                                                                                  Лучше приводите пример с Аллодами Онлайн, у них официальный сервер тоже написан на Жаве.
                                                                                                                  • 0
                                                                                                                    Если речь про l2j — согласен, но тот же l2p имеет мало с ним общего. С аллодами дела не имел.
                                                                                                                  • +2
                                                                                                                    Уронить программу на яве намертво сложно, а сишные при любом исключении норовят упасть совсем. Что понимается под расширяемостью и функциональностью я не совсем понял.
                                                                                                                    ну тут уже от рук программиста зависит. Многое чем я пользовался на яве — падало. (не писал, пользовался!)
                                                                                                                  • 0
                                                                                                                    На серверах С++ прекрасно заменяется Java-ой начиная с обработки HTTP запросов и заканчивая MMORPG. Как пример тому гугловское облако сделано на Jetty (которое полностью написано на Java). Или не менее популярная игра — Lineage, серверная часть написано полностью на Java.

                                                                                                                    На клиентах С++ держится из-за 3D (игры, CAD и т.д.). Здесь я ничего сказать не могу, т.к. нет опыта работы в этой области. Но думаю когда появится нормальный интерфейс для работы с GPU из Java, то 3D графика будет работать с той же скоростью, что и в C++.

                                                                                                                    Плюс не забывайте, что Autocad, 3D Max и подобные пакеты существовали до появления Java. Так что, возможно сейчас более выгодно делать подобные приложения на той же Java… Но тут я не специалист — может так уже и делают.
                                                                                                                    • 0
                                                                                                                      На серверах C++ прекрасно заменяется практически чем угодно. В топике речь про десктопы, судя по примерам.
                                                                                                                      • 0
                                                                                                                        Кстати, на десктопах С++ популярен еще из-за того, что работает из коробки. Т.е. не нужно ставить JRE, например. Плюс традиция — куча крутых игр делали на С++, поэтому эта область хорошо отработана — есть движки, библиотеки и т.д.
                                                                                                                      • 0
                                                                                                                        дело в том что в играх есть не только графика… и всегда есть чем занять процессор, когда он освобождается от графики…
                                                                                                                        сейчас уже не редкость, что параллельно видеокарте, работает софтовый растеризатор, для того чтоб повысить эфективность кулинга объектов и на видюху отправлять только то, что действительно есть на экране…
                                                                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                        • +4
                                                                                                                          С — это подмножество С++

                                                                                                                          Ложь, особенно после C99.
                                                                                                                          • +8
                                                                                                                            Я никогда не буду писать на C++ парсер для кривого HTML для импорта данных с внешнего веб-проекта. Также я никогда не буду писать на Ruby/PHP аудио-плейер или драйвера. Люди не понимающие зачем нужны различные языки никогда в жизни не занимались программированием полноценно и не решали различные задачи. Спор можно прекратить.
                                                                                                                            • +2
                                                                                                                              Из этого топика я так и не получил информации почему С++ еще жив и будет жить. :) Автор такой же эмоциональный холиварщик, как тот, кого он цитирует.

                                                                                                                              Я, например, думаю, что С++ популярен не из-за своей крутой скорости. Как уже сказали выше, Java или C# не особо уступает как на серверах, так и на клиенте. Поэтому думаю основная фишка в том, что:

                                                                                                                              1. Запускается из коробки без необходимости установки JRE или Mono, тем самым юзеру нужно скачать 400-900Кб и всё гарантировано заработает. Не нужно тянуть 15 метров JRE например и возможно иметь проблемы из-за несовместимы с новыми JRE.

                                                                                                                              2. Игры — большие наработки в этом направлении тянутся из 90-х, куча отработанных технологий: движки, библиотеки и т.д.

                                                                                                                              3. Куча «древнего» софта Apache, 3D Max, Autocad, Microsoft Office и т.д., которые писались на С/С++ когда Java, C# еще и не существовали. Естественно, никто не будет переписывать их, когда куча кода написано на С/С++.

                                                                                                                              У кого еще какие идеи?
                                                                                                                              • 0
                                                                                                                                Предположу, что из-за того, что память можно выделять самому и сколько хочешь,
                                                                                                                                можно писать программы, которые менее требовательны к памяти.
                                                                                                                                Но тестировать надо потом на утечки.
                                                                                                                                • 0
                                                                                                                                  >2. Игры — большие наработки в этом направлении тянутся из 90-х, куча отработанных технологий: движки, библиотеки и т.д.
                                                                                                                                  Поверьте, еслиб Java и C# были не такими тормозными, в индустрии геймдева первыми бы уже всё переписали на этих языках. Просто маркетинговый бред с микробенчами засрал всем головы.

                                                                                                                                  >3. Куча «древнего» софта Apache, 3D Max, Autocad, Microsoft Office и т.д., которые писались на С/С++ когда Java, C# еще и не существовали. Естественно, никто не будет переписывать их, когда куча кода написано на С/С++.
                                                                                                                                  А как вам такая история. EverNote 4 полностью переписан с C# на C++ по причине тормознутости .NET'а.
                                                                                                                                  • +3
                                                                                                                                    Странно получается. Если программа на С++ тормозит — это у программиста руки кривые, а если тормозит программа на C# — то это во всем виноват .NET.
                                                                                                                                    • +1
                                                                                                                                      Ок, тогда ждём когда все игры перепишут на Go :) Обещают сравнимую производительность с С++ и простоту Java/C#/D — даже проще. Единственно, там сейчас даже официальных драйверов к популярным БД нету :(
                                                                                                                                      • 0
                                                                                                                                        Поверьте, еслиб Java и C# были не такими тормозными, в индустрии геймдева первыми бы уже всё переписали на этих языках. Просто маркетинговый бред с микробенчами засрал всем головы.

                                                                                                                                        Проблема явы не в тормознутости, скорость у нее на уровне. Проблема в легкости декомпиляции.
                                                                                                                                        • 0
                                                                                                                                          Программирование в геймдеве отличается от программирования веб-сервисов и окошек на десктопе. Скорость явы и оверхед по памяти ну совсем не дотягивает до того что есть сейчас при использовании кривого Си++, который опять же многие ненавидят, но ничего лучше для решения этих задач пока нет.
                                                                                                                                          Data Oriented Luddites
                                                                                                                                    • +1
                                                                                                                                      Я на С++ пишу 2d игру под ифон, физика Box2d тоже написана на C++. Все ради скорости. Objective-C использую для UI проектов более 2ух лет, но для игр предпочту C++. Думаю такую красоту которую Кармак и Epic Games выжали из ифона не в последнюю очередь принадлежит C а может даже и C++ ). Так что они жили, живут и будут жить, еще меня переживут думаю ). Под PC увы не в курсе, но думаю там ситуация аналогична.
                                                                                                                                      • +4
                                                                                                                                        >Думаю такую красоту которую Кармак и Epic Games выжали из ифона не в последнюю очередь принадлежит C а может даже и C++
                                                                                                                                        Из id software :)
                                                                                                                                        и сейчас он уже предпочитает Си++, вот из твиттера «good C++ code is better than good C code, but bad C++ can be much, much worse than bad C code.»©ID_AA_Carmack
                                                                                                                                        • +1
                                                                                                                                          там 'и' )
                                                                                                                                          я рад, надо на него подписаться ))
                                                                                                                                      • 0
                                                                                                                                        К вопросу о быстром прототипировании, и что, мол, на C++ просто программировать не умеют.

                                                                                                                                        Когда вы говорите о глупых ошибках, то на самом деле это зависит от человека пишущего код. Я написал клиента к memcache с нуля за 1 неделю, используя современный C++ стиль, и библиотека все еще используется в том месте, где я ее написал (подсказка: ищите по ключевому слову memcache++). Переписал сервер с нуля за два месяца, 1 месяц использовал для тестирования и улучшений, и это при том, что работал один — сервер может обрабатывать около 5k запросов в секунду (RPS), при этом используется не более 60% CPU и средняя нагрузка 2:1 для СPU. И мне трудно понять, почему многие испытывают сложно с++, когда мне удается делать подобные вещи.

                                                                                                                                        А на питоне вот за выходные сервер пишут, а не за 2 месяца: habrahabr.ru/blogs/python/78114/
                                                                                                                                        • +3
                                                                                                                                          При всем уважении к С++, прототипировать на Python не в пример быстрее и проще, даже если иметь в нём на порядок меньше опыта (из личных наблюдений). Да, при желании я смогу сделать это и на C++, но… зачем?
                                                                                                                                        • +2
                                                                                                                                          Тут часто путают С и С++. С это не подмножество С++. Это простой и законченный язык, на нем написаны linux, windows, интерпретаторы ruby, python и т.д. Он точно в скором времени не умрет, это как кроссплатформенный ассемблер. С++ это совсем другой язык.
                                                                                                                                          • 0
                                                                                                                                            Согласен на 100%. На сегодняшний день С и С++ — это совершенно разные языки программирования. Да, исторические корни С++ никуда не деть, но факт остаётся фактом: эти языки стандартизуются разными Комитетами и идут разными путями. Поэтому совет изучить С перед изучением С++ — это очень (ОЧЕНЬ) вредный совет.
                                                                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                            • +1
                                                                                                                                              Вернет 3, но С++ тут не причем, такое и в С можно. На самом деле тут всё просто и логично (для тех кто знает семантику С).
                                                                                                                                              • 0
                                                                                                                                                3, конечно же.
                                                                                                                                                • 0
                                                                                                                                                  Для тех кто не знает, 2[a] тоже самое что a[2].
                                                                                                                                                  • +1
                                                                                                                                                    Еще подробнее что бы это не казалось очередными граблями: 2[a] это тоже самое что *(2 + a), a[2] это *(a + 2). В данном случае a — это указатель, т.е. число, а от перестановки слагаемых сумма не меняется.
                                                                                                                                                  • –1
                                                                                                                                                    f) Segmentation fault (Stack overflow)
                                                                                                                                                    • 0
                                                                                                                                                      Так это задачка на знание С или на знание С++? :-) Уточнять нужно.
                                                                                                                                                    • 0
                                                                                                                                                      «Ерунда всё это»
                                                                                                                                                      • +6
                                                                                                                                                        Господа, спокойствие, будущее за JavaScript.