In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Harbour genera codigo nativo...

Foro público de Xailer en español
Responder
Manu Exposito
Mensajes: 116
Registrado: Mié Feb 08, 2006 4:41 pm

Harbour genera codigo nativo...

Mensaje por Manu Exposito »

Si habeis estado por el CVS de Harbour habreis notado que estan haciendo
muchisimas cosas sobre todo de optimizacion...
Hecho en falta el WITH OBJECT ... END pero ya tienen las otras nuevas
construcciones
SWITCH a
CASE 1
...
END
y
FOR EACH enum IN a
NEXT
pero mejor hechas que en xHarbour ;-)
Y ahora nos sorprenden con la generacion de "CODIGO NATIVO"...
Si señores, solo teneis que usar la bandera -gc3 y ya tenemos un programa
que puede reducir a la mitad el tiempo de ejecucion...
En una charla de casi dos horas con Jose Giemenez me comento que estaria muy
bien Harbour incorporara la construccion WITH OBJECT ... END ya que esto
supondria practicamente no tocar nada de codigo para que Xailer funcionara
con Harbour (ya hizo pruebas con el preprocesado y consiguio compilar Xailer
sin problemas).
Propongo que todos los que apoyeis la propuesta de incluir WITH OBJECT ...
END en Harbour, vaya a la lista de correo y lo pida, yo ya lo he hecho...
Os imaginais Xailer en codigo nativo? una balaaaaaaaaaaaaaaaa
Saludos
Jaime Irurzun
Mensajes: 67
Registrado: Mar Nov 02, 2004 6:23 pm

Harbour genera codigo nativo...

Mensaje por Jaime Irurzun »

Hola Manu,
Perdona por la ignorancia, pero ¿qué significa que genere "código nativo"?
No me refiero a la ventaja (dices que es la velocidad), sino a qué diferencia
a ese "código nativo" del que genera actualmente Harbour. Gracias :)
Un saludo,
Jaime Irurzun.
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Harbour genera codigo nativo...

Mensaje por jfgimenez »

Manu,
> En una charla de casi dos horas con Jose Giemenez me comento que estaria
> muy
> bien Harbour incorporara la construccion WITH OBJECT ... END ya que esto
> supondria practicamente no tocar nada de codigo para que Xailer funcionara
> con Harbour (ya hizo pruebas con el preprocesado y consiguio compilar
> Xailer
> sin problemas).
Hace ya más de 2 años que hice pruebas, y efectívamente conseguí compilar y
ejecutar tanto Xailer como ejemplos hechos con Xailer con Harbour. No
obstante, al no ser un comando nativo me encontré con muchas limitaciones,
que junto al hecho de que xHarbour estaba mucho más avanzado nos hizo
decantarnos por este último.
Pero claro, si Harbour implementa este comando, cuando tengamos algo de
tiempo trataremos de soportarlo, además de xHarbour.
--
Un saludo,
José F. Giménez
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Harbour genera codigo nativo...

Mensaje por jfgimenez »

Manu, Jaime,
> No me refiero a la ventaja (dices que es la velocidad), sino a qué
> diferencia
> a ese "código nativo" del que genera actualmente Harbour. Gracias :)
No nos dejemos llevar por la euforia... estoy de acuerdo que lo que ha hecho
Przemek es un gran avance, pero todavía queda mucho por delante para que sea
algo verdaderamente atractivo. En mi humilde opinión, la (todavía) pequeña
ganancia de velocidad no justifica el (gran) aumento de código generado.
Aunque también es cierto que en determinados casos podría ser necesario.
Hay un buen artículo de Walter Negro sobre el pcode en
http://www.puertosur.org, que por desgracia está ahora mismo hackeada. Por
mi parte, intentaré explicar de forma lo más sencilla posible en qué
consiste todo esto (Walter, si ves esto, tú eres mucho más experto que yo en
este tema; si hay algo incorrecto, por favor, corrígeme; y si quieres
aclarar algo más, adelante):
Hasta ahora, cuando compilamos un prg con [x]Harbour, se genera un fuente en
C. Pongamos un ejemplo muy simple:
PROCEDURE Ejemplo()
LOCAL n
Ejemplo2( @n )
RETURN
produce esta función en C:
HB_FUNC( EJEMPLO )
{
static const BYTE pcode[] =
{
HB_P_FRAME, 1, 0, /* locals, params */
HB_P_PUSHSYMNEAR, 1, /* EJEMPLO2 */
HB_P_PUSHNIL,
HB_P_PUSHLOCALREF, 1, 0, /* N */
HB_P_DOSHORT, 1,
HB_P_ENDPROC
};
hb_vmExecute( pcode, symbols, NULL );
}
Si os fijais bien, es algo tan simple como una variable (pcode) que contiene
toda la cadena de pcodes y sus argumentos. A continuación se llama a la
función hb_vmExecute(), que es el punto de entrada de la VM, pasándole esa
variable, es decir, la cadena de pcode.
Posteriormente, dentro de la VM, se va cogiendo byte a byte cada pcode y sus
argumentos, y se van procesando. En muchos casos, la forma de procesar un
pcode es simplemente llamando a un función. P.ej., el pcode
HB_P_PUSHLOCALREF se trata así dentro de la VM:
case HB_P_PUSHLOCALREF:
HB_TRACE( HB_TR_DEBUG, ("HB_P_PUSHLOCALREF") );
hb_vmPushLocalByRef( HB_PCODE_MKSHORT( &( pCode[ w + 1 ] ) ) );
w += 3;
break;
por lo tanto, hay una función hb_vmPushLocalByRef() que es quien realmente
hace el trabajo.
Pues bien, lo que ha hecho Przemek en Harbour es que ahora, desde la
funciones en C generadas al compilar se llama directamente a las funciones
que corresponda de la VM. P.ej., la función anterior sería más o menos así
(ojo, que no he visto todavía como se genera, y esto es sólo una
especulación):
HB_FUNC( EJEMPLO )
{
hb_vmFrame( 1, 0 );
hb_vmPushSymbol( 1 );
hb_vmPushNil();
hb_vmPushLocalByRef( 1 );
hb_vmDo( 1 );
hb_vmEndProc();
}
Lógicamente, esto es más rápido que en el caso anterior, ya que esta función
llama directamente a las funciones que tienen que hacer el trabajo. Antes,
solamante llamaba a una, pero esta tenía que ir procesando uno por uno los
pcode (dentro de un switch enorme), y llamando a las funciones finales.
Pero a cambio, ocupa mucha más memoria. El ejemplo con pcode ocupaba
solamente 12 bytes + la llamada a hb_vmExecute(); si no me equivoco, son en
total 32 bytes. Por otro lado, la nueva función tiene 6 llamadas a
funciones, con sus respectivos parámetros, que si no me equivoco son 46
bytes, es decir, un 44% más. Esto es un ejemplo muy muy simple, pero nos
puede dar una idea que por donde van los tiros. Por cierto, un pcode sin
argumentos ocupa sólo 1 byte, mientras que una llamada a función sin
parámetros ocupa 5 bytes. Por lo tanto, en funciones más grandes que el
ejemplo la diferencia será bastante mayor.
Como curiosidad... Alaska xBase genera el código más o menos de esta forma.
Los que lo conozcais sabreis lo grandes que pueden llegar a ser los
ejecutables.
Por otro lado, el objetivo que se persigue finalmente no es convertir el
pcode actual en llamadas a las funciones correspondientes sin más; el
objetivo final es que el compilador genere una especie de metacode que
después se pueda optimizar según el código final que se vaya a generar. Esto
sí daría mejores resultados, tanto en tamaño de ejecutable como en
velocidad, ya que se podría optimizar el uso de C, e incluso disponer de
variables nativas en C dentro del código generado, lo que hasta ahora no se
está haciendo.
--
Un saludo,
José F. Giménez
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Manu Exposito
Mensajes: 116
Registrado: Mié Feb 08, 2006 4:41 pm

Harbour genera codigo nativo...

Mensaje por Manu Exposito »

Efectivamente en las dos respuestas, como es logico, Jose tiene toda la
razon del mundo...
Y mi intecion es mobilizar a la peña para que pida el WITH OBJECT ... END
para Harbour...
Y asi como es logico que el portado de Xailer sea muy facil...
De cualquier modo esto, que aparentemente puede no ser muy importante pienso
que si lo es... y mucho.
De momento la velocidad, tal vez a cambio del tamaño... pero a quien le
importa ahora el tamaño de un EXE? creo que es mas importante la
velocidad!!!
Por otro lado se podria decir que la generacion de otros codigos estarian
muy cerca sin practicamente cambios en el compilador... me estoy acordando
de Java y codigo intermedio .NET (IL).
Pero repito por ahora lo importante es este avance que hace que se consiga
casi el doble de velocidad... y eso "no es moco de pavo"
A que no?
Saludos
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:44258c13$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Manu,
>
>> En una charla de casi dos horas con Jose Giemenez me comento que estaria
>> muy
>> bien Harbour incorporara la construccion ya que esto
>> supondria practicamente no tocar nada de codigo para que Xailer
>> funcionara
>> con Harbour (ya hizo pruebas con el preprocesado y consiguio compilar
>> Xailer
>> sin problemas).
>
> Hace ya más de 2 años que hice pruebas, y efectívamente conseguí compilar
> y ejecutar tanto Xailer como ejemplos hechos con Xailer con Harbour. No
> obstante, al no ser un comando nativo me encontré con muchas limitaciones,
> que junto al hecho de que xHarbour estaba mucho más avanzado nos hizo
> decantarnos por este último.
>
> Pero claro, si Harbour implementa este comando, cuando tengamos algo de
> tiempo trataremos de soportarlo, además de xHarbour.
>
> --
> Un saludo,
>
> José F. Giménez
>
antonio.ortega
Mensajes: 124
Registrado: Mié May 17, 2006 10:50 am

Harbour genera codigo nativo...

Mensaje por antonio.ortega »

Jose, Manu ....estoy confuso......ya que Jose habla de una "(todavía)
pequeña" ganacia de velocidad y Manu de una ganancia de velocidad que no es
"moco 'e pavo', leí en el changelog, que la ganancia es entre el 10 y el 50
%.....bien hasta ahí se podria pensar que es una "ganancia importante", pero
claro surge lo del tamaño del ejecutable....y es aquí donde me pierdo....¿
tiene influencia el tamaño del .exe con la cantidad de memoria ocupada y con
la perdida de velocidad ? ...en consecuencia ¿ es real ese incremento entre
el 10 o el 50% ? ......¿ cual sería el "balance" lógico ?......y por último
a ver si termino de entender...que tipo de software se beneficia con este
cambio , Xailer ( entiendase GUI's ) o la aplicacion de Gestión típica de
muchos de nosotros ?....ahhh y se me olvidaba ¿ Que es un meta código ? , ¿
Por que podremos disponer de tipos de Datos como C ? ....¿ Que optimizaremos
de C ?....¿ Que influencia tendrá para poder generar código .Net , JAVA ?
......a ver si iluminais un poco.....que esta oscuro.
Saludos.
Gracias.
Antonio F. Ortega
jasm.nospam
Mensajes: 203
Registrado: Vie Abr 01, 2005 9:05 am

Harbour genera codigo nativo...

Mensaje por jasm.nospam »

Antonio,
Creo que todo el mundo tiene una obsesión enfermiza con los temas de
velocidad y también con los de tamaños.
Para mí­, antes que velocidad y/o tamaño, es más importante la
confiabilidad del código que se genera, que no tenga bugs y que además
esté bien depurado. No quiero sorpresas ocultas en las aplicaciones en
producción.
Con esto no quiero decir que los esfuerzos realizados en generar código
nativo o en reducir el tamaño del EXE sean en vano.
Saludos
Jose A. Suárez
Antonio F. Ortega escribió:
> Jose, Manu ....estoy confuso......ya que Jose habla de una "(todaví­a)
> pequeña" ganacia de velocidad y Manu de una ganancia de velocidad que no es
> "moco 'e pavo', leí­ en el changelog, que la ganancia es entre el 10 y el 50
> %.....bien hasta ahí­ se podria pensar que es una "ganancia importante", pero
> claro surge lo del tamaño del ejecutable....y es aquí­ donde me pierdo....¿
> tiene influencia el tamaño del .exe con la cantidad de memoria ocupada y con
> la perdida de velocidad ? ...en consecuencia ¿ es real ese incremento entre
> el 10 o el 50% ? ......¿ cual serí­a el "balance" lógico ?......y por último
> a ver si termino de entender...que tipo de software se beneficia con este
> cambio , Xailer ( entiendase GUI's ) o la aplicacion de Gestión tí­pica de
> muchos de nosotros ?....ahhh y se me olvidaba ¿ Que es un meta código ? , ¿
> Por que podremos disponer de tipos de Datos como C ? ....¿ Que optimizaremos
> de C ?....¿ Que influencia tendrá para poder generar código .Net , JAVA ?
> .....a ver si iluminais un poco.....que esta oscuro.
>
> Saludos.
>
> Gracias.
>
> Antonio F. Ortega
>
>
Manu Exposito
Mensajes: 116
Registrado: Mié Feb 08, 2006 4:41 pm

Harbour genera codigo nativo...

Mensaje por Manu Exposito »

No voy a extenderme mucho pero me gustaria darte al menos unas pequeñas
nociones...
En primer lugar con el avance propuesto en Harbour se quita de en medio una
"capa", esto ya se traduce en mayor velocidad y ademas se gana en otras como
por ejemplo la generacion de codigo distinto al puramente C.
En la actualidad hay un problema para los compiladores tradicionales y es el
salto a los 64 bit... seguro que todos los compiladores tradicionales lo
haran pronto y otros como el C Borland se quedaran definitivamente en el
camino, o sea no habra Borland C de 64 bit. Ademas si se consigue generar
codigo IL el compilador estandar de MS sera capaz de compilarlo.
Pero realmente tu apuntas otras mejoras y es la capacidad que se podria
tener para inercambiar variables entre las funciones hechas en C y las de
PRG de una manera transparente sin tener que usar el ITEM API.
Otra es la ganancia de velocidad que al fin al cabo es lo mas importante ya
que como apunta JA tambien es un factor importante la seguridad de la
inexistencia de BUG, y esta tecnologia no incrementa ni mucho menos la
posibilidad de que aparezca alguno desconocido.
En cuanto al aumento del ejecutable no va relacionado con la posible perdida
de tiempo de ejecucion... tanto es asi que casi todos los compiladores de C
te dan a elegir entre mayor velocidad o tamaño del ejecutable. El aumento
del tamaño y la disminucion de tiempos de ejecucion viene dado por
optimizacion de codigo interno, sobre todo en bucles...
Ah!! el metacodigo...
Es lo que estan haciendo MS con la plataforma .NET o Sum Microsystem y otras
empresas con Java.
En definitiva la posibilidad de programar en cualquier lenguaje y generar el
mismo codigo.
En la plataforma .NET todos los lengujes (VB, VC, C#, etc) genran un codigo
intermedio compatible que es compilado por un compilador comun para generar
codigo nativo o pcode. Esto supone por ejemplo que pueder crear una LIB en
VB y ser usada sin problemas en programas desarrollados en C#...
Espero que esto no haya llegado a ser un toston y que mas o menos te haya
aclarado un poquito por donde van los tiros... a esta altura de la pelicula
ademas de seguridad a pruebas de bug hay que pedir optimizacion de velocidad
de ejecucion...
"Antonio F. Ortega" <antonio.ortega@ono.com> escribió en el mensaje
news:442663f4$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Jose, Manu ....estoy confuso......ya que Jose habla de una "(todavía)
> pequeña" ganacia de velocidad y Manu de una ganancia de velocidad que no
> es "moco 'e pavo', leí en el changelog, que la ganancia es entre el 10 y
> el 50 %.....bien hasta ahí se podria pensar que es una "ganancia
> importante", pero claro surge lo del tamaño del ejecutable....y es aquí
> donde me pierdo....¿ tiene influencia el tamaño del .exe con la cantidad
> de memoria ocupada y con la perdida de velocidad ? ...en consecuencia ¿ es
> real ese incremento entre el 10 o el 50% ? ......¿ cual sería el "balance"
> lógico ?......y por último a ver si termino de entender...que tipo de
> software se beneficia con este cambio , Xailer ( entiendase GUI's ) o la
> aplicacion de Gestión típica de muchos de nosotros ?....ahhh y se me
> olvidaba ¿ Que es un meta código ? , ¿ Por que podremos disponer de tipos
> de Datos como C ? ....¿ Que optimizaremos de C ?....¿ Que influencia
> tendrá para poder generar código .Net , JAVA ? .....a ver si iluminais un
> poco.....que esta oscuro.
>
> Saludos.
>
> Gracias.
>
> Antonio F. Ortega
>
Manu Exposito
Mensajes: 116
Registrado: Mié Feb 08, 2006 4:41 pm

Harbour genera codigo nativo...

Mensaje por Manu Exposito »

No voy a extenderme mucho pero me gustaria darte al menos unas pequeñas
nociones...
En primer lugar con el avance propuesto en Harbour se quita de en medio una
"capa", esto ya se traduce en mayor velocidad y ademas se gana en otras
como
por ejemplo la generacion de codigo distinto al puramente C.
En la actualidad hay un problema para los compiladores tradicionales y
es el
salto a los 64 bit... seguro que todos los compiladores tradicionales lo
haran pronto y otros como el C Borland se quedaran definitivamente en el
camino, o sea no habra Borland C de 64 bit. Ademas si se consigue generar
codigo IL el compilador estandar de MS sera capaz de compilarlo.
Pero realmente tu apuntas otras mejoras y es la capacidad que se podria
tener para inercambiar variables entre las funciones hechas en C y las de
PRG de una manera transparente sin tener que usar el ITEM API.
Otra es la ganancia de velocidad que al fin al cabo es lo mas importante ya
que como apunta JA tambien es un factor importante la seguridad de la
inexistencia de BUG, y esta tecnologia no incrementa ni mucho menos la
posibilidad de que aparezca alguno desconocido.
En cuanto al aumento del ejecutable no va relacionado con la posible
perdida
de tiempo de ejecucion... tanto es asi que casi todos los compiladores de C
te dan a elegir entre mayor velocidad o tamaño del ejecutable. El aumento
del tamaño y la disminucion de tiempos de ejecucion viene dado por
optimizacion de codigo interno, sobre todo en bucles...
Ah!! el metacodigo...
Es lo que estan haciendo MS con la plataforma .NET o Sum Microsystem y
otras
empresas con Java.
En definitiva la posibilidad de programar en cualquier lenguaje y
generar el
mismo codigo.
En la plataforma .NET todos los lengujes (VB, VC, C#, etc) genran un codigo
intermedio compatible que es compilado por un compilador comun para generar
codigo nativo o pcode. Esto supone por ejemplo que pueder crear una LIB en
VB y ser usada sin problemas en programas desarrollados en C#...
Espero que esto no haya llegado a ser un toston y que mas o menos te haya
aclarado un poquito por donde van los tiros... a esta altura de la pelicula
ademas de seguridad a pruebas de bug hay que pedir optimizacion de
velocidad
de ejecucion...
Antonio F. Ortega escribió:
> Jose, Manu ....estoy confuso......ya que Jose habla de una "(todaví­a)
> pequeña" ganacia de velocidad y Manu de una ganancia de velocidad que no es
> "moco 'e pavo', leí­ en el changelog, que la ganancia es entre el 10 y el 50
> %.....bien hasta ahí­ se podria pensar que es una "ganancia importante", pero
> claro surge lo del tamaño del ejecutable....y es aquí­ donde me pierdo....¿
> tiene influencia el tamaño del .exe con la cantidad de memoria ocupada y con
> la perdida de velocidad ? ...en consecuencia ¿ es real ese incremento entre
> el 10 o el 50% ? ......¿ cual serí­a el "balance" lógico ?......y por último
> a ver si termino de entender...que tipo de software se beneficia con este
> cambio , Xailer ( entiendase GUI's ) o la aplicacion de Gestión tí­pica de
> muchos de nosotros ?....ahhh y se me olvidaba ¿ Que es un meta código ? , ¿
> Por que podremos disponer de tipos de Datos como C ? ....¿ Que optimizaremos
> de C ?....¿ Que influencia tendrá para poder generar código .Net , JAVA ?
> .....a ver si iluminais un poco.....que esta oscuro.
>
> Saludos.
>
> Gracias.
>
> Antonio F. Ortega
>
>
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Harbour genera codigo nativo...

Mensaje por jfgimenez »

Manu,
> De momento la velocidad, tal vez a cambio del tamaño... pero a quien le
> importa ahora el tamaño de un EXE?
No comments ;-)
> Por otro lado se podria decir que la generacion de otros codigos estarian
> muy cerca sin practicamente cambios en el compilador... me estoy acordando
> de Java y codigo intermedio .NET (IL).
Repito que no conviene lanzar las campanas al vuelo. Java, el código de .NET
y el código xbase son muy distintos entre sí y no es una tarea trivial. Por
supuesto que se puede hacer lo que se ha hecho ya, que es convertir una cosa
en otra sin más. Pero eso no va a suponer nunca una gran mejora. Para
sacarle partido hay que optimizar el código resultante, y entonces no
estaríamos hablando de "sin practicamente cambios en el compilador".
> Pero repito por ahora lo importante es este avance que hace que se consiga
> casi el doble de velocidad... y eso "no es moco de pavo"
> A que no?
No nos engañemos... el doble de velocidad no es, aunque sí es una mejora
apreciable. Pero te digo una cosa... eso mismo llevan haciendolo durante
años en Alaska xBase++, y estoy seguro de que lo tienen bien optimizado; y
aún así, ¿hay tanta diferencia con [x]Harbour? Que yo sepa, en tamaño de
ejecutable, desde luego que sí; pero en velocidad no es tanta, ya que un 50%
más de velocidad ejecutando pcodes no se traduce en aplicaciones un 50% más
rápidas.
Hay muchos factores que no tienen nada que ver con esto (accesos a funciones
del API, al disco duro, a una BD, procesando mensajes de windows, ejecutando
código escrito en C, etc.) que son exactamente igual en un caso y en otro.
Vamos, que en la mayoría de los casos, más del 90% del tiempo de ejecución
de nuestros programas no está en el pcode, sino en otros sitios; así que,
con este cambio conseguiremos que menos del 10% del tiempo de ejecución de
nuestros programas sea hasta un 50% más rápido.
--
Un saludo,
José F. Giménez
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
miguel
Mensajes: 364
Registrado: Jue Jul 02, 2009 1:09 pm

Harbour genera codigo nativo...

Mensaje por miguel »

Jose F. Gimenez" jfgimenez[ NO-SPAM,
> No nos engañemos... el doble de velocidad no es, aunque sí­ es una
> mejora apreciable. Pero te digo una cosa... eso mismo llevan
> haciendolo durante años en Alaska xBase++, y estoy seguro de que lo
> tienen bien optimizado; y aún así­, ¿hay tanta diferencia con
> [x]Harbour? Que yo sepa, en tamaño de ejecutable, desde luego que sí­;
> pero en velocidad no es tanta, ya que un 50% más de velocidad
> ejecutando pcodes no se traduce en aplicaciones un 50% más rápidas.
> José F. Giménez
Yo llevo programando con Alaska unos pocos de años, desde su primera versión.
Te puedo asegurar que en cuanto a velocidad Xailer en mi opinion va mas rapido
en general con todad funciones de bases de datos y estoy haciendo pruebas
con los mismos ficheros y mismas funciones.
En cuanto al tamaño de los ejecutables, aqui hay una aclaración, el ejecutable
es mas pequeño en Alaska pero se han de suministrar ls DLL's Runtime. Iconveniente:
para una sola aplicacion mucho mas grande. Ventaja si instalamos varias aplicaciones
nos sirven las mismas DLL's con lo cula el tamañño total mas pequeño.
Este es un tema que quizad Xailer debiera contemplar como una opcion en los
proyectos. Me explico, Los modulos Runtime que pudieran estar fuera del ejecutable.
Saludos. Miguel A. Torrellas
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Harbour genera codigo nativo...

Mensaje por jfgimenez »

Miguel,
gracias por la aclaración.
> Yo llevo programando con Alaska unos pocos de años, desde su primera
> versión. Te puedo asegurar que en cuanto a velocidad Xailer en mi opinion
> va mas rapido en general con todad funciones de bases de datos y estoy
> haciendo pruebas con los mismos ficheros y mismas funciones.
Eso demostraría que donde hay que optimizar es por otro lado ;-)
> En cuanto al tamaño de los ejecutables, aqui hay una aclaración, el
> ejecutable es mas pequeño en Alaska pero se han de suministrar ls DLL's
> Runtime. Iconveniente: para una sola aplicacion mucho mas grande. Ventaja
> si instalamos varias aplicaciones nos sirven las mismas DLL's con lo cula
> el tamañño total mas pequeño.
Sí, pero la suma total de las DLL + el EXE estoy seguro de que es mayor en
el caso de Alaska. Es más, estoy también convencido de que el mismo prg
compilado con uno y otro genera un obj más grande en Alaska que en xHarbour.
Y esto es realmente lo que cuenta; al final la RTL es la misma (o casi) para
un programa u otro, pero la cantidad de código de cada programa sí es
distinta.
> Este es un tema que quizad Xailer debiera contemplar como una opcion en
> los proyectos. Me explico, Los modulos Runtime que pudieran estar fuera
> del ejecutable.
Lo tenemos previsto para más adelante. De todos modos, el hecho de usar DLL
tiene el problema de las versiones.
--
Un saludo,
José F. Giménez
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Harbour genera codigo nativo...

Mensaje por jfgimenez »

Antonio,
> Jose, Manu ....estoy confuso......ya que Jose habla de una "(todavía)
> pequeña" ganacia de velocidad y Manu de una ganancia de velocidad que no
> es "moco 'e pavo', leí en el changelog, que la ganancia es entre el 10 y
> el 50 %.....bien hasta ahí se podria pensar que es una "ganancia
> importante", pero claro surge lo del tamaño del ejecutable....y es aquí
> donde me pierdo....¿ tiene influencia el tamaño del .exe con la cantidad
> de memoria ocupada y con la perdida de velocidad ? ...en consecuencia ¿ es
> real ese incremento entre el 10 o el 50% ? ......¿ cual sería el "balance"
> lógico ?......y por último
Creo que ya está contestado en mi anterior respuesta.
> a ver si termino de entender...que tipo de software se beneficia con este
> cambio , Xailer ( entiendase GUI's )
Xailer se podría ver beneficiado muy poco, ya que las rutinas más pesadas
están casi todas escritas en C. No obstante, también hay código en prg que
sí se beneficiaría, pero suele ser código que se ejecuta muy poco. Por
ponerte un ejemplo, casi todo el pintado de controles está escrito en C, por
lo tanto aquí no se gana nada. Pero toda la gestión de teclado está en prg;
aquí sí se ganaría, pero realmente, con un hardware que es capaz de generar
solamente 30 pulsaciones de tecla por segundo, ¿qué necesidad hay de que sea
más rápido?
> o la aplicacion de Gestión típica de muchos de nosotros ?
Bueno, algo se podría ganar en los procesos, pero en general sería muy poco,
ya que como he comentado antes, la mayor parte del tiempo de ejecución del
programa no es pcode.
--
Un saludo,
José F. Giménez
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Harbour genera codigo nativo...

Mensaje por jfgimenez »

Manu,
> En primer lugar con el avance propuesto en Harbour se quita de en medio
> una "capa", esto ya se traduce en mayor velocidad y ademas se gana en
> otras como por ejemplo la generacion de codigo distinto al puramente C.
Ya lo he dicho antes... el código generado actualmente no está para nada
optimizado, y por lo tanto no se gana gran cosa. Y para generar código
distinto de C lo ideal sería generar un metacódigo que después se pueda
optimizar para cada lenguaje concreto. Pero para esto todavía queda
muchísimo camino por recorrer.
> En la actualidad hay un problema para los compiladores tradicionales y es
> el salto a los 64 bit... seguro que todos los compiladores tradicionales
> lo haran pronto y otros como el C Borland se quedaran definitivamente en
> el camino, o sea no habra Borland C de 64 bit.
¿Y qué problema hay? Si no está BCC++ estarán MSVC, GCC, MinGW, PellesC,
Watcom, Digimark, y toda una legión de compiladores de C. Afortunadamente el
lenguaje C es muy portable, y aunque siempre hay algunas diferencias entre
compiladores que hay que corregir, software del tamaño de Xailer se pueden
adaptar de uno a otro en muy poco tiempo.
> Ademas si se consigue generar codigo IL el compilador estandar de MS sera
> capaz de compilarlo.
Por supuesto. Pero entonces, ¿qué haces con todas las características del
lenguaje xbase que no están soportadas en .NET? No creo que sea tan sencillo
hacerlo. Si fuese así, ¿no crees que ya estaría hecho?
> En cuanto al aumento del ejecutable no va relacionado con la posible
> perdida de tiempo de ejecucion... tanto es asi que casi todos los
> compiladores de C te dan a elegir entre mayor velocidad o tamaño del
> ejecutable. El aumento del tamaño y la disminucion de tiempos de ejecucion
> viene dado por optimizacion de codigo interno, sobre todo en bucles...
Eso no es del todo cierto en este caso. Sí es verdad lo que dices de los
compiladores de C, pero el código generado no guarda una relación de hasta 1
a 5 como en el caso de pcode vs llamada en C. En el caso de C, lo normal es
que puedas llegar a tener diferencias de un %5 a un 10% en el mejor de los
casos. Pero en Harbour, generar código C en vez de pcode podría llegar a
triplicar fácilmente el tamaño de los programas.
> En la plataforma .NET todos los lengujes (VB, VC, C#, etc) genran un
> codigo intermedio compatible que es compilado por un compilador comun para
> generar codigo nativo o pcode. Esto supone por ejemplo que pueder crear
> una LIB en VB y ser usada sin problemas en programas desarrollados en
> C#...
Sí y no ;-)
Hasta donde yo sé (y he visto muy poco), lo que llaman el código intermedio
es equivalente a los ficheros .c con pcode que genera actualmente
[x]Harbour. Y el compilador de MS es en realidad un ensamblador que
convierte los ficheros de texto de ese código intermedio en ficheros
binarios con el pcode final; vamos, exactamente igual que hace un
ensamblador: convierte los ficheros fuente con pnemónicos a su
correspondiente código binario. Pero en realidad, ese código intermedio es
ya el pcode (en formato legible, claro está).
Resumiendo, el código intermedio de .NET no es un metacódigo en el mismo
sentido que decía Przemek, sino que es el pcode final. El metacódigo de
comentaba Przemek sería un código intermedio de verdad, que volvería a ser
transformado en una segunda fase al código final que elijamos. Por lo tanto,
el código generado en la primera pasada nada tiene que ver con el código
final.
--
Un saludo,
José F. Giménez
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Manu Exposito
Mensajes: 116
Registrado: Mié Feb 08, 2006 4:41 pm

Harbour genera codigo nativo...

Mensaje por Manu Exposito »

Y lo que se anima el grupo metiendo estos OT?
Yo creo que con esto aprendemos todos...
Y yo si pienso que se gana y mucho ademas de recortes de tiempos.
El bucle de interpretacion del array de pcodes te lo quitas de enmedio.
Con este sistema todo esta mas claro cuando ves el fichero que ha
genrado el compilador harbour a C y eso hara seguro que la optimizacion
sea mas posible... Ademas creo que lei que una optimizacion inmediata
seria la posibilidad de unificar mas de una llamada a la pila con lo que
los acceso se reducirian tambien.
Ademas para los desarrolladores les seria muy facil implementar sistemas
para no tener que pasar siempre por ejemplo Self en los metodos, o la
utilizacion de variables realmente transparentes entre C y PRG, te
imagina la potencia de usar estructuras indistintamente desde C y PRG y
que los cambio del estado de los miembreos de esas estructuras fueran
visibles sin llamar a la pila o el sistema extendido?
Y la posibilidad de crear objetos o diseñar clases enteras desde C?
Creo que es el embrion de algo grande...
Y cuando implementen el WITH OBJECT en Harbour usando la tabla de
simbolos y no un array "perdido"?
Yo voy a meter caña con eso... y espero que hagais lo mismo ;-)
Jose F. Gimenez escribió:
> Antonio,
>
>> Jose, Manu ....estoy confuso......ya que Jose habla de una "(todaví­a)
>> pequeña" ganacia de velocidad y Manu de una ganancia de velocidad que no
>> es "moco 'e pavo', leí­ en el changelog, que la ganancia es entre el 10 y
>> el 50 %.....bien hasta ahí­ se podria pensar que es una "ganancia
>> importante", pero claro surge lo del tamaño del ejecutable....y es aquí­
>> donde me pierdo....¿ tiene influencia el tamaño del .exe con la cantidad
>> de memoria ocupada y con la perdida de velocidad ? ...en consecuencia ¿ es
>> real ese incremento entre el 10 o el 50% ? ......¿ cual serí­a el "balance"
>> lógico ?......y por último
>
> Creo que ya está contestado en mi anterior respuesta.
>
>
>> a ver si termino de entender...que tipo de software se beneficia con este
>> cambio , Xailer ( entiendase GUI's )
>
> Xailer se podrí­a ver beneficiado muy poco, ya que las rutinas más pesadas
> están casi todas escritas en C. No obstante, también hay código en prg que
> sí­ se beneficiarí­a, pero suele ser código que se ejecuta muy poco. Por
> ponerte un ejemplo, casi todo el pintado de controles está escrito en C, por
> lo tanto aquí­ no se gana nada. Pero toda la gestión de teclado está en prg;
> aquí­ sí­ se ganarí­a, pero realmente, con un hardware que es capaz de generar
> solamente 30 pulsaciones de tecla por segundo, ¿qué necesidad hay de que sea
> más rápido?
>
>
>> o la aplicacion de Gestión tí­pica de muchos de nosotros ?
>
> Bueno, algo se podrí­a ganar en los procesos, pero en general serí­a muy poco,
> ya que como he comentado antes, la mayor parte del tiempo de ejecución del
> programa no es pcode.
>
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Harbour genera codigo nativo...

Mensaje por jfgimenez »

Manu,
para terminar con este tema...
Antes no me había dado cuenta, pero hoy Przemek ha hecho lo mismo en
xHarbour, y en su changelog he visto el siguiente párrafo:
The final binaries are noticable longer then the one which has
only PCODE but they are faster. The speed improvement depends
on type of operations. The pure Clipper code which does not
execute any external time consuming C functions compiled with
-gc3 is from 10% to 50% faster.
No sé lo que entendeis vosotros, pero lo que yo entiendo es que la mejora en
velocidad de entre un 10% y un 50% es ejecutando exclusivamente pcode, sin
llamar a ninguna función en C.
Pero hay que tener en cuenta que tanto la RTL de [x]Harbour como las
librerías de cualquier GUI (Xailer, FW, etc.) están escritas en parte en C.
Y además, las partes que están escritas en C suelen ser las partes críticas
o que más veces se ejecutan dentro de un programa.
Por lo tanto, en un programa real, lo correcto sería dividir por 10 esos
valores, quedando la mejora en velocidad entre un 1% y un 5%. Y eso sin
contar el tiempo que se consume dentro de las funciones del propio API de
windows, en espera del motor de BB.DD., esperando una respuesta del HD o de
la red local, etc..
En definitiva, estoy de acuerdo en que es un paso adelante; y no por lo que
ya se ha conseguido, sino por lo que puede venir. Pero de ahí a lanzar las
campanas al vuelo...
--
Un saludo,
José F. Giménez
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Manu Exposito
Mensajes: 116
Registrado: Mié Feb 08, 2006 4:41 pm

Harbour genera codigo nativo...

Mensaje por Manu Exposito »

Ya he visto que esta en xHarbour...
;-)
Que bien... no?
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:442a5d09$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Manu,
>
> para terminar con este tema...
>
> Antes no me había dado cuenta, pero hoy Przemek ha hecho lo mismo en
> xHarbour, y en su changelog he visto el siguiente párrafo:
>
> The final binaries are noticable longer then the one which has
> only PCODE but they are faster. The speed improvement depends
> on type of operations. The pure Clipper code which does not
> execute any external time consuming C functions compiled with
> -gc3 is from 10% to 50% faster.
>
> No sé lo que entendeis vosotros, pero lo que yo entiendo es que la mejora
> en velocidad de entre un 10% y un 50% es ejecutando exclusivamente pcode,
> sin llamar a ninguna función en C.
>
> Pero hay que tener en cuenta que tanto la RTL de [x]Harbour como las
> librerías de cualquier GUI (Xailer, FW, etc.) están escritas en parte en
> C. Y además, las partes que están escritas en C suelen ser las partes
> críticas o que más veces se ejecutan dentro de un programa.
>
> Por lo tanto, en un programa real, lo correcto sería dividir por 10 esos
> valores, quedando la mejora en velocidad entre un 1% y un 5%. Y eso sin
> contar el tiempo que se consume dentro de las funciones del propio API de
> windows, en espera del motor de BB.DD., esperando una respuesta del HD o
> de la red local, etc..
>
> En definitiva, estoy de acuerdo en que es un paso adelante; y no por lo
> que ya se ha conseguido, sino por lo que puede venir. Pero de ahí a lanzar
> las campanas al vuelo...
>
> --
> Un saludo,
>
> José F. Giménez
>
Responder