Créer un shell interactif pour les applications .NET et y intégrer des langages de script tels que python / iron python

StackOverflow https://stackoverflow.com/questions/808692

Question

J'apprenais python à l'aide du didacticiel fourni avec l'installation standard de Python. L’un des avantages mentionnés par l’auteur à propos de python réside dans le fait que vous avez peut-être écrit un programme qui pourrait utiliser un langage d’extension et que vous ne souhaitez pas concevoir et implémenter un tout nouveau langage pour votre application. - Ma question est la suivante: comment puis-je concevoir un programme (utilisant c #) pouvant être étendu de manière interactive en utilisant Python (pour que cela soit possible, j'imagine qu'il me faudrait créer une sorte de "shell" ou " mode "interactif" pour le programme .net)?

Existe-t-il des indications sur la manière de concevoir des programmes .NET dotés d’un shell interactif? Je voudrais ensuite utiliser un script python dans le shell pour "étendre" ou interagissez avec le programme.

MODIFIER: Cette question découle en partie de la démonstration faite par Miguel de Icaza lors de PDC 2008, qui montrait l'invite de commande interactive csharp, C # 4.0. Je pense également que ce "compilateur en tant que service" fonctionnalité. Je me suis penché sur la question et je me suis dit que ce serait génial de concevoir un programme Windows ou Web sous .NET doté d’un shell interactif. Un langage de script tel que Python pourrait être utilisé pour étendre les fonctionnalités fournies par le programme.

De plus, j'ai commencé à penser à ce type de fonctionnalité après avoir lu l'un des essais de Steve Yegge où il parle de systèmes qui vivent éternellement.

Était-ce utile?

La solution

Cela semble être une excellente utilisation de IronPython .

Il est relativement facile de configurer un hôte de script simple à partir de C # pour permettre les appels dans des scripts IronPython, ainsi que pour permettre à IronPython d’appeler votre code C #. Sur le site CodePlex, des exemples et des exemples montrent comment faire cela.

Un autre bon site pour des exemples et des exemples est ironpython.info .

Et voici une page dédiée à un exemple répondant à votre question, mais d'une manière générique centrée sur le DLR, cela vous permettrait d'héberger IronPython, IronRuby ou n'importe quel langage DLR que vous souhaitez prendre en charge.

J'ai déjà utilisé ces exemples pour créer un environnement IronPython dans une installation privée de Wiki de ScrewTurn . - cela m'a permis de créer des modèles de wiki très expressifs et s'est avéré très utile en général.

Autres conseils

Je cherchais une solution au même problème et trouvai IronTextBox: http: // www.codeproject.com/KB/edit/irontextbox2.aspx

Cela nécessite un peu d'ajustement pour les versions actuelles, mais semble être tout ce dont j'avais besoin. D’abord fait la compilation, puis ajouté les variables auxquelles je voulais accéder depuis le shell vers la portée.

Python en tant que langage d'extension est appelé "incorporation de Python".

vous pouvez appeler un module python à partir de c ++ en appelant essentiellement l’interpréteur python et en le faisant exécuter la source python. C'est ce qu'on appelle incorporer .

Cela fonctionne en C et C ++, et probablement aussi en C #.

Et non, vous n’avez besoin d’aucun type de "shell". Bien que Python puisse être interactif, ce n’est pas du tout une exigence.

Voici un lien vers un article de blog sur l’ajout d’IronRuby dans un script pour une application C #.

http: // blog .jimmy.schementi.com / 2008/11 / ajouter des scripts à c-silverlight-app.html

Les principes fonctionneraient également bien avec IronPython.

Si votre objectif est d'éviter d'apprendre une nouvelle langue, vous pouvez utiliser CSScript.Net et des scripts intégrés écrits dans C # ou VB dans votre application. Avec CSScript, vous obtenez un accès complet au CLR. Trois modèles différents d'exécution de script sont pris en charge afin que vous puissiez exécuter un script faisant référence à des objets de votre domaine d'application actuel, exécuter à l'aide de la communication à distance ou exécuter en tant que shell.

Actuellement, j'utilise CCScript comme "colle". code de configuration des objets d’application un peu similaire à Boo.

Ce lien vous dirige vers un article de projet de code qui fournit un bon aperçu.

Je ne sais pas ce que vous voulez dire par

  

" extend " ou interagir avec le programme

donc je ne peux pas répondre à votre question. Pouvez-vous donner un exemple?

Il existe un shell C # interactif open source en mono: http: //www.mono-project. com / CsharpRepl

Si vous aimez python, .Net et les extensions de langage, vous aimerez probablement Boo sur Iron python. Boo est également livré avec un shell interactif open source.

Je ne suis pas d'accord avec

  

"Vous ne souhaitez pas concevoir et   mettre en œuvre un tout nouveau langage pour   votre application "

Créer un simple DSL n’est plus aussi difficile qu’avant. Cela ne vous prendra pas des jours pour mettre en œuvre, seulement des heures Ce pourrait être une option intéressante.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top