[OT] Compilación parcial

José Pablo Fonfría jpablo.fonfria en gmail.com
Vie Jun 6 23:43:52 BST 2008


Hola Marco Aurelio,

Marco Aurelio Moncada Coello escribió:
> El día 6 de junio de 2008 10:41, José Pablo Fonfría
> <jpablo.fonfria en gmail.com> escribió:
>> Hola Marco Aurelio,
>>
>>> Mira no has dicho mucho de tu programa pero me late que 15000 lineas
>>> de código es demasiado.
>> Yo también lo creo pero no puedo reducirlo demasiado.
>> El problema es bastante complejo. Seguro que puedo
>> reescribir partes del programa de tal modo que se
>> reduzca el número de líneas de código pero seguro que
>> me sigo manteniendo en 13 ó 14000.
> 
> Mira si hay forma de reducirlo, una secuencia del programa hace una
> suma por ejemplo, y esta se repite en varias partes del programa, y es
> un código no se de 100 lineas, puedes hacer una subrutina, que
> únicamente haga la suma, y te mande el resultado.
> 
> Si por ejemplo es para clasificar por un método ordenado tipo burbuja,
> de un arreglo, y es de no se 300 lineas, puedes hacer una subrutina.
> 
> Esto de las subrutina, son programa menores, que son llamados por el
> programa principal, y con esta forma tu reduces en mucho la
> utilizacion de memoria y el tiempo de compilacion.
> 
>>> Los programas para hacerlos mas cortos deben ser modulares, esto es
>>> que cada programa haga una sola función.
>>>
>>> Bueno los programas debes ser modulares, esto es lo siguiente, si tu
>>> programa muestra un menú, y este tiene opciones, cada una de las
>>> opciones debe de ser un programa, así se reduce el programa en si. Por
>>> que, en lugar de tener uno, pongamos el ejemplo de alta, bajas y
>>> cambios, y además consultas.
>> El programa que tengo se compone de uno principal y
>> muchas subrutinas, de tal modo que llamo a varias de
>> estas subrutinas en diferentes partes del programa
>> completo. Como te digo, estoy seguro de que se puede
>> reducir pero no excesivamente. He tratado en la medida
>> de lo posible de utilizar subrutinas siempre que me
>> repitiera en el código, aunque sólo fuera una vez
>> (quién sabe, si hay una repetición, en algún momento
>> puede haber 2, 3, etc.). Aún así, el código es muy grande.
> 
> No conozco tu programa, pero todo programa se compone de una entrada,
> un proceso y una salida.
> 
> En la entrada lees los datos de los archivos, puede ser que cada
> lectura lo hagas en
> una subrutina.
> 
> En el proceso, interviene posiblemente lectura a otro archivo, y con
> este puedes hacer cálculos, los cuales puede ser generados por una
> subrutina, y esta subrutina, puede llamar las rutinas de lectura.
> 
> programa principal
> programa de lectura
> programa de proceso
> programa de resultados
> 
> En el programa de lectura
> Puedes llamar una subrutina para leer el archivo maestro
> Dependiendo de una llave proveniente del archivo maestro lees el archivo dos
> Salida
> 
> En el programa de proceso
> Dependiendo de los cálculos llamas la subrutina de lectura del archivo dos
> programa de cálculos
> salida
> 
> En el programa de cálculos
> Llamas la subrutina de lectura del archivo dos
> salida
> 
> En el programa de resultados
> Sacas un reporte
> Y llamas a la subrutina de lectura del archivo dos
> Salida
> 
> Se puede reducir, no se tus requerimientos
> 
> 
>>> No se si sea el caso tuyo, así reduces el código, y el tiempo de
>>> compilacion, así como el espacio real de memoria, por que, en lugar de
>>> cargar todo el programa gigante, solo cargas en memoria el programa
>>> que trabajara. Suerte y saludos
>> Inicialmente escribí el programa en FORTRAN77 y lo
>> acabo de pasar a FORTRAN90. Eso sí, aún no me falta
>> incluir la gestión dinámica de memoria para hacerlo más
>> eficiente. A ver si en unas semanas puedo comenzar con
>> ello...
> 
> Yo diría que inicialmente es recomendable hacer un diagrama de flujo
> 
>> Me parece interesante lo de la reducción de memoria. No
>> soy programador por lo que tengo agujeros en mis
>> conocimientos al respecto. ¿Que un programa sea modula
>> significa que el código está compuesto por subrutinas
>> como en mi caso o que está compuesto por muchos
>> programas compilados y unos llaman a otros a través del
>> sistema operativo? En el caso de ser esto último, ¿el
>> construir así el programa agilizaría la ejecución o la
>> ralentizaría? Es un programa de cálculo de datos y me
>> interesa bastante el tiempo de ejecución.
> 
> En el diagrama de flujo, ves todo el programa y que hace y puedes
> encontrar partes repetidas, mas facilmente.
> 
> Que solamente ver el código, por que, ....
> 
> Yo cuando tenia dudas de que hacia un programa que no programe me
> hacia primero dependiendo linea por linea lo que hacia el código por
> medio de un diagrama de flujo.
> 
> Así terminaba mas claro, que hacia realmente el programa y con su
> respectiva prueba con el mismo diagrama, para evitar problema futuros.

Sí, es cierto lo de las subrutinas para trozos pequeños 
de código. Hasta el momento únicamente he considerado 
pedazos bastante grandes. Supongo que buscar siempre lo 
repetido y tratar de sustituirlo razonablemente en el 
mejor de los métodos.

En cuanto al diagrama de flujo, trataré de hacerlo 
aunque me va a llevar un tiempecillo...

En fin, muchas gracias por tus comentarios.

Un saludo.

Pablo.



Más información sobre la lista de distribución ubuntu-es