Tout d'abord, le large éventail de langages de la plate-forme .NET contient sans aucun doute des langages qui génèrent du code avec des performances différentes, de sorte que tous les langages ne sont pas également performants. Ils compilent tous dans le même langage intermédiaire (IL), mais le code généré peut être différent, certains langages peuvent s'appuyer sur Reflection ou le Dynamic Language Runtime (DLR), etc.
Cependant, il est vrai que la BCL (et les autres bibliothèques utilisées par les langages) auront les mêmes performances quel que soit le langage à partir duquel vous les appelez. Cela signifie que si vous utilisez une bibliothèque qui effectue des calculs coûteux ou un rendu sans faire vous-même des calculs complexes, le langage dans lequel vous l'appelez n'a pas vraiment d'importance.
Je pense que la meilleure façon d'aborder le problème n'est pas de penser aux langages, mais aux différentes fonctionnalités et styles de programmation disponibles dans ces langages. Voici une liste de quelques-unes d'entre elles :
-
Code non sécurisé : Vous pouvez utiliser du code non sécurisé en C++/CLI et, dans une certaine mesure, également en C#. C'est probablement la manière la plus efficace d'écrire certaines opérations, mais vous perdez certaines garanties de sécurité.
-
Impératif, typage statique : C'est le style de programmation habituel en C# et VB.Net, mais vous pouvez également utiliser le style impératif de F#. Notamment, de nombreuses fonctions récursives sont compilées en code IL impératif et statiquement typé, ce qui s'applique également à certaines fonctions F#.
-
typée statiquement, fonctionnelle : Ceci est utilisé par la plupart des programmes F#. Le code généré est largement différent de ce que impératif mais elle est toujours typée statiquement, ce qui n'entraîne pas de perte de performance significative. Comparaison de impératif y fonctionnel est quelque peu difficile car l'implémentation optimale semble très différente dans les deux versions.
-
Typage dynamique : Des langages comme IronPython et IronRuby utilisent un runtime de langage dynamique, qui met en œuvre des appels de méthodes dynamiques, etc. C'est un peu plus lent que le code statiquement typé (mais le DLR est optimisé à bien des égards). Notez que le code écrit en utilisant C# 4.0 dynamic
entre également dans cette catégorie.
Il existe de nombreuses autres langues qui n'entrent dans aucune de ces catégories, mais je pense que la liste ci-dessus couvre la plupart des cas courants (et certainement tous les langages Microsoft).