Creare una shell interattiva per le app .NET e incorporare in essa linguaggi di scripting come python / iron python

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

Domanda

Stavo imparando Python usando il tutorial fornito con l'installazione standard di Python. Uno dei vantaggi che l'autore afferma su Python è "forse hai scritto un programma che potrebbe usare un linguaggio di estensione e non vuoi progettare e implementare un linguaggio completamente nuovo per la tua applicazione" - La mia domanda è: come farei a progettare un programma (usando c #) che possa essere esteso usando Python in modo interattivo (per questo, immagino che avrei bisogno di creare una sorta di "shell" o "quot"; modalità interattiva " per il programma .net)?

Esistono indicazioni su come progettare programmi .NET con una shell interattiva. Vorrei quindi utilizzare lo script Python nella shell per "estendere" o interagire con il programma.

EDIT: Questa domanda deriva in parte dalla demo fornita da Miguel de Icaza durante PDC 2008 dove ha mostrato il prompt dei comandi interattivo di csharp, C # 4.0 penso che abbia anche questo "compilatore come servizio"; caratteristica. L'ho visto e ho pensato a quanto sarebbe bello progettare un programma Windows o Web in .NET che avesse una shell interattiva ... e un linguaggio di script come Python potrebbe essere usato per estendere le funzionalità fornite dal programma.

Inoltre, ho iniziato a pensare a questo tipo di funzionalità dopo aver letto uno dei saggi di Steve Yegge in cui parla di sistemi che vivono per sempre.

È stato utile?

Soluzione

Sembra un ottimo uso di IronPython .

È abbastanza facile configurare un semplice host di scripting da C # per consentire le chiamate negli script IronPython, oltre a consentire a IronPython di chiamare il proprio codice C #. Ci sono esempi ed esempi sul sito CodePlex che mostrano come fare proprio questo.

Un altro buon sito per esempi ed esempi è ironpython.info

E ecco una pagina dedicata a un esempio che risponde alla tua stessa domanda, sebbene in un modo generico incentrato su DLR - questo ti consentirebbe di ospitare IronPython, IronRuby o qualsiasi linguaggio DLR che desideri supportare.

Ho usato questi esempi in passato per creare un ambiente IronPython all'interno di un'installazione privata di ScrewTurn Wiki - mi ha permesso di creare template Wiki molto espressivi e si è rivelato molto utile in generale.

Altri suggerimenti

Stavo cercando una soluzione per lo stesso problema e ho trovato IronTextBox: http: // www.codeproject.com/KB/edit/irontextbox2.aspx

Ha bisogno di un po 'di ottimizzazione per le versioni attuali, ma sembra essere tutto ciò di cui avevo bisogno. Prima lo ho compilato, quindi ho aggiunto le variabili a cui volevo accedere dalla shell all'ambito.

Python come linguaggio di estensione è chiamato " Incorporamento di Python " ;.

puoi chiamare un modulo python da c ++ chiamando basicamente l'interprete python e farlo eseguire dal sorgente python. Questo si chiama embedding .

Funziona da C e C ++ e probabilmente funzionerà altrettanto bene da C #.

E no, non hai bisogno di nessun tipo di "shell". Sebbene Python possa essere interattivo, non è affatto un requisito.

Ecco un link a un post sul blog sull'aggiunta di IronRuby allo script di un'applicazione C #.

http: // blog .jimmy.schementi.com / 2008/11 / aggiunta di script-to-c-silverlight-app.html

I principi funzionerebbero anche bene per l'utilizzo di IronPython.

Se il tuo obiettivo è evitare l'apprendimento di una nuova lingua, puoi utilizzare CSScript.Net e script incorporati scritti in C # o VB nella tua applicazione. Con CSScript hai pieno accesso al CLR. Sono supportati tre diversi modelli di esecuzione degli script in modo da poter eseguire script che fanno riferimento a oggetti nel dominio dell'app corrente, eseguire tramite telecomando o eseguire come shell.

Attualmente sto usando CCScript come " colla " codice per la configurazione di oggetti applicativi in ??qualche modo simile all'utilizzo di Boo.

Questo link ti assegna un articolo di progetto di codice che fornisce una buona panoramica.

Non so cosa intendi con

  

" estendere " o interagire con il programma

quindi non posso rispondere alla tua domanda. Puoi fare un esempio?

Esiste una shell C # interattiva open source in mono: http: //www.mono-project. com / CsharpRepl

Quando ti piace Python, .Net e l'estensione del linguaggio, probabilmente ti piacerà Boo su Iron Python. Boo include anche una shell interattiva open source.

Non sono d'accordo con

  

"non vuoi progettare e   implementare un linguaggio completamente nuovo per   la tua applicazione "

Non è così difficile come in passato creare un semplice DSL. Non ci vorranno giorni per implementare, solo ore. Potrebbe essere un'opzione interessante.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top