C# Interprète (sans compilation)
Est-il prêt à utiliser C# interprète là, c'est de ne pas se prévaloir de l'exécution de la compilation?
Mes besoins sont :
- Un moteur de script
- Doit Gérer la syntaxe C#
- Devons travailler sur le moyen-environnements de confiance
- Ne devez pas utiliser la compilation d'exécution (CodeDomProvider ...)
- Open source (ou au moins gratuit à la fois pour une utilisation personnelle et professionnelle)
Si ce n'est pas clair, j'ai besoin de quelque chose comme Jint (http://jint.codeplex.com/), mais qui me permet d'écrire en C# les scripts au lieu de JavaScript ceux.
Merci pour votre aide.
- Pouvez-vous expliquer pourquoi vous avez besoin de la syntaxe C# sans compilation d'exécution? En raison de la façon dont le langage C# est spécifié, et la façon dont le CLR types primitifs sont mis en œuvre, je ne crois pas que ce que vous demandez est encore possible. Mais ma conjecture est que vous n'avez pas vraiment besoin du langage C# pour ce que vous essayez de faire.
- 1) la compilation d'exécution impliquent assemblée génération qui requiert une confiance totale en mode, je suis en train de travailler sur un support de confiance asp.net de l'environnement. 2) Dans certains cas particulier, j'ai besoin d'évaluer 10000+ petits scripts qui sont toutes différentes, la compilation de tous serait juste ralentir considérablement et en utilisant assembly cache serait inutile et serait rapidement tuer mon pool d'applications.
- ... 3) je ne veux pas écrire quoi que ce soit d'autre que du C# :p
- A C# en cours d'exécution dans le DLR serait intéressant.
- Ne travail de réflexion sur le moyen-environnements de confiance?
- Serait-il travailler pour l'utilisation ScriptSharp à compiler en JavaScript pour Jint? Où sont ces 10000 scripts en venir? Je suis encore un peu confus au sujet de ce que vous faites.
- Les 10000 scripts pourraient venir à partir d'un moteur de template, qui permettrait de générer csharp code mais je dois gérer des milliers de modèles.
- Dynamique des méthodes de travail en non complet-environnements de confiance, que vous pourriez sortir avec eux, sauf si vous avez besoin pour créer de nouveaux types.
- wow, les méthodes Dynamiques est quelque chose de mystérieux :p et malheureusement ne fonctionne pas sur notre plate-forme (.NET 3.5)
Vous devez vous connecter pour publier un commentaire.
Avez-vous regardé paxScript.NET?
Découvrez la Mono projet. Ils ont récemment démontré CsharpRepl qui ressemble à ce que vous êtes après. La PDC 2008 vidéo ici.
Mise à jour:
Sur un regard de près, il semble que l'aide Mono.CSharp service pour évaluer les scripts ne pas être possible. Actuellement, il est lié à la Mono exécution et qu'ils ne s'y attendent pas à s'exécuter dans une confiance moyenne de l'environnement. Voir cette discussion pour plus d'info.
Sur autre possibilité consiste à inclure le Mono compilateur C# (sources ici) dans votre projet et l'utiliser pour créer des assemblages que vous chargez à partir du système de fichiers. Vous êtes inquiet sur les ressources nécessaires pour charger tous ces assemblées, vous pourriez avoir à les charger dans un autre domaine d'application.
Interpretting ces serait encore plus douloureusement lent. Nous avons un problème similaire, nous adresse est la suivante:
Nous utilisons l'Or Analyseur de projet pour analyser le code source et les convertir en un format XML génériques de la langue". Nous courons à travers une transformation qui génère VB.Net le code source (tout simplement parce qu'il est insensible à la casse). Nous avons ensuite compiler à l'aide de l' .Net runtime dans un autonome DLL, et appeler cela aide fortement restreint l'accès.
Il semble comme si vous êtes à la création de quelque chose comme un site web dynamique où les gens peuvent créer des modules ou des extraits de la fonctionnalité, mais à l'aide de C# pour faire cela introduit un couple des principaux problèmes; C# doit être compilé, et la seule façon de contourner cela est d'interpet lors de l'exécution, et ce n'est pas faisable, et même si vous ne compiler chaque extrait puis vous vous retrouvez avec 10 000 Dll, ce qui est peu pratique et inutilisable.
Si vos extraits sont rarement changement, alors je considère en programmant les enveloppant dans un ensemble unique de source, chacun ayant un nom unique, puis de les compiler en un seul coup (ou comme un temps de traiter toutes les 10 minutes?). C'est ce que nous faisons, car il permet de versioning " des peuples des séances de sorte qu'ils continuent à l'aide de la version de la DLL qu'ils avaient au début de leur session, mais lors de chaque session de cesse d'utiliser une ancienne version, il est supprimé.
Si vos extraits de changer régulièrement tout au long de la journée, alors je vous suggère de regarder un interpretted langage de script au lieu de cela, même en PHP, et le mixage de vos langues selon les fonctionnalités dont vous avez besoin. Des produits tels que CScript et LinqPad utilisent tous le CodeDomProvider, parce que vous devez avoir IMSL quelque part, si vous voulez le programme compilé logique.
La seule autre option est d'écrire votre propre interpretter et utiliser la réflexion pour accéder à toutes les autres bibliothèques, vous devez d'accès, mais c'est extrêmement complexe et horrible.
En tant que vos conditions sont effectivement conclue, je vous conseille de prendre un peu de recul et de trouver un moyen de retrait d'une ou de plusieurs restrictions. Si vous trouvez un FullTrust environnement pour compiler vos extraits dans, éliminer le besoin de code complet de soutien (p. ex. le passage à interpretted extrait de code de support), ou même de changer l'ensemble du cadre de quelque chose de non .Net.
LINQPad peut fonctionner comme un fragment de code IDE. L'application est très petit et léger. Il est gratuit (comme dans la bière), mais pas open-source. Auto-complétion des coûts supplémentaires, mais pas beaucoup ($19).
Edit: après avoir lu sur les commentaires de ce post un peu plus attentivement, je ne pense pas que LINQPad est ce que vous voulez. Vous avez besoin de quelque chose qui peut par programmation évaluer les milliers de petits scripts de manière dynamique, à droite? Je l'ai fait au travail à l'aide de Fer Rubis très facilement. Si vous êtes prêt à utiliser un langage DLR, ce serait sans doute plus réaliste. J'ai aussi fait quelques travaux similaires avec un code qui pourrait évaluer un C# expression lambda transmis sous la forme d'une chaîne de caractères, mais qui était extrêmement limitée.
J'ai écrit un projet open source, Dynamique Expresso, qui peut convertir le texte de l'expression écrite à l'aide d'une syntaxe C# dans délégués (ou de l'expression de l'arbre). Les Expressions sont analysées et transformées en Des Arbres D'Expression sans l'aide de la compilation ou de réflexion.
Vous pouvez écrire quelque chose comme:
ou
Mon travail est basé sur Scott Gu article http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx .
ou http://www.csscript.net/
Oleg a écrit une bonne intro à projet de code
Il ne gère pas exacte la syntaxe C#, mais PowerShell est donc bien empêtré avec le .NET framework, et est-ce un produit à maturité, je pense que vous auriez tort de l'ignorer au moins une solution possible. La plupart des produits de serveur, mettre à la porte par Microsoft sont maintenant soutenir PowerShell pour leur interface de script, y compris Microsoft Exchange et Microsoft SQL Server.
Je crois que Mono a menthe, d'un interprète, ils utilisent avant de mettre en œuvre le JIT pour une plate-forme donnée. Alors que la documentation du site officiel (par exemple,Runtime) disent que c'est juste un état intermédiaire avant la consolidation de la jitting VM, je suis sûr que c'était là la dernière fois que j'ai compilé sous Linux. Je ne peux pas tout vérifier à l'instant, malheureusement, mais c'est peut-être dans la direction que vous voulez.
J'ai connu le même problème. Dans un projet, je cherche à fournir une méthode générique permettant de spécifier les conditions de contrôle lorsqu'une certaine lettre doit être généré. Dans un autre projet, les conditions étaient contrôlant la façon dont les affaires ont été confiées à des files d'attente. Dans deux d'entre eux La solution a parfaitement fonctionné:
Tout ceci fonctionne en production sans problèmes
Modifier
Juste pour clarifier extrait de " - Les conditions dont je parle sont juste des expressions booléennes. J'ai par programmation d'ajouter du texte supplémentaire pour le tourner vers des méthodes et des méthodes pour compilable classes.
Aussi je peux faire la même chose avec C# même si je pense toujours que JScript est mieux pour les extraits de code
Et BTW, mon code est open source hésitez pas à parcourir. Il suffit de garder à l'esprit qu'il est beaucoup de code il n'y a aucun rapport avec ce débat. Laissez-moi savoir si vous avez besoin d'aide pour localiser les pièces concernant le thème de la
de saut à l'élastique# est la chose que vous voulez, dans un court laps de temps, saut à l'élastique sharp va être un projet open source en
. vous pouvez créer des scripts avec le même c# syntaxt. il n'y a pas de création d'assemblage lorsque vous exécutez le script, l'interprétation se fait à la volée, de sorte que la performance est élevée. tous les mots clés sont disponibles comme le c#. J'espère que u sera l'aime beaucoup..
Celui-ci fonctionne vraiment bien
c# repl et interactif interprète
Est Extrait De Compilateur quelque chose que vous recherchez?