Lawrence

Twist again
posts - 73, comments - 168, trackbacks - 37

IronPython in Action, embedding dell'IronPython engine

L’ultimo capitolo, il 15, riguarda l’embedding del runtime di IronPython all’interno di applicazioni C#/VB.NET e l’interazione con esso.

I post precedenti sono: estendere IronPython, Silverlight, accesso ai dati e web services, ASP.NET, system administration, WPF, protocolli e metaprogrammazione, testing, proprietà, dialog e Visual Studio, first class functions e xml, applicazioni e design pattern, oggetti .NET e IronPython, introduzione a Python, introduzione al libro e il preambolo.

L’embedding di IronPython è sicuramente un comodo modo per fornire un ambiente di scripting ad una applicazione esistente, estenderla con plugin o aumentare l’integrazione fra vari linguaggi.

Ci sono vari modi per fare l’embedding di IronPython.

Eseguibile custom

È possibile distribuire una applicazione Python all’interno di un exe. L’engine di IronPython si crea usando il suo motore di hosting:

using IronPython.Hosting;
ScriptEngine engine = Python.CreateEngine();
ScriptSource source;
source = engine.CreateScriptSourceFromFile(programPath);
ScriptScope scope = enginsource.Execute(scope);

Il DLR supporta la creazione di engine multipli, per i dettagli rimando alle specifiche sull’hosting del DLR.

ScriptSource e ScriptCode permettono di eseguire codice Python da file o stringa. È anche possibile catturare eccezioni lanciate dal sorgente Python.

IronPython come motore di scripting

Una cosa veramente esoterica è la possibilità di infilare oggetti nello scope Python (ScriptScope) da C#, allo stesso modo si possono richiamare oggetti da tale scope. Usando CompiledCode si possono riusare i code objects senza doverli compilare ogni volta.

L’autore precisa come ScriptScope non sia legato a Python, in tal modo è potenzialmente possibile mischiare pezzi di codice in Python, Ruby e altri linguaggi del DLR nella stessa applicazione facendoli interagire!

L’esempio che mostra fa uso di varie tecniche compreso l’embedding del sorgente Python in una risorsa per evitarne la modifica dopo il deploy.

Plugin Python per applicazioni .NET

L’autore sviluppa un lungo esempio per mostrare come scrivere plugin per una applicazione .NET mostrando caratteristiche come: l’auto discovery dei plugin, il caricamento a runtime, la redirezione dello standard output ed error dell’hosted runtime e la gestione di specifiche eccezioni da codice Python.

Usare oggetti DLR da altri linguaggi .NET

Le possibilità di avere codice modificabile a runtime senza ricompilazione sono davvero infinite. L’esempio di questa sezione mostra come valutare a runtime pezzi di codice Python e interagire con gli oggetti risultanti da queste valutazioni.

L’autore fa anche notare come con C# 4 l’interazione con i linguaggi dinamici diventerà sicuramente meno verbosa e più potente.

Print | posted on domenica 18 gennaio 2009 18:09 | Filed Under [ ironpython ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET