PDA

Ver la Versión Completa : Adaptar GHF a distintas versiones de Delphi


Al González
23-03-2013, 08:20:45
Sin duda este va a ser uno de los temas fuertes. Aunque tengo a mi disposición un Delphi 2007 Professional y un XE2 Enterprise, no he hecho nada importante con ella después de Delphi 7.

En 2012 le integré componentes de acceso a datos que pertenecían a otra biblioteca de mi autoría, siendo, a mi parecer, los dos más importantes TghDataSource por sus innovaciones y universalidad, y TghClientDataSet por la variedad de pequeñas mejoras que ofrece sobre el nativo TClientDataSet. La de 2012 fue una reforma total, refiné muy diversos aspectos de GH Freebrary, y dejé fuera por falta de tiempo muchas funciones de anteriores versiones que todavía tendrían vigencia.

Así que tenemos ahora (http://www.clubdelphi.com/foros/showthread.php?t=82550) una biblioteca de funciones, clases y componentes para programar en Delphi, no muy grande pero sí útil, que trabaja aceptablemente con la versión 7 de ese entorno de desarrollo y que ha llegado el momento de adaptar a versiones más modernas del mismo.

Uno de los principales retos es sin duda el manejo del estándar Unicode de las versiones 2009+. No me parece que sea un reto demasiado difícil, pero sí algo a lo que hay que tenerle ciertas consideraciones, dada la variedad de lugares donde una biblioteca de propósito general usa cadenas de caracteres. Y claro está, hay también una larga serie de pequeñas y lógicas incompatibilidades por resolver al movernos entre distintas versiones de un lenguaje tan amplio y potente como Delphi.

Creo que lo más sano será ir adaptando la biblioteca por partes, para que los usuarios de otras versiones del compilador gocen de sus beneficios sin tener que esperar a que todo el paquete esté 100% convertido. Pero mi pregunta es, ¿cuáles son las partes más valiosas por las que vale la pena comenzar? Tengo mi opinión al respecto, mas opto por escuchar primero la de ustedes, quienes ya han tenido la amabilidad de echar un vistazo. Y segunda pregunta, ¿hacia cuáles versiones de Delphi?

Saludos.

Al González.

avmm2004
23-03-2013, 18:34:17
Yo creo que respecto a que partes ... nadie mejor que tu conoce las funcionalidades y utilidades y respecto a que versiones, hacerlas compatibles con algo anterior a delphi xe2 creo que no merece la pena.

Ñuño Martínez
25-03-2013, 13:42:08
Una preguntita. ¿Y Lázarus (o Free Pascal)? ¿Y Oxygene? O quizá sea pedir mucho.

La verdad es que no he visto cómo es la biblioteca.

Al González
27-03-2013, 17:54:46
[...] nadie mejor que tu conoce las funcionalidades y utilidades [...]
Hola Vicente. Aunque nada impide que otros colegas las conozcan también. :)

[...] respecto a que versiones, hacerlas compatibles con algo anterior a delphi xe2 creo que no merece la pena.
En eso tengo mis dudas, pues la última encuesta (http://www.clubdelphi.com/foros/showthread.php?t=81019) no deja tan abajo a versiones como 2010 o XE. Pienso que eventualmente deberían cubrirse casi todas las versiones posteriores a la 7, pero comenzando por las más demandadas. ¿O cómo lo ves?

¿Y Lázarus (o Free Pascal)? ¿Y Oxygene? O quizá sea pedir mucho.
Hola Ñuño. Al ser un proyecto open source está abierto a ello:
[...] libre de ser utilizada en cualquier proyecto y de ser adaptada a cualquier otro lenguaje [...]

De momento nuestro amigo Rolphy Reyes estuvo revisando cuestiones de incompatibilidad para compilar en recientes versiones, un primer paso para darnos una idea de los obstáculos a salvar. Más adelante pondré aquí algo de lo que me ha compartido.

¿Más ideas de la ruta a seguir?

Al González
28-04-2013, 06:12:02
Bueno, decir que hay cierto y modesto avance en el tema. Ya está disponible una primera y sencilla versión para Delphi XE2 (http://www.clubdelphi.com/foros/showthread.php?t=82958), la cual veremos de qué manera seguir ampliando. ;)

Concerniente a este primer avance sobre versiones modernas de Delphi, rescato uno de los varios apuntes que Rolphy Reyes hizo durante una navegación exploratoria:
He sacado tiempo y he realizado una instalación (sin realizar prueba) del componente TghDataSource en Delphi 2010.

Tuve algunos Warnings y Errors, ojala Al pueda echar un vistazo, en la unidad GHFRTL en su mayoría pude corregirlos solo un Warning no pude corregir en el siguiente método:
Function ghStr (Const Value, MinLength :Integer;
Const PadChr :Char = '0') :String; Overload;
Var
AResult :PChar Absolute Result;
I :Integer;
Begin

/// Para XE2 utilizar System._Str2Ext
Str (Value:MinLength, Result); //<<--------- Aqui

If PadChr = ' ' Then
Exit;

I := 0;

While AResult [I] = ' ' Do
Begin
AResult [I] := PadChr; // Direct writing on the unique string Result
Inc (I);
End;
End;
Buscando referencia encontré en el wiki (http://docwiki.embarcadero.com/Libraries/XE3/en/System.Str) de Embardero la descripción del método y la salvedad (nota) de que era posible que dicha advertencia podía surgir, pero no su arreglo.

A manera general, cree un Package llamado GHFreebraryCore donde añadí todas las unidades para su compilación mas no pude completar el proceso porque existen demasiadas incompatibilidades de tipo de datos en el ClientDataSet por lo que procedí a crear el paquete GHFCoreDataSource donde si pude realizar la compilación de manera satisfactoria.

[...]

La buena noticia de todo esto es que se puede instalar el componente TghDataSource tanto para Delphi 2010 como XE1, dentro de poco me pondré a compilar para Delphi XE2.

Sobre la función que Rolphy me señalaba, encontré que la advertencia del compilador "Implicit string cast from X to Y (http://docwiki.embarcadero.com/RADStudio/XE3/en/W1057_Implicit_string_cast_from_%27%25s%27_to_%27%25s%27_%28Delphi%29)" no supone riesgo alguno, e incluso dentro de algunas unidades nativas de la RTL puede verse una directiva que la desactiva:
unit System.WideStrUtils;

{$WARN IMPLICIT_STRING_CAST OFF}
Así que, después de estudiar el tema, hice lo propio en la unidad GHFRTL:
Unit GHFRTL; { RTL }

{$Warn Implicit_String_Cast Off}

Sigamos entonces, ya hay avance en XE2 (http://www.clubdelphi.com/foros/showthread.php?t=82958). ¿Qué paso damos ahora? ¿Seguimos ampliando en XE2 o primero llevamos ese componente a otras versiones?

Saludos.

Al González
18-05-2013, 01:25:23
Dadas las grandes expectativas que está despertando Delphi XE4, pienso que terminaré incluyéndola en el grupo de versiones más atractivas y confiables (en mi opinión) posteriores a la 7: 2010, XE2 y ahora quizá XE4 también. Creo que dedicaré parte de mis esfuerzos a que dispongamos, en esas tres modernas versiones de Delphi, de las mismas funcionalidades que tiene GH Freebrary en Delphi 7.

De esta manera quedará cierta facilidad para, en caso de requerirse, podamos luego adaptar la biblioteca a Delphi 2009, XE o XE3, tomando de base alguna de las versiones adyacentes.

Sería estupendo hacer esto junto con otros programadores de perfil bibliotecario que se comprometan, y que se animen a explorar el código al grado de resultarles familiar con el tiempo, enriqueciendo las discusiones técnicas que llevamos a cabo en este foro.

Podemos quedarnos contemplando las flamantes listas de ranking, o podemos fortalecer a Delphi y su comunidad ofreciendo soluciones que faciliten un poco el quehacer del programador. :)

Casimiro Notevi
18-05-2013, 01:43:45
Podemos quedarnos contemplando las flamantes listas de ranking, o podemos fortalecer a Delphi y su comunidad ofreciendo soluciones que faciliten un poco el quehacer del programador. :)

Buen punto :)

Al González
21-05-2013, 17:36:56
Sería estupendo hacer esto junto con otros programadores de perfil bibliotecario que se comprometan, y que se animen a explorar el código al grado de resultarles familiar con el tiempo, enriqueciendo las discusiones técnicas que llevamos a cabo en este foro.
¿Alguna novedad? ¿Voluntarios? :confused: :(

Chris
21-05-2013, 17:54:29
¿Alguna novedad? ¿Voluntarios? :confused: :(

Estimado compañero, sólo una pregunta, has considerado hospedar el código de tus componentes en Github (https://github.com/) o un repositorio público donde todos pueden ver y descargar el código?

Al González
21-05-2013, 18:49:13
Estimado compañero, sólo una pregunta, has considerado hospedar el código de tus componentes en Github (https://github.com/) o un repositorio público donde todos pueden ver y descargar el código?
Hola Chris. Ya tengo el espacio reservado en BerliOS, pero de momento aquí todos pueden ver y descargar el código: http://terawiki.clubdelphi.com/Delphi/Componentes-Funciones/__GH_Freebrary__/

Por ahora me resulta más práctico el FTP del club (que también es un repositorio público), pero, conforme crezca el proyecto, seguro llegará el momento de organizarlo mejor dentro de BerliOS. :)