Я вижу, что большинство приложений, которые содержат тяжелый GUI-контент, обычно разрабатываются на C ++. Большинство игр / браузеров написаны на C ++.
Разве мы не можем просто разработать лучшие приложения с графическим интерфейсом на основе новейших динамических языков? Я знаю, что Java не будет отличным выбором. Но как насчет таких языков, как python, которые изначально созданы на C? Разве последние языки не должны быть лучше, чем их предки? Почему мы все еще должны отдавать предпочтение старому С ++ над последними языками?
И я также хотел бы знать, что отвечает за C ++ за лучшую скорость обработки GUI? С другой стороны, чего не хватает другим новейшим языкам?
programming-languages
c++
Вамси Эмани
источник
источник
Ответы:
Я один из тех, кто пишет приложения для C ++ GUI (в основном для Windows). С Qt, если быть точным. Мои причины:
new
, я редко когда-либоdelete
что-либо явно, потому что я использую умные указатели илиQObject
иерархию.Как видите, это в основном личные предпочтения. Я считаю важным, чтобы моя работа была приятной, и C ++ предоставляет мне это.
источник
Потому что скорость имеет значение.
Игры используют C ++ для основных задач, где важна производительность. Они используют динамические языки для задач сценариев, где важна гибкость.
Настольные приложения с графическим интерфейсом : Visual Studio, например, написан на .NET, а не на собственном C ++. Похоже, что он отлично работает для IDE, так как сама IDE не должна выполнять много задач, требующих высокой производительности. (Компилятор, компоновщик и другие инструменты не обязательно написаны на .NET - хотя, как указывает wawa в комментарии, некоторые, похоже, (например, VB.NET))
Браузеры тоже должны быть быстрыми. Ведь они как бы второстепенные ОС. С другой стороны, вы можете утверждать, что большие части Firefox фактически «написаны» на javascript, поскольку среда Mozilla, кажется, сильно зависит от javascript.
Подводя итог: я бы не сказал, что C ++ обязательно предпочтительнее, но если у вас есть узкое место в производительности, вам нужно подойти ближе к металлу, а затем вы встретите C ++ (ну, или C). Иногда будет проще сделать все на C ++ - на одном языке.
источник
Приложения с графическим интерфейсом, которые вы видите написанными на C ++, обычно делаются по устаревшим причинам. Python (с Qt или Gtk) очень жизнеспособен для приложений с графическим интерфейсом, как и C #, если вы работаете в Windows. При запуске чего-то нового, любой из них очень предпочтителен для C ++ из-за отсутствия необходимой сантехнической работы.
источник
Потому что независимо от того, сколько тестов производительности показывают .NET и тому подобное, независимо от того, насколько они близки в тестах, в конце концов, приложение C ++ выходит на первое место. Это быстрее при холодной загрузке, это быстрее, и есть больше способов, которые можно улучшить.
На начальных этапах проекта я слышал многочисленные доказательства того, что .NET - это путь, но как только он был выбран, они всегда оказывались тяжелым препятствием.
Кроме того, C ++ в настоящее время довольно безопасен и довольно прост в использовании, особенно с такими фреймворками, как Qt или WTL.
источник
Большинство игровых движков написаны на C ++. Также многие браузерные движки написаны на C ++. Но графический интерфейс браузера часто кодируется с использованием некоторого облегченного скрипта (JavaScript, Python). За исключением заметного Source Engine, большинство игровых движков также используют скриптовые языки (например, Lua или Python). [для справки: список игр со скриптами Lua ]
Также возьмите популярную библиотеку C ++ GUI, такую как Qt. В текущей версии (4.7) он использует QML для GUI. QML - это в основном JavaScript с привязками Qt.
Так что на самом деле нет C ++ против динамических языков, это смешано.
источник
Первая причина будет: (старая) привычка
Вторая причина: меньшая надежность на виртуальных машинах, интерпретаторы, которые должны быть установлены, и т. Д.
И еще есть несколько отличных IDE для разработки кода на C ++.
источник
Причина в том, что у вас гораздо больше контроля над всем, что происходит. Если вы собираетесь писать фотошоп на C #, у вас будут серьезные проблемы с производительностью для некоторых задач. На более низком уровне языка с большим контролем вы можете использовать ярлыки, оптимизировать, где это необходимо, для более интенсивных задач. Конечно, это предполагает, что вы используете C ++ в неуправляемом коде, а не C ++ в .NET.
Смотрите здесь для быстрого примера.
источник
C ++ статически типизирован. Это позволяет заранее оптимизировать выполнение кода, если компилятор подгонит ваши абстракции к доступным системным процессам на данной платформе. До сих пор динамическим языкам нужен дополнительный программный уровень (= интерпретатор), который замедляет доступ к системным ресурсам.
источник
Большинство приведенных причин являются техническими или «над таблицей» ... вот причины бизнеса или «под таблицей»:
распространение скомпилированного кода против распространения исходного кода. при разработке на c / c ++ вы распространяете двоичные файлы. если вы разрабатываете на одном из современных языков, вы распространяете источник. трудно продать идею обфускаторов руководству, которое должно отвечать акционерам / инвесторам, поэтому не беспокойтесь.
тупые пользователи: по крайней мере, в головах руководства. они по-прежнему считают, что их пользователи едва ли могут дважды щелкнуть «setup.exe». Если вы включите установку переводчика как часть установки, они будут качать головами из стороны в сторону.
старые разработчики: большинство людей с опытом уже давно и не обновляют себя. они программируют на C ++, а не на новых языках, потому что они не знают новых языков.
источник
Я бы расширил сферу проблемы от GUI до программного обеспечения, которое, как ожидается, будет конкурентоспособным. C ++ не облагается налогом на целевую платформу, поскольку он касается вычислительной мощности, установленного времени выполнения, сред и т. Д. Таким образом, он будет работать на более ограниченном клиентском оборудовании, чем аналогичное решение, написанное на управляемом / интерпретируемом языке. В случае успешного коммерческого программного обеспечения стоимость разработки (потенциально выше в случае C ++) амортизируется количеством продаж.
Кроме того, C ++ обычно предлагает прямой доступ к системному API (например, GUI), что дает лучшую возможность оптимизировать использование и дифференцировать себя от аналогичных решений.
источник
Я думаю, что многое из этого связано с API для GUI-инструментариев. Все они имеют C / C ++ API, но не все имеют (скажем) привязки Python. И иногда сами наборы инструментов были написаны с учетом C ++, поэтому даже если они поддерживают другие языки, они не поддерживают их полностью (например, они не поддерживают Python
tuple
в качестве аргумента).источник
Вы упоминаете браузеры и игры в качестве примеров. Оба эти приложения очень важны для производительности, поэтому иметь их на низкоуровневом языке для скорости имеет смысл.
Многие другие приложения менее привязаны к производительности и могут быть легко написаны на других языках. C #, в частности, кажется, часто используется. (И Obj-C, но на самом деле он не считается высокоуровневым. Хотя лучше, чем C ++.)
Тем не менее, существует определенное отсутствие рамок для последних языков программирования. Например, на самом деле нет жизнеспособной библиотеки GUI для Python. Конечно, вы можете использовать PyQt или PyGtk, и они работают хорошо, но, в конце концов, это снова только взаимодействие с кодом C. Опять же, C # (и, возможно, Obj-C) кажется исключением, и, возможно, MacRuby или IronPython могут изменить эту игру.
источник
Чтобы язык заменил C ++ или Java, он должен делать то, чего очень не хватает в этих языках, кроме того, что он выполняет их в своих силах. Кроме того, огромные инвестиции пошли в эти языки. Это означает, что на многих платформах есть стандартная библиотека C ++, которую браузеры, игры и такие программы могут легко использовать. Так что неизбежно будет некоторая инерция. Языки имеют тенденцию медленно развиваться в отличие от других программ.
Если вы посмотрите на это, Anaconda (программа установки RedHat) существует уже около 10 лет, написана на Python с самого начала. Python не был так популярен, когда Анаконда была новичком.
Google Go (golang.org) развивается очень быстро. Компилятор еще не загружен. Чтобы его популярность снизилась, его библиотека должна стабилизироваться, компилятор должен быть загружен, и все больше людей должны использовать его. Я слышал, что одна производственная программа за пределами Google написана на Go, и, как сообщается, у нее еще не было простоев в течение чуть более года.
источник