*** Curso de C para programadores Harbour.

Re: *** Curso de C para programadores Harbour.

Postby hmpaquito » Thu Apr 01, 2021 2:25 pm

> Tienes un ejemplo simple que lo reproduzca ?

Este codigo romperá antes de alcanzar los 8 Gb que son la mitad de ram. Supongo que rompe por la fragmentacion de memoria. Sólo quería saber por qué Harbour no aprovecha fragmentos de memoria más pequeños, sólo era una simple curiosidad
c=""
do while .t.
c+= Space(1024)

if len(c) > 1024* 1024* 8000
exit
endif
enddo
? "Prueba superada"

BTW. He visto un interesante trozo de codigo https://groups.google.com/g/harbour-use ... l6m-HanN8J
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: *** Curso de C para programadores Harbour.

Postby hmpaquito » Thu Apr 01, 2021 2:36 pm

Yo tampoco sé programar a nivel avanzado.

Creo que para programar a nivel avanzado hace falta conocer tecnicas de programación, como comentaba Víctor Casajuana en otro mensaje.
Lo que sí sé es que antes de lanzarse a hacer un programa hay que coger una parcela de terreno grande y no usar USE, sino un ORM (btw Eric está en uno), no usar funciones particulares, sino tener una biblioteca de funciones compartida entre proyectos, en las funciones no devolver un resultado, sino un objeto o un array, que permitirá devolver más cosas cuando se necesiten, no usar un parámetro al llamar a una funcion, sino un objeto... Y asi, otras cosas

Harbour es un lenguaje, al menos me lo parece, muy maduro y con muchas posibilidades. El curso de C nos puede ayudar mucho a conocer Harbour.
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: *** Curso de C para programadores Harbour.

Postby Antonio Linares » Thu Apr 01, 2021 5:40 pm

Paco,

Harbour tiene un flag que hace que en vez de generar pcode, se genere código en C con las llamadas a las funciones a donde salta el pcode.
Usando ese flag podemos ver como Harbour hace determinadas cosas desde C.

Ahora bien, la velocidad entre uno y otro sistema es practicamente la misma. La clave de usar C es poder hacer lo que no podemos hacer con Harbour y/o que la mejora de velocidad sea realmente importante.

Si no hay mejora sustancial de velocidad, no tiene sentido programar algo en C puesto que a nivel PRG somos mucho más productivos.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: *** Curso de C para programadores Harbour.

Postby hmpaquito » Thu Apr 01, 2021 7:10 pm

Precisamente, hace poco se ha otorgado el premio Turing, que es el nobel de informatica. Los galardonados han sido dos diseñadores de compiladores que supuestamente en los 70 pusieron las bases de los compiladores, aunque Cobol y Fortran ya rulaban en los 50 :roll:

https://www.xataka.com/historia-tecnolo ... mpiladores
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: *** Curso de C para programadores Harbour.

Postby Antonio Linares » Fri Apr 02, 2021 6:12 am

El libro del Dragón... que buenos recuerdos :-)

Harbour existe, en parte, gracias a ese libro
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: *** Curso de C para programadores Harbour.

Postby elvira » Fri Apr 02, 2021 10:12 am

A ver si nos escribes algo Maestro...
elvira
 
Posts: 516
Joined: Fri Jun 29, 2012 12:49 pm

Re: *** Curso de C para programadores Harbour.

Postby VictorCasajuana » Fri Apr 02, 2021 1:52 pm

hmpaquito wrote:Yo tampoco sé programar a nivel avanzado.

Creo que para programar a nivel avanzado hace falta conocer tecnicas de programación, como comentaba Víctor Casajuana en otro mensaje.
Lo que sí sé es que antes de lanzarse a hacer un programa hay que coger una parcela de terreno grande y no usar USE, sino un ORM (btw Eric está en uno), no usar funciones particulares, sino tener una biblioteca de funciones compartida entre proyectos, en las funciones no devolver un resultado, sino un objeto o un array, que permitirá devolver más cosas cuando se necesiten, no usar un parámetro al llamar a una funcion, sino un objeto... Y asi, otras cosas

Harbour es un lenguaje, al menos me lo parece, muy maduro y con muchas posibilidades. El curso de C nos puede ayudar mucho a conocer Harbour.


Has dado unos detalles muy acertados ( a mi manera de ver las cosas ), justamente ahora mismo estoy en un "stand by" en mis programas, he decidido hacer una pausa y refactorizar mi código con técnicas de programación aprendidas estos últimos años. Al principio parece algo impensable por la gran cantidad de código generado en años, pero conforme vas escribiendo código nuevo y reemplazando lo anterior (refactorizando) te das cuenta que el error es no haberlo echo antes. Me metí con los scalares (gracias al maestro Cristobal Navarro que me enseñó sobre su existencia), luego con el Testing ( gracias a Manuel Calero) ahora montando un ORM como Eloquent de Laravel ( he visto varios en FW y HB pero no me acaban de convencer del todo ) y el código nuevo que va saliendo me sorprende de lo "legible" que es, escueto, robusto y escalable. Pasando por detalles como los que has comentado; pasar objetos a los métodos como parámetros, devolver objetos ( en mi caso utilizo un TReturn ) que te dice si está ok o no el resultado y te devuelve más información ( como si de una llamada a un API se tratase ). Y ahora con la posibilidad de tener un curso C<->Harbour para poder "bajar" un escalón y tener aún más opciones abiertas.
Ganas ya de empezar y un agradecimiento enorme al "Profesor" que lo hace posible. :wink:
--------
¿ Y porque no ?
¿ And why not ?
User avatar
VictorCasajuana
 
Posts: 265
Joined: Wed Mar 28, 2018 4:38 pm
Location: Vinaròs

Re: *** Curso de C para programadores Harbour.

Postby xmanuel » Sat Apr 03, 2021 7:06 pm

Hola a todos, a medida que voy escribiendo se depura un poco más el indice del libro:
Code: Select all  Expand view  RUN

Harbour y Lenguaje C.

    1. Prólogo y propósito del curso.
    2. Herramientas necesarias para el curso.
    3. Un poco de C
    4. Operadores.
    5. Estructuras de control.
    6. Tipos de datos elementales de C
    7. Tablas en C. Vectores, matrices y tablas multidimensionales.
    8. Tipos de datos estructurados: estructura, uniones y enumeraciones.
    9. Creando nuestros propios tipos: uso de typedef.
    10. Los punteros de C.
    11. Reserva y liberación de memoria dinámica.
    12. Algunos conceptos básicos sobre la Máquina virtual (VM), pila (stack) y Tabla de símbolos (symbol table) de Harbour.
    13. Sistema extendido y el Item API.
    14. Cómo compilar código C en nuestros PRG
    15. Crear funciones en C que se pueden utilizar desde PRG.
    16. Paso de parámetros de todos los tipos C, M, N, L, A, H
    17. Retorno de variables de tipo C, M, N, L, A, H
    18. Paso de variables por referencia C, M, N, L, A, H
    19. Manipulación de variables dentro de la función en C.
    20. Manipulación de arrays de entrada y salida: Vectores y arrays multidimensionales
    21. Manipulación de tablas hash
    22. Manipulación de estructuras, uso de funciones puente.
    23. Uso de funciones librerías externas. 
    24. El mundo al revés: Llamada desde C a funciones de Harbour?
    25. Pon una DLL en tu vida: “Wrappear” funciones de una librería dinámica. 
    26. Creando nuestras propias librerías.
 

La primera parte pasaré de puntillas, es puro C, tengo hechas las 6 primeras lecciones. A partir de ahora viene lo interesante vectores, matrices arrays multidimensionales, estructuras punteros etc.
Y luego ya el C para Harbour.

Os recuerdo que tenéis que escribir a mi correo hdoenv arroba gmail.com para suscribiros...

Finalmente abriré un slack para las preguntas más que un grupo de noticias.
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 762
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: *** Curso de C para programadores Harbour.

Postby xmanuel » Sat Apr 03, 2021 8:01 pm

Realmente qué es programación avanzada en un lenguaje?

Aprovechar los recursos que te presta ese lenguaje de una manera óptima.
Deberíamos primero a aprender a programar con un código limpio y bien estructurado.
Luego deberíamos adentrarnos en la POO que nos brinda Harbour que es super potente.
Y aplicar técnicas como la programación lineal
Code: Select all  Expand view  RUN

if a > 10
    lRet := .t.
else
    lRet := .f.
endif
 

Pasaríamos a esta otra:
Code: Select all  Expand view  RUN

lRet := if(  a > 10, .t., .f. )
 

Y por último a la programacón lineal
Code: Select all  Expand view  RUN

lRet := ( a > 10 )
 

Estas pequeñas cosas marcan diferencias.
Otro ejemplo:
Code: Select all  Expand view  RUN

for i := 1 to len( a )
    ...
next
 

Es más ótimo
Code: Select all  Expand view  RUN

nLen :=  len( a )
for i := 1 to nLen
    ...
next
 

Lógicamente para poder usar los recursos que te da Harbour previamente tienes que saber que existen.
En cuanto a tu programa de estrés de memoria está claro que la va a agotar en un momento indeterminado ya que no sabemos los los programas que están cargados en ese momento.
Deberíamos de implementar técnicas de swapping a disco duro incluso con estadísticas de uso de solo tener en memoria lo que se está utilizando o lo más utilizado.
Harbour tiene casi todo en alto nivel y además muy optimizado, pero muchas funciones se podrían mejorar haciéndolas en C
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 762
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: *** Curso de C para programadores Harbour.

Postby xmanuel » Sun Apr 04, 2021 6:39 am

Ya está creado el Slack del curso donde podremos compartir preguntas, explicaciones y código...
:roll: :D
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 762
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: *** Curso de C para programadores Harbour.

Postby Enrico Maria Giordano » Sun Apr 04, 2021 6:53 pm

xmanuel wrote:
Code: Select all  Expand view  RUN
lRet := ( a > 10 )


Or even clearer:

Code: Select all  Expand view  RUN
lRet := a > 10


EMG
User avatar
Enrico Maria Giordano
 
Posts: 8718
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Re: *** Curso de C para programadores Harbour.

Postby Enrico Maria Giordano » Sun Apr 04, 2021 6:55 pm

xmanuel wrote:
Code: Select all  Expand view  RUN
nLen :=  len( a )
for i := 1 to nLen
    ...
next


Yes, but this is an optimization, not a clarification of the code. And it's probably not much effective.

EMG
User avatar
Enrico Maria Giordano
 
Posts: 8718
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Re: *** Curso de C para programadores Harbour.

Postby xmanuel » Sun Apr 04, 2021 10:00 pm

Para mi es más claro y sobre todo es más óptimo:
En cada iteración se evalúa el len( a ) y eso es más lento que interrogar a la variable directamente.

Realmente hay muchísima mejoras en el código que hacen que los programas sean un poco más rápido.
Hay que prestar mucha atención a los bucles.

De todas maneras está bien que aportes ideas. :roll:
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 762
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: *** Curso de C para programadores Harbour.

Postby cnavarro » Sun Apr 04, 2021 11:18 pm

Alguna cosilla más

Code: Select all  Expand view  RUN

   local aNums         := { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
   local nSum := 0
   
   hb_ForNext( 1, Len( aNums ), { | i | nSum += aNums[ i ] }  )
   ? nSum
 

Code: Select all  Expand view  RUN

   local aNums         := { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
   local nSum := 0
   hb_ForNext( 1, Len( aNums ), < | i |
                                    nSum += aNums[ i ]
                                    Return nSum
                                > )
   ? nSum
 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: *** Curso de C para programadores Harbour.

Postby xmanuel » Mon Apr 05, 2021 2:40 pm

Cristobal eso es una función que hizo Antonio hace años. No sé si en las últimas versiones de Harbour sigue existiendo.
De todos modos también se le puede aplicar la optimización:
Code: Select all  Expand view  RUN


   local aNums         := { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
   local nSum := 0
   local nLen :=  Len( aNums )
   
   hb_ForNext( 1, nLen, { | i | nSum += aNums[ i ] }  )
   ? nSum
 

Lo mismo pero usando un CB extendido:
Code: Select all  Expand view  RUN


   local aNums         := { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
   local nSum := 0
   local nLen :=  Len( aNums )
   hb_ForNext( 1, nLen, < | i |
                                    nSum += aNums[ i ]
                                    Return nSum  // Seguramente esta linea sobra ya que nSun es una variable local de la función
                                > )
   ? nSum
 
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 762
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

PreviousNext

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 38 guests