5/1/2010 18:23 El Bruno

[VS2010] Copiando objetos en Visual Basic 2010 con IronPython 2.6 (¿por qué tan complicado? porque puedo !!!)

image

Buenas,

estaba refrescando un poco de información sobre IronPython y me di cuenta de que la última release 2.6 liberada el 11-Dec-2009 no funciona correctamente con Visual Studio 2010 Beta 2. Esto es por cuestiones de versión en el CLR 4.0, asi que para el siguiente ejemplo utilizaremos la versión anterior IronPython 2.6 CTP for Net 4.0 Beta 2.

El siguiente tutorial demuestra como utilizar una biblioteca de IronPython para copiar archivos, invocando la misma desde Visual Basic.Net.

Tutorial

1. Crear una nueva aplicación de consola de Visual Basic en Visual Studio 2010 Beta 2.

2. Desde el directorio de instalacion de IronPython [%Program Files%\IronPython 2.6 CTP for .NET 4.0 Beta 2] agregar las siguientes referencias:

IronPython.dll

IronPython.Modules.dll

Microsoft.Scripting.dll

Microsoft.Scripting.Debbuging.dll

Microsoft.Dynamic.dll

3. Modificamos el codigo de la aplicación como el siguiente ejemplo

   1: Sub Main()
   2:   ' define el directorio de trabajo de IronPython
   3:   My.Computer.FileSystem.CurrentDirectory =
   4:      My.Computer.FileSystem.SpecialDirectories.ProgramFiles &
   5:      "\IronPython 2.6 CTP for .NET 4.0 Beta 2\Lib"
   6:  
   7:   ' crea una instancia con el archivo copy
   8:   Dim py = IronPython.Hosting.Python.CreateRuntime()
   9:   Dim copy As Object = py.UseFile("copy.py")
  10:  
  11:   ' copia un objeto
  12:   Dim origen As String = "VALENTINO // MARTINA"
  13:   Dim destino As String = copy.copy(origen)
  14:   Console.WriteLine("origen: {0}", origen)
  15:   Console.WriteLine("destino: {0}", destino)
  16:  
  17:   ' muestra la ayuda propia de la función copy()
  18:   Console.WriteLine("Ayuda de la función copy()")
  19:   Dim sentence = "import copy" & vbCrLf & "copy.__doc__"
  20:   Dim h As Object = py.GetEngine("python").Execute(sentence)
  21:   Console.WriteLine(h.ToString())
  22:  
  23:   ' input del usuario
  24:   Console.ReadLine()
  25:  
  26: End Sub

4. El codigo anterior crea una instancia del runtime de ejecución de IronPython (línea 8), carga el archivo copy.py (línea 9), copia un objeto (líneas 12 al 15) y luego muestra la ayuda del mismo (líneas 18 al 21).

5. Para mostrar la ayuda, utilizamos directamente el engine de IronPython y ejecutamos la sentencia

   1: import copy
   2:   copy.__doc__

6. Cuando ejecutamos la aplicación podemos ver el siguiente resultado en la consola de la aplicación.

   1: origen: VALENTINO // MARTINA
   2: destino: VALENTINO // MARTINA
   3: Ayuda de la función copy()
   4: Generic (shallow and deep) copying operations.
   5:  
   6: Interface summary:
   7:  
   8:         import copy
   9:  
  10:         x = copy.copy(y)        # make a shallow copy of y
  11:         x = copy.deepcopy(y)    # make a deep copy of y
  12:  
  13: For module specific errors, copy.Error is raised.
  14:  
  15: The difference between shallow and deep copying is only relevant for
  16: compound objects (objects that contain other objects, like lists or
  17: class instances).
  18:  
  19: - A shallow copy constructs a new compound object and then (to the
  20:   extent possible) inserts *the same objects* into it that the
  21:   original contains.
  22:  
  23: - A deep copy constructs a new compound object and then, recursively,
  24:   inserts *copies* into it of the objects found in the original.
  25:  
  26: Two problems often exist with deep copy operations that don't exist
  27: with shallow copy operations:
  28:  
  29:  a) recursive objects (compound objects that, directly or indirectly,
  30:     contain a reference to themselves) may cause a recursive loop
  31:  
  32:  b) because deep copy copies *everything* it may copy too much, e.g.
  33:     administrative data structures that should be shared even between
  34:     copies
  35:  
  36: Python's deep copy operation avoids these problems by:
  37:  
  38:  a) keeping a table of objects already copied during the current
  39:     copying pass
  40:  
  41:  b) letting user-defined classes override the copying operation or the
  42:     set of components copied
  43:  
  44: This version does not copy types like module, class, function, method,
  45: nor stack trace, stack frame, nor file, socket, window, nor array, nor
  46: any similar types.
  47:  
  48: Classes can use the same interfaces to control copying that they use
  49: to control pickling: they can define methods called __getinitargs__(),
  50: __getstate__() and __setstate__().  See the documentation for module
  51: "pickle" for information on these methods.
  52:  

El proyecto de prueba se puede descargar desde aquí http://cid-bef06dffdb192125.skydrive.live.com/self.aspx/Code%20Samples/2010%2001%2005%20IronPython%20VBNet%20%20CopyFiles.zip

 

Saludos @ Boadilla

El Bruno

Archivado en: ,,,,
Comparte este post:

# re: [VS2010] Copiando objetos en Visual Basic 2010 con IronPython 2.6 (¿por qué tan complicado? porque puedo !!!)

Thursday, January 07, 2010 8:42 AM by preguntoncojonero

IronPython va a sustituir a C# ?? salu2

# re: [VS2010] Copiando objetos en Visual Basic 2010 con IronPython 2.6 (¿por qué tan complicado? porque puedo !!!)

Friday, January 08, 2010 9:13 PM by El Bruno

jejeje no creo ... son dos enfoques diferentes sobre la misma plataforma :D

# [VSTS2010] Listado de Novedades (XII)

Tuesday, January 19, 2010 1:46 PM by El Bruno

Buenas, nuevo recopilatorio con los posts que voy escribiendo sobre las novedades de Visual Studio 2010