Pourquoi le C ++ préfère-t-il toujours créer des applications à interface graphique lourde par rapport aux derniers langages dynamiques? [fermé]


46

Je constate que la plupart des applications à contenu graphique lourd sont généralement développées en C ++. La plupart des jeux / navigateurs sont codés en C ++.

Ne pouvons-nous pas simplement développer de meilleures applications graphiques avec les derniers langages dynamiques? Je sais que Java ne serait pas un bon choix. Mais qu'en est-il des langages comme le python qui sont nativement construits sur C? Les dernières langues ne sont-elles pas censées être meilleures que leurs ancêtres? Pourquoi devons-nous toujours préférer le vieux C ++ aux derniers langages?

Et j'aimerais aussi savoir en quoi C ++ est responsable de la meilleure vitesse de traitement de l'interface graphique? Par ailleurs, qu'est-ce qui manque aux autres dernières langues?


22
Si vous pensez que Java est un langage «dynamique», vous ne comprenez pas ce que ce mot signifie dans ce contexte.
Mike Baranczak

15
@ Mike Baranczak: C'est une longue histoire. Fondamentalement, il y avait un projet de recherche à Stanford, puis à Sun Research, appelé Self. Auto est un langage de programmation dans la famille Smalltalk qui est plus simple, plus puissant, plus expressif et surtout beaucoup plus dynamique que Smalltalk. Comme il a été conçu comme langage de programmation pour développer des systèmes entiers (comme tous les dialectes Smalltalk), y compris (mais sans s'y limiter), les applications de bureau, les serveurs, les systèmes d'exploitation, les pilotes de périphériques, lui-même, il a être extrêmement rapide. Donc, l'équipe de Self a inventé tout un tas de nouvelles ...
Jörg W Mittag Le

15
... des techniques d'optimisation, et quand le Soi VM est sorti en 1987 (et plus encore la deuxième génération en 1992), il était rapide. C'était plus rapide que n'importe quelle autre machine virtuelle Smalltalk. Le système Self était livré avec de nombreux exemples de code, et l'un de ces exemples était un interpréteur Smalltalk écrit en Self, qui était même plus rapide que toute autre machine virtuelle Smalltalk. Self était plus rapide que beaucoup d’implémentations C ++ à cette époque, et même compétitif avec C. Bien, vous l’obtenez. C'était rapide . Cependant, Sun a décidé qu’ils n’avaient pas besoin d’un langage de programmation orienté objet ni d’une machine virtuelle rapide. Ils ont donc ...
Jörg W Mittag Le

15
... Essentiellement, nous avons mis à mort le projet Self en tarissant nos fonds. Lorsque les ingénieurs de Self VM ont laissé Sun hors de frustration, ils ont été rapidement récupérés par une startup de Smalltalk appelée LongView (plus connue sous le nom de leur principal produit, un système de types statique optionnel pour Smalltalk: StrongTalk). LongView savait qu'ils ne seraient jamais en mesure de vendre du typage statique pour Smalltalk. Ils ont donc pensé préférer vendre le plus rapide Smalltalk de la planète, puis inclure StrongTalk dans le package dans une sorte de jeu de type cheval de Troie. Ils ont aussi réalisé qu’aucun de ces moments ...
Jörg W Mittag Le

15
... optimisations Soi VM a fait étaient d'une manière particulière à soi, mais étaient applicables à peu près tout langage orienté objet (ou même simplement une langue du tout ). Les ingénieurs Self VM ont donc pu travailler sur une VM Smalltalk appelée Animorphic VM. Encore une fois, la machine virtuelle Animorphic était aveuglante rapide (et est toujours, en fait, même si le code de base n'a pas été touché dans les 15 ans, il peut encore rivaliser avec haute performance moderne Smalltalks, JVMs et .NET, surtout si vous prenez en compte qu'il utilise beaucoup moins de ressources que celles-ci, puisqu'il a été conçu pour les 486 avec 20 ...
Jörg W Mittag

Réponses:


58

Je suis l'une de ces personnes qui écrivent des applications d'interface graphique C ++ (principalement pour Windows). Avec Qt, pour être précis. Mes raisons:

  • J'aime le C ++. Je suis un pigiste et généralement je peux choisir mes outils (chanceux moi!)
  • Dans un environnement géré, vous aurez peut-être de la difficulté à utiliser un code non géré (des déclarations WinAPI longues en C #, ça vous tente?)
  • Moins de dépendances plus faciles à déployer
  • Plus de contrôle sur tout.
  • RAII (vs GC). Et même si j'alloue avec new, je ne fais jamais deleterien explicitement, parce que j'utilise des pointeurs intelligents ou la QObjecthiérarchie.
  • Le C ++ est très excitant de nos jours, je suis impatient qu'un compilateur prenne pleinement en charge le nouveau standard.
  • Rapidité (uniquement à la fin de la liste. Je sais que ce n’est pas si important pour l’interface graphique elle-même, mais il a tendance à être plus rapide car les programmes C ++ ne souffrent pas de la surcharge occasionnée par les temps d’exécution, la compilation JIT de code octet et les technologies similaires. le programme.)

Comme vous pouvez le constater, ce sont surtout des préférences personnelles. Je trouve important que mon travail soit agréable et C ++ me le fournit.


11
La vitesse +1 est définitivement la principale raison, à part vos préférences personnelles. Cependant, j'aime bien "C ++ est très excitant de nos jours". Pour répondre à l' interrogateur , pas @ Tamás Szelei: Certes, l'informatique évolue rapidement avec de nouvelles idées, paradigmes, technologies, produits, mais le dernier atout n'est pas une vertu. Le C ++ existe depuis un certain temps et cela ne veut pas dire qu'il est obsolète, mais il a fait ses preuves depuis longtemps par rapport aux nouvelles technologies. Le texte original de Stroustrup (le livre de l'inventeur) est lourd, mais il y a de beaux livres par d'autres, par exemple sur oreilly.com.
therobyouknow

1
@Tarnas Je pense que "toujours sera plus rapide" est un peu étroit d'esprit / autoritaire, mais pas assez pour justifier un vote négatif ...
Max.

2
En tant que support anecdotique: J'ai participé à différents projets pour créer des interfaces graphiques de taille importante sous Windows à l'aide de C ++ et de JavaScript. J'ai également été impliqué dans différents projets de console de jeu en C ++ et JavaScript. Dans les deux cas, le nombre de problèmes de mémoire et de vitesse associés à JavaScript était nettement supérieur.
Gort the Robot

2
En retard pour le parti, mais pouvez-vous élaborer sur les "dépendances moins / facilement déployables"?
weberc2

2
J'utilise C ++ depuis plus de 20 ans. De nombreuses nouvelles fonctionnalités intéressantes ont été ajoutées depuis les versions 11, 14 et 17. Vous pouvez presque utiliser C ++ comme langage de script tout en bénéficiant de la rapidité. Lorsque je travaille avec des données BIG, je suis presque obligé d'utiliser C ++, car tout autre langage sera plus lent.
Kemin Zhou

32

Parce que la vitesse compte.

  • Les jeux utilisent le C ++ pour les tâches principales, où les performances sont importantes. Ils utilisent des langages dynamiques pour les tâches de script pour lesquelles la flexibilité est importante.

  • Applications d'interface graphique de bureau : Visual Studio, par exemple, est écrit en .NET et non en C ++ natif. Cela semble fonctionner assez bien pour un IDE, car l'IDE lui-même n'a pas à effectuer beaucoup de tâches exigeantes en performances. (Le compilateur, l'éditeur de liens et d'autres outils ne sont pas nécessairement écrits en .NET - bien que, comme le fait remarquer wawa dans un commentaire, certains semblent l'être (par exemple, VB.NET))

  • Les navigateurs doivent aussi être rapides. Après tout, ils sont en quelque sorte un système d'exploitation secondaire. D'autre part, vous pouvez affirmer que de grandes parties de Firefox sont en fait "écrites" en javascript, car la structure de Mozilla semble fortement dépendre de javascript.

Pour résumer: je ne dirais pas que le C ++ est nécessairement préféré, mais si vous avez un goulot d'étranglement, vous devez vous rapprocher du métal et ensuite vous rencontrez le C ++ (enfin, ou le C). Parfois, il sera simplement plus facile de tout faire en C ++ - un seul langage.


1
+1 Meilleure réponse: Il s’agit uniquement de la vitesse comme raison principale de l’utilisation de C ++. Même Microsoft lui-même admet que C ++ est le meilleur en termes de performances comparé à c # et à Visual Basic - voyez-le sur leurs pages Visual Studio. La portabilité est une seconde très proche - si vous utilisez des bibliothèques multi-plateformes telles que Qt. Meilleure réponse aussi parce que c'est objectif plutôt que subjectif.
therobyouknow

2
Votre deuxième point n'est pas tout à fait vrai. Le compilateur VB.NET est écrit en VB.NET et le compilateur F # est écrit en F #. Le compilateur C # n'est pas, mais d'après ce qui a été publié sur le projet Roslyn, je pense que le compilateur C # est en train d'être réécrit en C #.
Wesley Wiser

5
Le gui visuel de studio (le chrome) est écrit (à partir de vs2010) en c # et WPF. L'explorateur de solutions, le système de génération, le navigateur de code et la boîte à outils sont écrits en c # / c ++ avec winforms. Le compilateur est écrit en c ++.
Martin Beckett

Pour la plupart des applications de bureau, seuls les moteurs de rendu et de présentation (c'est-à-dire, la vue) doivent être rapides. De toute façon, le modèle n'a pas tendance à passer beaucoup de temps, et le contrôleur passe le plus clair de son temps à attendre que l'utilisateur fasse quelque chose (et peu d'utilisateurs peuvent cliquer aussi souvent que 10 fois par seconde avec une fiabilité quelconque).
Donal Fellows

@MartinBa: Je noterais que le compilateur actuel pour C # et VB (Roslyn) est écrit en C #.
jmoreno

18

Les applications graphiques que vous voyez écrites en C ++ le sont généralement pour des raisons héritées. Python (avec Qt ou Gtk) est tout à fait viable pour les applications à interface graphique, tout comme C # si vous travaillez dans une maison Windows. Lorsque vous démarrez quelque chose de nouveau, l’un ou l’autre est très préféré au C ++ en raison de l’absence de travaux de plomberie.


5
+1 le code existant est important. Il est rare de partir complètement de zéro lors du développement de nouveaux programmes

7
En quoi l'utilisation de Python avec Qt est-elle préférable à l'utilisation de C ++ avec Qt? Si je devais commencer un nouveau projet aujourd'hui, j'utiliserais encore le C ++ pour l'interface graphique. Parce que: a) c'est ce que je sais, b) ça fait bien le travail. Ce n’est pas parce que C ++ existe depuis un moment que cela ne le rend "obsolète".
TZHX

2
@TZHX: "C'est ce que je sais" est un argument viable. Sinon, ne plus avoir à s'occuper de la gestion de la mémoire est un gain de performances énorme, et cela pourrait compenser l'effort d'apprentissage de Python, même pour un seul projet. Une autre raison d'utiliser Python serait la multiplicité des plates-formes: en C ++, vous devez faire attention et prendre des mesures spéciales, alors que python est susceptible de fonctionner.
tdammers

4
Je ne vois aucun avantage à utiliser PyQt au lieu de Qt avec C ++ pour quelqu'un qui connaît le C ++.
BenjaminB

13
C ++ est susceptible de fonctionner, aussi. Avec Python, vous devez vous préoccuper de la version de python que l'utilisateur a installée ou de son regroupement. Il n'y a vraiment pas beaucoup de travail à faire "s'occuper de la mémoire" à moins que vous ne commettiez des erreurs stupides. Je pense que beaucoup de gens considèrent la "gestion de la mémoire" comme un obstacle majeur au travail en C ++ sans savoir à quel point cela fait une différence.
TZHX

16

Parce que peu importe le nombre de tests de performance. NET et les foules similaires montrent, peu importe à quel point ils se rapprochent des points de repère, l’application C ++ est finalement la meilleure. C'est plus rapide au démarrage à froid, c'est plus vif, et il y a plus de façons de l'améliorer.

Lors des phases de démarrage du projet, de nombreuses preuves ont prouvé que .NET était la voie à suivre, mais une fois choisi, il finissait toujours par devenir une lourde tâche.

De plus, C ++ est de nos jours assez sûr et facile à utiliser, en particulier avec des frameworks tels que Qt ou WTL.


2
+1: "De plus, le C ++ est de nos jours assez sûr et facile à utiliser, en particulier avec des frameworks comme Qt ..." ) il est compilé en code natif, (2) a un ensemble raisonnable de fonctionnalités (POO, modèles), (3) a de très bons frameworks comme Qt. Cela compense le fait que la langue est plutôt grande et difficile à apprendre: une fois que vous maîtrisez un sous-ensemble décent de la langue et quelques bonnes bibliothèques, vous pouvez être vraiment productif avec elle.
Giorgio

10

La plupart des moteurs de jeu sont codés en C ++. De plus, beaucoup de moteurs de navigateur sont codés en C ++. Mais l'interface graphique du navigateur est souvent codée à l'aide d'un script léger (JavaScript, Python). À l'exception notable de Source Engine, la plupart des moteurs de jeux utilisent également des langages de script (comme Lua ou Python). [pour référence: liste des jeux scriptés Lua ]

Prenez également la bibliothèque d'interface graphique C ++ populaire telle que Qt. Dans la version actuelle (4.7), il utilise QML pour l'interface graphique. QML est essentiellement JavaScript avec des liaisons Qt.

Donc, vraiment, il n'y a pas de langage C ++ vs langage dynamique, c'est mixte.


[Citation requise]. Je sais que de nombreux jeux utilisent des langages de script pour permettre aux utilisateurs de les étendre, mais pour autant que je sache, peu de jeux utilisent des langages de script pour leur fonctionnalité release-binary.
ProdigySim

1
@ProdigySim: Je connais plusieurs cas. De mémoire, World of Warcraft (Lua + XML), la série Uncharted de Naughty Dog (Lisp), la série Unreal (UnrealScript), des jeux basés sur les moteurs Torque et Unity, Dungeon Siege, NeverWinter Nights et bien d'autres. Les jeux basés sur les données deviennent la norme, l'hôte de script prenant en charge la plupart (sinon la totalité) des fonctionnalités de l'interface utilisateur et de l'état du jeu, de haut en bas.
Greyfade

@ProdigySim: même s'il est caché des utilisateurs normaux, cela ne signifie pas qu'en interne ils n'utilisent pas de moteurs de script. Les développeurs de jeux ont essentiellement deux options: créer leur propre langage de script pour les modèles ou utiliser un langage général. Lua est particulièrement utile pour les jeux, tout comme pour les systèmes temps réel.
vartec

Le moteur source utilise le langage de script Squirrel.
Cubuspl42

6

La première raison sera: habitude (ancienne)

Deuxième raison: moins de fiabilité sur les machines virtuelles, les interprètes à installer, etc.

Et il existe encore d’excellents IDE pour développer du code en C ++.


1
' encore d' excellents IDE' .. Je dirais que Visual Studio et Eclipse sont à la pointe de la technologie et le sont depuis fort longtemps.
JBRWilkinson

@ JBRWilkinson: Je n'ai pas dit que les autres langues ne les avaient pas aussi.
Roalt

6

La raison en est que vous avez beaucoup plus de contrôle sur tout ce qui se passe. Si vous deviez écrire photoshop en C #, vous auriez de sérieux problèmes de performances pour certaines tâches. Dans un langage de niveau inférieur avec plus de contrôle, vous pouvez utiliser des raccourcis, optimiser le cas échéant les tâches plus intenses. Bien entendu, cela suppose que vous utilisez C ++ dans du code non managé, pas C ++ dans .NET.

Voir ici pour un exemple rapide.


2
Adobe Lightroom, qui est essentiellement un sous-ensemble de Photoshop, est écrit en lua.
Jörg W Mittag

4
@ Jörg: et le reste est en C ++. en fait c'est probablement la meilleure combinaison disponible, C ++ pour la fondation, Lua pour le reste (bien que je préfère toujours le C sur C ++ pour les choses de bas niveau).
Javier

2
@ Javier: Oui, Lightroom est essentiellement constitué des algorithmes de manipulation d'images de Photoshop (qui sont probablement écrits principalement dans un assemblage MMX / SSE) et de SQLite3 (qui est écrit dans l'ANSI C préhistorique pour la portabilité) collés avec Lua. Adobe a également développé son propre IDE Lua, entièrement à Lua. Est-ce que quelqu'un sait quelle boîte à outils graphiques ils utilisent? AFAIR Photoshop a été créé avant la quasi-totalité des boîtes à outils modernes.
Jörg W Mittag

4
pas d'offense, mais si vous pensez que l'ANSI C est préhistorique, vous avez lu des exemples de code erronés
Javier,

6

C ++ est typé statiquement. Cela permet d’optimiser au préalable l’exécution de code en permettant à un compilateur d’adapter vos abstractions au processus système disponible sur une plate-forme donnée. Jusqu'à présent, les langages dynamiques ont besoin d'une couche logicielle supplémentaire (= l'interpréteur) qui ralentit l'accès aux ressources système.


4

La plupart des raisons citées sont techniques ou "au-dessus de la table" ... voici des raisons commerciales ou "au-dessous de la table":

distribution du code compilé vs distribution du code source. lors du développement en c / c ++, vous distribuez les fichiers binaires. si vous développez dans l’une des langues modernes, vous distribuez la source. Il est difficile de vendre l’idée d’obfuscateurs à la direction qui doit répondre aux actionnaires / investisseurs, alors ne vous inquiétez pas.

utilisateurs stupides: du moins dans l'esprit de la direction. ils ont toujours l'impression que leurs utilisateurs ont à peine le droit de double-cliquer sur un fichier "setup.exe". Si vous incluez l'installation d'un interprète dans la configuration, ils secoueront la tête d'un côté à l'autre.

anciens développeurs: la plupart des personnes expérimentées existent depuis longtemps et ne se tiennent pas à jour. ils programment en C ++ et non dans les nouveaux langages, car ils ne connaissent pas les nouveaux langages.


Je dirais que vous distribuez du code source lorsque vous publiez une application .NET. Regardez dans Visual Studio, une grande partie de l'interface est conçue avec des formulaires WPF. Certains de vos arguments sont bien sûr valables, une grande partie de la gestion actuelle étant celle des développeurs d'hier, les mauvaises nouvelles de la plupart des frameworks actuels sont peu probables à cause des modifications apportées aux ordinateurs aujourd'hui.
Ramhound

Beaucoup de personnes ayant beaucoup d'expérience ont acquis leur expérience en se tenant à jour. Ils ont tendance à ne pas apprendre de nouveaux langages chauds (comme Pascal au début des années 1980) juste parce qu'ils sont chauds, mais seulement s'ils les utilisent ou s'ils ont des idées intéressantes (Haskell, par exemple).
David Thornley

4

Je voudrais étendre la portée du problème de l'interface graphique aux logiciels censés être concurrentiels. C ++ n'impose aucune taxe sur la plate-forme cible car il concerne la puissance de traitement, le temps d'exécution installé, les infrastructures, etc. Il fonctionnera donc sur un matériel client plus limité qu'une solution similaire écrite dans un langage géré / interprété. Dans le cas d’un logiciel commercial performant, le coût de développement (potentiellement plus élevé dans le cas de C ++) est amorti par le nombre de ventes.

De plus, le C ++ offre généralement un accès direct aux apis du système (comme l'interface graphique), ce qui offre la meilleure possibilité d'optimiser l'utilisation et de se différencier des solutions similaires.


3

Je pense que cela a beaucoup à voir avec les API pour les toolkits GUI. Tous ont une API C / C ++, mais tous n’ont pas (par exemple) de liaisons Python. Et parfois, les boîtes à outils elles-mêmes ont été écrites avec C ++ à l'esprit. Même si elles prennent en charge d'autres langages, elles ne les prennent pas complètement en charge (par exemple, elles ne prendront pas en charge un tupleargument Python ).


Oh, ils ne les soutiennent pas complètement, parce qu'ils ne veulent pas ou n'ont pas le temps de mettre cela en œuvre. Pas parce que c'est impossible.
Cubuspl42

2

Vous mentionnez les navigateurs et les jeux comme exemples. Ces deux applications sont très critiques en termes de performances. Il est donc logique de les utiliser dans un langage simple pour la vitesse.

De nombreuses autres applications sont moins liées aux performances et pourraient facilement être écrites dans d'autres langues. C # en particulier semble être beaucoup utilisé. (Et Obj-C, mais ça ne se qualifie pas vraiment comme étant de haut niveau, je suppose. Mieux que C ++ cependant.)

Cependant, il existe un certain manque de cadres pour les derniers langages de programmation. Par exemple, il n’existe pas vraiment de bibliothèque d’interface graphique native viable pour Python. Bien sûr, vous pouvez utiliser PyQt ou PyGtk et ils fonctionnent bien, mais en fin de compte, il ne s’agit plus que d’une interface avec le code C. Encore une fois, C # (et sans doute Obj-C) semble être l'exception et peut-être que MacRuby ou IronPython pourraient changer ce jeu.


0

Pour remplacer un langage C ++ ou Java par un langage, il doit faire ce qui manque cruellement à ces langages, en plus de les exécuter à leur propre avantage. En outre, d’énormes investissements ont été investis dans ces langues. Cela signifie qu'il existe une bibliothèque standard C ++ sur de nombreuses plates-formes, que les navigateurs, les jeux et de tels programmes peuvent facilement utiliser. Il y a donc forcément une certaine inertie. Les langues ont tendance à décoller lentement contrairement aux autres logiciels.

Si vous le regardez, Anaconda (le programme d’installation de RedHat) existe depuis une dizaine d’années, écrit en Python depuis le début. Python n'était pas aussi populaire quand Anaconda était nouveau.

Google Go (golang.org) évolue très rapidement. Le compilateur n'a pas encore été démarré. Pour que sa popularité décolle, sa bibliothèque doit se stabiliser, le compilateur doit être démarré et plus de personnes doivent l’utiliser. J'ai entendu dire qu'un programme de production en dehors de Google était écrit en Go et qu'il n'aurait eu aucun temps d'arrêt dans sa vie d'un peu plus d'un an.


1
En fait, il existe un compilateur commercial Go pour Windows qui est écrit en Go. Il existe donc un compilateur démarré pour Go. (Cependant, la bêta est fermée.)
Jörg W Mittag Le

Oh, j'étais hors de contact, alors. Merci d'avoir dit :)
vpit3833

2
Il s'appelle erGo et est produit par une société appelée Newquist Solutions .
Jörg W Mittag
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.