114 votes

Roslyn Microsoft vs CodeDom

À partir d'un communiqué de presse , hier, sur InfoWorld concernant le nouveau Microsoft Roslyn:

L'avantage le plus évident de ce genre de "déconstruction" du compilateur est elle permet à l'ensemble de la compilation d'exécution de processus pour être appelée à partir de sein de .Net applications. Hejlsberg démontré un programme C# que passé quelques extraits de code pour le compilateur C# comme des chaînes de caractères; le compilateur renvoyé l'résultant de IL code assembleur comme un objet, qui a ensuite été passé à la CLR (Common Language Runtime) pour l'exécution. Voilà! Avec Roslyn, C# gains d'un langage dynamique est la capacité à générer et à invoquer code lors de l'exécution.

J'ai été capable de le faire depuis la sortie de la .NET 4 avec CSharpCodeProvider.CompileAssemblyFromSource qui j'en fait une utilisation dans un ASP.Net projet écrit il ya quelque temps qui est exactement ce que fait - permet à l'utilisateur de taper le code dans une zone de texte, choisissez des assemblages/espaces de noms de référence, puis exécuter et afficher le résultat de ce code à la volée pour vivre le code de l'environnement de test sur Windows Azure.

Est - CodeDom partie de / un précurseur à Roslyn? Quel est l'avantage particulier de Roslyn plus de CodeDom?

247voto

Dustin Campbell Points 6323

Disclaimer: je travaille pour Microsoft sur le Roslyn équipe.

CodeDom est un précurseur de Roslyn, mais n'est que partiellement lié. Essentiellement, CodeDom est un moyen simple et (un peu), langage de façon agnostique pour générer du code qui a été ajouté .NET 1.0 à l'appui de designers (à la WinForms). Parce que CodeDom eu une tentative de fournir un modèle unifié qui peut générer du code en C#, VB, et d'autres langues, il n'a pas la haute fidélité avec l'une des langues prises en charge (c'est pourquoi vous ne pouvez pas créer une instruction switch avec CodeDom). CSharpCodeProvider.CompileAssemblyFromSource est tout simplement un wrapper autour de l'exécution de csc.exe.

Roslyn est un tout autre animal. C'est une réécriture à la fois le C# et VB compilateurs à partir du sol à l'aide de code managé -- C# C# et VB en VB (les versions de csc.exe et vbc.exe ce navire d'aujourd'hui sont écrits en code natif). L'avantage de la construction dans le code managé est que les utilisateurs peuvent faire référence à la véritable compilateurs comme les bibliothèques .NET applications (pas de wrappers).

Lors de la construction de chaque composante du compilateur pipeline, nous avons mis en lumière des Api publiques sur le dessus:

  • Parser -> Arbre de Syntaxe API
  • La Table des symboles/Importation de Métadonnées -> Symbole de l'API
  • Binder -> Liaison et d'Analyse des Flux d'Api
  • IL Émetteur -> Émettent des API

Roslyn peut être utilisé comme un système sophistiqué de C# et VB générateur de code source, mais c'est là que la ressemblance de CodeDom se termine. Le Compilateur Roslyn Api peuvent être utilisées pour analyser le code, effectuer l'analyse sémantique, de compiler et d'évaluer dynamiquement le code, etc.

Outre les compilateurs, les Roslyn équipe est également à la reconstruction de l'Visual Studio C# et VB IDE fonctionnalités sur le dessus du public compilateur Api. Ainsi, le compilateur Api sont assez riches pour construire le Visual Studio outils de conception, comme IntelliSense et la Méthode d'extraction de refactoring. Aussi, sur les couches au-dessus du compilateur Roslyn offre des services de niveau supérieur d'analyse ou de transformation de données. Par exemple, il y a des services pour la mise en forme du code en utilisant le C# et VB règles de mise en forme, ou de trouver toutes les références à un symbole particulier au sein d'une solution.

Vraiment, il n'y pas qu' une prestation spéciale de Roslyn sur CodeDom. Où CodeDom rempli très spécifique de génération de code de besoin, Roslyn est s'attaquer à l'ensemble de la langue de l'outillage de l'espace en fournissant un cadre de référence pour vous permettre de construire n'importe quelle sorte de C# ou VB outil de langue que vous pouvez penser.

43voto

Reed Copsey Points 315315

CodeDom vous permet de compilation, mais ne vous donne pas la possibilité de vraiment obtenir de l'information sur le code lui-même (autres que les erreurs du compilateur). En gros, c'est une boîte noire, où vous dites: "compiler" et il dit "j'ai réussi" ou "je n'ai pas réussi, voici quelques erreurs".

Roslyn permet de les inspecter et de construire le code à la volée. Cela inclut des choses comme être en mesure de voir et inspecter les commentaires dans un morceau de code source, des informations détaillées sur la structure complète, etc. Vous pouvez aller à travers et obtenir l'ensemble de l'arbre syntaxique de la source que vous passer dans Roslyn, et de faire une analyse détaillée ou de transformations.

Compte tenu de la pleine, riche d'informations sur la syntaxe, vous avez une énorme quantité supplémentaire de contrôle et de flexibilité. C'est ainsi que, par exemple, l'échantillon des œuvres qui copie un bloc de code C# et colle comme VB.Net code. Avec Roslyn, vous pouvez faire plus que simplement de la compilation, vous pouvez aussi manipuler le code lui-même proprement. Cela doit faire beaucoup d'outillage beaucoup plus simple à produire, puisque les choses comme les refactorings peut être fait très simplement comme l'outillage comprend la syntaxe complète, y compris les méta-informations (comme les commentaires), et peut travailler directement avec elle.

12voto

Simon Mourier Points 49585

Une grande différence que je vois: avec CodeDom, chaque fois que vous compilez en C# ou VB.NET il se passe en dehors du processus. CSC.exe ou VBC.exe sont les vrais travailleurs derrière la scène.

Si vous voulez construire un service, en termes d'architecture, de l'évolutivité, de l'isolation, etc. (vous mentionnez Azure), ce n'est pas très bonne.

Avec Roslyn c'est dans le processus.

Je suppose que c'est l'un de la raison pour laquelle ils l'appellent "Compilateur comme un service".

Aussi, CodeDom est relativement pauvre API, manque beaucoup de fonctionnalités, et n'est pas vraiment à jour, car il a été conçu principalement à la charge de Visual Studio concepteurs d'INTERFACE de génération automatique de code. Je pense que Roslyn va faire beaucoup mieux que ce qui est écrit par les gars qui écrivent les compilateurs. J'espère que cela va faire la différence.

PS: Une différence notable CSC.exe et VBC.exe: Roslyn semble être pur .NET (et utilise la CCI).

8voto

Yahia Points 49011

Roslyn permet beaucoup plus de contrôle de l'ensemble du processus - par exemple, vous pouvez analyser la chaîne et même de générer un code supplémentaire (à la volée dans le processus de compilation basé sur l'analyse) etc.

CodeDom est "juste en utilisant le compilateur" alors que Roslyn est "compilateur en tant que service avec un accès complet à la (sous-) sections"... avec Roslyn vous êtes "à l'intérieur du compilateur" et qui permet de voir à quoi ressemble le code à partir d'un compilateur point de vue vous permettant de changer les choses d'une manière pas possible actuellement.

Par exemple, vous pouvez utiliser Roslyn d'étendre C# - quelque chose de très pratique et beaucoup mieux que l'état actuel de la mise en œuvre de l'AOP.

Pour un aperçu des Roslyn etat et les différents niveaux d'accès et de contrôle qu'il fournit à voir http://msdn.microsoft.com/en-us/hh500769

Mise à JOUR

MS vient de faire un nouveau CTP disponible avec des fonctionnalités supplémentaires et beaucoup de changements de l'API/ajouts. Pour les détails, voir ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X