Cette question et ma réponse originale à cette question ont d'abord été écrit près de trois ans. Depuis ce temps, j'ai été surpris de recevoir un plus ou moins constant flux de voix, à la fois en haut et en bas, même jusqu'à aujourd'hui. Je pensais que maintenant serait un bon moment pour revoir cette réponse. Je vais laisser l'original vers le bas ci-dessous à titre de référence.
La question de la langue qui est la plus rapide est maintenant largement discutable. Ils peuvent à la fois me fait pour être extrêmement rapide. Le même était vrai il y a trois ans, mais ma réponse a été délibérément n'est pas centrée sur une étude technique des deux langues et la façon dont leurs différences d'incidence sur les performances. Mon accent était mis sur les personnes qui utilisent ces langues, et la ligne de fond est:est-ce
Le facteur le plus important dans la détermination de la vitesse et de l'efficacité du programme n'est pas le langage utilisé pour programmer, mais les gens derrière les claviers.
Dans sa réponse, @Jon Harrop explique le succès qu'il avait re la mise en œuvre d'un système d'héritage dans un GC ed .NET de la langue. Je n'ai pas de litige ou de doute de son expertise en la matière. J'ai, Comme lui, je suis aussi employées dans les services financiers de l'arène et ont été pour aller sur 20 ans. Pendant ce temps, j'ai vu beaucoup de systèmes différents-allant de la qualité de fantastique horribles. Je suis une C++ guy -- c'est ce que je fais pour vivre. Je sais aussi F#, C#, VB, Ruby, Perl, assembleur et probablement 30 autres langues. Mais mon expertise dans ces langues ne sont pas de mes compétences en C++. Si je devais écrire ce que Jon a écrit en F#, son code écraser le mien, pas de doute dans mon esprit.
Est-ce à dire F# est plus rapide que le C++? Pas de. Ce que cela signifie, c'est la personne derrière le F# du clavier (Jon) est mieux que moi. Je n'ai aucun doute à ce sujet.
Dans le trading à haute fréquence (mon secteur d'activité), la vitesse est roi. On mesure la latence dans ces courts intervalles que la vitesse à laquelle un signal électrique qui se déplace sur un câble réseau est une partie de l'équation. Il y a un certain nombre de centres de données où c'est considéré comme si important qu'ils aient des bobines de câble supplémentaire d'aller à chaque cage de sorte que chaque ordinateur du contrôleur de domaine a la même longueur connectés, afin d'éliminer tout avantage de la proximité dans le centre de données. Chaque composant et de la ligne de questions de code. Dans un environnement comme celui-ci, même de 1 milli c'est une éternité. Vous pourriez aussi bien aller pour le déjeuner. A titre indicatif, nos normes en matière de rendement est de 10 micros à partir du moment où un message vient de l'échange à la fois, il a été entièrement transformé et le client message envoyé sur le message sortant du bus. 10 micros est juste le plafond absolu de performance acceptable. La moyenne est plus proche de 2 à 5 micros. Cela inclut tous les calculs, la valeur ajoute de la base de données et mises à jour. Et nos systèmes sont écrits en 100% C++.
Est-ce à dire C++ est plus rapide que F#? Pas de. Ce que cela signifie, c'est que nos systèmes sont un produit mûr qui a été développé par des experts dans le domaine (à grands frais) sur plusieurs années. Comme la technologie évolue, notre code de changements pour obtenir de nouveaux avantages. Bien que notre produit est parmi les meilleurs dans l'industrie, d'autres produits concurrents écrits dans d'autres langues ont des performances similaires. Ce n'est pas la langue qui compte le plus, c'est le peuple en l'utilisant. Si j'étais aussi bon en C# F# que je suis sur le C++, j'aimerais être écrit en C# et F#.
Originale dans ma réponse ci-dessous, j'ai essayé de me concentrer sur les différences entre les programmeurs qui utilisent une langue, plutôt que la langue elle-même. L'important n'est pas la langue, mais les gens, leur expertise, les questions qu'ils posent, et leur expérience. Ce n'est pas la meilleure réponse que j'ai jamais donné, mais il a attiré beaucoup d'attention. Ce n'est pas exactement ce que j'allais écrire aujourd'hui, mais je vais laisser reposer inédite de référence.
Je suis sûr que cela va obtenir downvoted une centaine de fois, mais j'ai juste à dire:
Alors, quel est l'effet NET de il lorsque l'on compare C++ et C#, puisque les deux objets doivent encore être supprimés?
De mon point de vue (et c'est un admis coup de gueule) l'effet net est que certains (beaucoup?) C#, programmeurs ne comprends pas vraiment ce que leurs programmes, et de sorte que leur logiciel n'est pas très bon.
L'attitude/la croyance que:
nous n'avons pas vraiment se soucier de la durée de vie d'un objet et quand il l'ont supprimé
...semble imprégner le C#/Java/VB/[insérer "facile" de la langue ici] la culture. Je suis allé une fois à une MS-parrainé présentation de Chicago, où Don Box a parlé de la nouvelle .NET des langues et de la plateforme. À un moment, il s'est adressé à toutes les personnes dans le public qui ont été "malade et fatigué de le C++ les gars jubilation" à quelle vitesse C++ a été comparée à celle d'autres langues de l'époque. "Maintenant, je vais vous le prouver une fois pour toutes qu'ils sont mauvais," dit-il. Alors procédé pour créer 2 programmes. Dans le programme C#, il a créé une boucle qui instancié 10 millions de chaînes, et il a mis un point d'arrêt juste après la boucle. Dans la version C++, il a alloué et libéré le même nombre de chaînes à l'aide d' new
et delete
et définir un point d'arrêt à l'accolade de fermeture pour main
. A couru le programme. la version C# du point d'arrêt frappé beaucoup plus tôt que la version C++, et la foule était en délire.
Les moutons dans cette foule n'a pas pris la peine de se demander pourquoi la version C# a été plus rapide, si oui ou non les 2 programmes vraiment fait la même chose, ou de demander à voir l'onglet Performances du Gestionnaire des Tâches. J'ai demandé à le voir. Ne ne serait pas me laisser, et "accusé" d'être un C++ mec. Rapidement fermé deux de ses programmes et déplacé dans le sujet suivant.
Le GC ed langues vous protéger de ce qui se passe réellement dans votre machine. Pour écrire un programme de fonctionnement, vous n'avez pas vraiment besoin de connaître la différence entre les pointeurs en C++ et la collecte des ordures en C#. C'est comme la formation d'un mécanicien de voiture seulement comment utiliser le plug-in outils de diagnostic, mais pas de lui enseigner comment un moteur à combustion interne en fait des œuvres.
Ainsi, le résultat net? Demandez-moi et je vais vous dire les programmes ne sont pas aussi bon.
Je blâme le système universitaire autant que rien d'autre, mais c'est une histoire pour un autre jour.
OK, coup de gueule. Laisser le feu de commencer.