Существую ли на _данный_ момент области применения C++, в которых он однозначно лидер и ему нет адекватной замены? Вот такой простой вопрос, прошу не флеймить и отвечать по существу.
Поддержка и доработка существующих проектов на С++ / проекты сильно завязанные на либы на С++ которым нет альтернативы на С. Все таки взаимодействие с либами на С++ из других языков заметно сложнее, чем с либами на С.
Сформулирую вопрос иначе: область, в которой его удобно применять и в данный момент нет языков/платформ, которые были бы удобнее (эффективность, скорость разработки, простота поддержки) для этой области. Как-то так.
> Сформулирую вопрос иначе: область, в которой его удобно применять и в данный момент нет языков/платформ, которые были бы удобнее (эффективность, скорость разработки, простота поддержки) для этой области. Как-то так.
"удобнее" - это очень широкое и сугубо субъективное понятие. отталкиваться от него мягко говоря неконструктивно. что удобнее одному в одной ситуации может быть неудобно другому в другой. с такими предпосылками конструктива не будет, в лучшем случае лёгкий флейм уже на тысячный раз.
> Ну я же вроде дал довольно четкое определение удобства -- (эффективность выполнения х скорость разработки х простота поддержки).
эффективность - понятие широкое. что конкретно под ним понимается?
скорость же разработки и простота поддержки в первую очередь зависят не от языка но от конкретной группы разработчиков и поддержки и от того, на сколько они владеют выбранным инструментом и понимают проект.
> эффективность - понятие широкое. что конкретно под ним понимается?
"эффективность выполнения", скорость выполнения программы.
> скорость же разработки и простота поддержки в первую очередь зависят не от языка но от конкретной группы разработчиков и поддержки и от того, на сколько они владеют выбранным инструментом и понимают проект.
Это так, но лишь отчасти, т.е. при условии что есть две одинаково компетентной группы разработчиков, одна из них сможет выполнить выполнить проект быстрее, другая медленнее, поддежка одного проекта будет легче, а другого сложнее. Вот в том же ц++, на сколько я знаю, полностью абстрагироваться от низкоуровневых деталей нельзя.
> "эффективность выполнения", скорость выполнения программы.
сама по себе абсолютная скорость выполнения программы мало кого интересует. она или соответствует требованиям или нет. да, скорее всего, грамотно написанное ПО на C++ может работать существенно быстрее, чем, скажем, на питоне. но если обе реализации тем не менее устраивают, то скорость выполнения уже не важна.
> Ни в коем случает. Ибо потом их можно будет использовать только из C++ (или писать _очень_ геморойную прослойку). Тут (ИМХО) рулит чистый C.
биндинги Qt к python и java существуют и вполне нормально работают. что там происходит внутри и на сколько это было геморойно сделать авторам - вопрос мало интересный. они или есть и устраивают или же их нет.
> это как раз очень важно и рассматривать вопрос в отрыве от реальной жизни - это вам на поля к сферическим коням в вакууме.
Дело в том что если принимать это во внимание, то есть только три-четыре языка C, Java, C++ и C#. Для выполнения проекта не нужны тысячи, нужно достаточное кол-во, а оно в разных ситуациях разное.
>биндинги Qt к python и java существуют и вполне нормально работают. что там происходит внутри и на сколько это было геморойно сделать авторам - вопрос мало интересный. они или есть и устраивают или же их нет.
Исключения только подтверждают правила. Сравните количество биндингов к Qt и к Tk (или GTK). Чувствуете разницу?
> Исключения только подтверждают правила. Сравните количество биндингов к Qt и к Tk (или GTK). Чувствуете разницу?
количество не означает качество. Qt биндится к мейнстриму и этого более чем. биндинги gtk, к примеру, к D интересуют лишь чрезвычайно малочисленную группу людей которой можно спокойно пренебречь.
Никогда не понимал, что такого особенного в этих игрушках, что их только на C++ можно писать. Объясните, please. Или дело только в том, что программистов, знающих другие языки, в этой области нет?
Что игрушки пишутся на плюсах - это миф. Quake например на чистом С написан. А еще там свой скриптовый язык QuakeC. И вообще на С/С++ пишется только движок - логика и скрипты пишутся на чем то другом Lua/Python etc. А ресурсы и контент рисуются в соответствующих редакторах. Никто не пишет серьезные игры целиком на С++.
Не шлангуйте, пожалуйста. Количество говорит о лёгкости этой операции. И изначально речь шла о пригодности C++ для написания библиотек виджетов. В качестве аргумента непригодности я предложил "сложность написания биндингов к языкам, отличным от C++". Вы считаете что биндинги не нужны? Или что для библиотеки на C++ их писать не сложнее, чем для библиотеки на C?
>Qt биндится к мейнстриму и этого более чем.
Если Вы уже заговорили о мейнстриме -- покажите биндинги Qt к C# (.NET/Mono). Тот же Tk или Gtk можно без проблем привязать.
Это например мощные контроллеры с выводом графикой. На С горбатиться уже будет лень, для скриптов еще не так просторно по ресурсам, а С++ будет вполне себе.
> И вообще на С/С++ пишется только движок - логика и скрипты пишутся на чем то другом
Это понятно. Я как раз про core и говорю. Я помню, как писал свой движок по какой-то книге ("3D engine architecture" или что-то такое), только на Аде вместо C++. Первые 30% книги я вообще мог пропустить, так как там изобреталось то, что у меня и так уже было. Так уж C++ применим и необходим в этой области?
> Или дело только в том, что программистов, знающих другие языки, в этой области нет?
Есть, просто вопреки мнению klalafuda - нифига не бабластая эта область. Хреново там прогерам живется.
Кстати несмотря на то что quake а точнее id tech engine написан на С, Id tech 4 (Doom 3 / Quake 4) Кармак полностью перетащил на плюсы. Вот такая вот жопочка. Хотя имхо сильно зря - id шные творения всегда отличались красявостью и низкой требовательностью к ресурсам.
А С++ набрал у них популярность ввиду-того что большинство двигла написано на С++, и лишь редкие конторы пишут свои движки - в основном, покупают готовые с SDK. Ну lua там еще под сценарные скрипты применяется (а так вроде все). Если сильно в gamedev хочешь - сходи на gamedev.ru. Там тебе дадут краткое резюме на must have в этой области.
Первая и главная область применения - поддежка существующего C++-кода и использование существующих C++-библиотек. Именно в этой области языку и обеспеченно бессмертие (как и бесконечный источник дохода для тех, кто им владеет).
> почему, кстати? более чем навороченная и денежная индустрия.
Денежная? Да. Для издателей. А программахерам там всегда платили крохи, и всегда будут платить очень мало, туда в основном энтузиасты идут, им можно и не платить.
Для новых проектов C++ разумно использовать в числодробительных задачах сводящихся к высокоуровневым абстракциям (нейронные сети, генетические алгоритмы и т. п.)
Не разумно. Для таких задач разумно использовать настоящий высокоуровневый язык (например, Mathematica), из которого генерить код на языке эффективном (Фортран или plain C). Для этих задач C++ абсолютно неуместен, поскольку абстракции там даются только ценой производительности.
> Для новых проектов C++ разумно использовать в числодробительных задачах сводящихся к высокоуровневым абстракциям (нейронные сети, генетические алгоритмы и т. п.)
В подобных задачах, возможно, новые проекты начинать на инструментах у которых неплохо с распараллеливанием, в т. ч. и автоматическим, erlang (у которого сейчас все неплохо), haskell, у которого в будущем большие перспективы именно с автоматическим распараллеливанием. Даи и сложные алгоритмы на том же хаскеле несравнимо легче реализовывать, чем на ц++.
Это если херовая абстракция. А попробуй хотя бы те же матрицы реализовать ЭФФЕКТИВНО, так, чтобы и код высокоабстрактным был, и производительностью платить не приходилось.