jueves, febrero 15, 2007

Necesito ayuda

¿Tiene instalado un Delphi.NET? Necesito que me eche una mano; no importa la versión, siempre que sea para .NET. Estoy retocando el diseño de los destructores en Freya, pero no le veo mucho sentido a la idea. Se supone que, con la ayuda de un destructor, se facilitaría la implementación de la interfaz IDisposable.
El problema está en que el patrón de implementación propuesto por Microsoft funciona a través de un método Dispose auxiliar, declarado virtual y protegido, y con un parámetro de entrada de tipo booleano. Esto sirve para distinguir entre las llamadas "explícitas" a Dispose (como las realizadas a través de una instrucción using) de las llamadas automáticas provocadas por el colector de basura. Si no se incluye esta distinción, el destructor pierde la mayor parte de su atractivo, y puede confundir más que ayudar.
¿Qué necesito, en concreto? Si tiene alguna versión de Delphi.NET (la 8, la 2005 o la 2006), me gustaría poder echarle un vistazo a un ensamblado pequeño compilado, preferiblemente como DLL. No me atrevo a escribir código fuente, porque no tengo forma de verificarlo sintácticamente, pero sólo necesito que incluya dos clases: una clase base y una clase derivada de la primera. Cada una de estas dos clases debe tener un destructor. Lo que haga el destructor no tiene importancia: un WriteLine a la consola, por ejemplo. Eso sí, que contengan al menos una instrucción, para que el compilador no haga cosas raras con el destructor.
O, por el contrario, si tiene claro cómo genera Delphi código para destructores en .NET, o ha escrito algún artículo, o conoce dónde hay uno, también me valdría. En este momento no tengo ningún Delphi.NET instalado: sólo mi viejo Delphi 7 "nativo".
... y muchas gracias por adelantado.

Actualización: Javier Bleda me ha dado la URL del blog de Hallvard Vassbotn, y ahí me he encontrado con el enlace a un viejo artículo de Brian Long, donde cuenta los detalles de la técnica.
A primera vista, es así como lo tengo ya implementado en Freya... pero no me convence la idea, para ser sincero: el trabajo que ahorra al programador no es significativo, y complica bastante la clase, al exigir la implementación de un tipo de interfaz, y por la necesidad de mantener el patrón en los descendientes potenciales de la clase. En el patrón oficial propuesto por Microsoft, además, se distingue entre recursos administrados y no administrados, y eso es (a primera vista) casi imposible de automatizar, excepto en circunstancias muy especiales y controladas. De todos modos, voy a pensármelo un poco antes de tomar una decisión.

Etiquetas:

3 Comments:

Anonymous Anónimo said...

No se si te servirá, pero en esta página hay una pequeña diatriba sobre los destructores en Delphi y C#. Espero que te sirva.

http://hallvards.blogspot.com/2004_12_01_hallvards_archive.html

Un saludo
Javier Bleda

lunes, febrero 19, 2007 8:55:00 a. m.  
Blogger Ian Marteens said...

¡Estupendo! Sí, además conozco a Hallvard. No me acordaba de este comentario. Con esto me vale, gracias.

lunes, febrero 19, 2007 11:54:00 a. m.  
Blogger Ian Marteens said...

... que por cierto, quedan tres o cuatro cosas por conectar en el compilador, solamente: clases parciales, que debe ser sencillo, e inferencia de tipos para los métodos genéricos. Por lo que estaba leyendo sobre CodeGear en Internet, creo que todavía esta gente no tiene el compilador para .NET 2.0: lei no recuerdo dónde que, en una presentación, mostraron la sintaxis de una clase genérica... ¡pero el presentador no la compiló!

Y Chrome ya lleva unas cuantas versiones de adelanto sobre Delphi.NET. Es increíble...

El problema de Freya es que, de momento, sólo es un compilador, sin un entorno propio. El compilador está quedando muy bien: es rápido, es robusto y optimiza el código a lo bestia. 20.000 líneas de código, incluyendo un pequeño parser especializado para la navegación por el código. Es decir, es un proyecto relativamente pequeño (gracias al "alto nivel" de C#).

lunes, febrero 19, 2007 12:07:00 p. m.  

Publicar un comentario

<< Home