Lawrence

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

IronPython in Action, estendere IronPython

Con il capitolo 14 comincia la quarta e ultima parte del libro che va nei dettagli dell’interazione tra IronPython e il resto di .NET.

Questo capitolo tratta l’estensione di IronPython tramite linguaggi come C# e VB.NET.

I post precedenti sono: 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.

IronPython è facilmente estendibile da C# e ci sono tecniche per esporre API Python friendly.

Tecnicamente qualsiasi linguaggio della piattaforma .NET è utilizzabile per estendere IronPython, l’autore si limita ai due principali: C# e VB.NET.

Vari idiomi C# si mappano automaticamente ad IronPython, come l’implementazione di IEnumerable, IDictionary, IList, l’operator overloading e gli indexers. È ovviamente possibile sfruttare la capacità di chiamare codice nativo (unmanaged) di C# da IronPython o addirittura chiamare IronPython da JavaScript in applicazioni Silverlight.

Di base le classi C# non sono mutabili dinamicamente come tutte le classi Python. Per ovviare a questa cosa e abilitare l’accesso dinamico agli attributi si possono usare metodi speciali come GetCustomMember, SetAfterMember, DeleteMember e GetMemberNames.

.NET supporta metodi con un numero variabile di argomenti, ma non supporta i comodissimi keyword argument emulabili tramite System.Runtime.InteropServices.DefaultParamValueAttribute oppure OptionalAttribute.

Trovo davvero interessante la possibilità di compilare e generare assembly a runtime tramite System.CodeDom.Compiler. L’autore mostra un esempio di funzione Generate che permette di farlo attraverso code provider per C# o VB.NET, compilando l’assembly in memoria o salvandola su disco. Questo permette anche di referenziarle a runtime:

import clr
assembly = Generate(source, 'WindowUtils', inMemory=True)
clr.AddReference(assembly)
from WindowUtils import WindowUtils

Davvero interessante :-)

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

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET