2010-01-18 16 views

Répondre

3

Je pensais en faire un pour UnrealScript, mais je rencontre des problèmes étranges comme le fait que CodeBinaryOperatorType n'inclut pas une opération exclusive-ou. Les nouvelles arborescences d'expression dans .NET 4 ressemblent à beaucoup mieux que représentation des fonctionnalités que le CodeDom devrait offrir au niveau d'un bloc (comme dans un bloc d'instructions qui compose un corps de fonction).

Je pense que nous avons besoin d'un nouveau CodeDom qui prend les parties externes de System.CodeDom et utilise les internes de System.Linq.Expressions. Ensuite, rendez le résultat capable de produire un assemblage dynamique ou un code source en sortie. (Maintenant que j'y pense, la production d'un assemblage compilé serait en fait la même chose que la création d'un nouveau "langage" pour la source de sortie.)

Editer: En plus de cela, vous devez aussi envisager de mettre en œuvre l'API CodeModel , puisque très souvent le CodeDom est implémenté car quelqu'un intègre un nouveau langage dans Visual Studio.

+4

Lors du dernier symposium Lang.NET, l'un des créateurs de la langue s'est plaint de quelque chose de similaire et l'ingénieur de Microsoft a répondu (en plaisantant à moitié): "CodeDom peut représenter n'importe quelle langue tant qu'elle est en C#". Il a essentiellement admis que CodeDom est un échec et que les arbres d'expression (ou plutôt les arbres de «déclaration») sont la voie à suivre. –

+1

@ JörgWMittag: Les arbres d'expression peuvent-ils être utilisés pour générer du code source pour une classe entière? –