Article View: es.comp.lenguajes
Article #157Re: Programacion con GOTO
From: Andr�s Gri��
Date: Fri, 17 Nov 2000 00:00
Date: Fri, 17 Nov 2000 00:00
54 lines
3737 bytes
3737 bytes
In article <49a61t8epk5iuuqrr6rvpnp6g0ic1d6nkm@4ax.com>, DrPanic <drpanic_esto_sobra_@teleline.es> wrote:
>On Wed, 15 Nov 2000 22:10:11 GMT, mallok <jsegam@terra.es> wrote:
>
>>"Miguel A. Fuentes" escribi�:
>>
>>> Desde hace mucho tiempo estoy programando y he visto multitud de
>>> aplicaciones, grandes y peque�as, y JAM�S he visto un GOTO, casualidad?
>>
Llevo 20 a�os programando y s�lo utilice goto en Cobol, ya que hab�a
situaciones en las que no tenias alternativas, por las limitaciones del
lenguaje.
Hace poco estaba escribiendo una aplicaci�n, implementada como un
mini-lenguaje de programaci�n orientado especificamente al problema. La
aplicaci�n consta de un compilador que generada c�digo para una m�quina
RISC "virtual" basada en stack y un interprete de implementa dicha m�quina
(que elegante suena!). Todas las instrucciones son del tipo CODIGO_OPERACION
OPERANDO.
El asunto es que cuando comence a trabajar en la optimizaci�n del c�digo
generado finalmente vine a entender lo malo que puede ser el goto.
Este mini-lenguaje carece de goto (carece de muchas cosas, esa es la idea),
por lo que al ir generando c�digo pod�a estar muy seguro del contexto en el
cual se generaba y las optimizaciones que podia aplicar. Por ejemplo, cuando
descubria que estaba generando una secuencia:
- Push variable.
- Incrementar en uno el tope del stack.
- Pop y almacenar valor en variable.
la podia sustituir directamente por una s�la instrucci�n que incrementaba
directamente la variable en memoria, sin pasar por el stack.
Tambi�n aplique algunas optimizaciones a las comparaciones y saltos que se
generan al encontrar if, while, etc., con resultados desastrosos en la
ejecuci�n. Por ejemplo, inocentemente sustitui:
- Comparar stack contra cero.
- Saltar a X si es comparaci�n OK.
por
- Compara stack contra cero y saltar a X (si es comparaci�n es OK).
Lo que no me hab�a percatado es que en el primer caso, la segunda instrucci�n
podia ser el destino de algun goto previo, asi que fundir ambas instrucciones
no iba a producir el resultado deseado originalmente (que eran dos saltos en
cadena).
En resumen: el uso de "goto" destruye el contexto en el cual est�s trabajando.
Si estas en una secci�n a la cual puedes llegar por uno o varios goto, puede
ser d�ficil determinar el contexto en que se ejecuta esa secci�n. Si no sabes
en que estado est�n tus archivos, variables y demases, se hace bien cuesta
arriba escribir c�digo.
Andr�s
Technical Details
Message-ID:
<8v3ebe$9fs3@nova.entelchile.net>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<zXhQ5.698$cQ5.16259@m2newsread.uni2.es> <3A1308F0.C44181D3@terra.es> <49a61t8epk5iuuqrr6rvpnp6g0ic1d6nkm@4ax.com>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: 1135b7,9ebb41239b0c5eaa X-Google-Attributes: gid1135b7,public X-Google-Thread: 1116f3,9ebb41239b0c5eaa X-Google-Attributes: gid1116f3,public X-Google-Thread: 105378,9ebb41239b0c5eaa X-Google-Attributes: gid105378,public X-Google-Thread: f86c8,9ebb41239b0c5eaa X-Google-Attributes: gidf86c8,public X-Google-Thread: f78ff,9ebb41239b0c5eaa X-Google-Attributes: gidf78ff,public X-Google-Thread: 10d088,9ebb41239b0c5eaa X-Google-Attributes: gid10d088,public X-Google-Thread: f59de,9ebb41239b0c5eaa X-Google-Attributes: gidf59de,public From: agrino@yahoo.com (Andr�s Gri��) Subject: Re: Programacion con GOTO Date: 2000/11/17 Message-ID: <8v3ebe$9fs3@nova.entelchile.net> X-Deja-AN: 697180148 References: <zXhQ5.698$cQ5.16259@m2newsread.uni2.es> <3A1308F0.C44181D3@terra.es> <49a61t8epk5iuuqrr6rvpnp6g0ic1d6nkm@4ax.com> Organization: What? Newsgroups: es.comp.lenguajes,es.comp.lenguajes.java,es.comp.lenguajes.misc,es.comp.os.linux.programacion,es.comp.os.ms-windows.programacion,es.foro.lenguajes,esp.comp.so.linux.programacion