En programación informática , COMEFROM es una instrucción de control de flujo que hace que el flujo de control salte a la instrucción siguiente cuando el control alcanza el punto especificado por el argumento COMEFROM. Esta instrucción pretende ser lo opuesto a goto y se considera más una broma que una norma seria de informática . A menudo, el punto de salto especificado se identifica con una etiqueta . Por ejemplo, especifica que cuando el control alcanza la etiqueta , el control continúa en la instrucción siguiente a COMEFROM.COMEFROM xx
Una diferencia importante con goto es que goto depende de la estructura local del código, mientras que COMEFROM depende de la estructura global. Una instrucción goto transfiere el control cuando este llega a dicha instrucción, pero COMEFROM requiere que el procesador (es decir, el intérprete) busque instrucciones COMEFROM para que, cuando el control alcance cualquiera de los puntos especificados, el procesador pueda realizar el salto. La lógica resultante suele ser difícil de comprender, ya que no hay ninguna indicación cerca de un punto de salto que indique que el control saltará efectivamente. Es necesario analizar todo el programa para ver si alguna instrucción COMEFROM hace referencia a ese punto.
La semántica de una instrucción COMEFROM varía según el lenguaje de programación . En algunos lenguajes, el salto se produce antes de que se ejecute la instrucción en el punto especificado, y en otros, después. Dependiendo del lenguaje, varias instrucciones COMEFROM que hagan referencia al mismo punto pueden ser inválidas, no deterministas, ejecutarse en un orden determinado o inducir un procesamiento paralelo o concurrente, como se observa en Threaded Intercal .
COMEFROM apareció inicialmente en listas de instrucciones de lenguaje ensamblador de broma (como 'CMFRM'). Fue desarrollado en un artículo de Datamation de R. Lawrence Clark en 1973, [ 1 ] escrito en respuesta a la carta de Edsger Dijkstra titulada "La instrucción Go To se considera perjudicial" . COMEFROM finalmente se implementó en la variante C-INTERCAL del lenguaje de programación esotérico INTERCAL junto con el aún más oscuro 'COMEFROM calculado'. También hubo propuestas en Fortran [ 2 ] para 'COME FROM asignado' y una instrucción 'DONT' (para complementar el bucle 'DO' existente).
Ejemplos
BÁSICO
El siguiente código corresponde a un dialecto BASICCOMEFROM hipotético . Solicita un nombre, saluda con ese nombre y repite el proceso. La línea 40 es el punto de salto especificado por COMEFROM, por lo que cuando el control llega a la línea 40, salta a la línea 10.
10 COMEFLE 40 20 ENTRADA "¿CUÁL ES SU NOMBRE?" ; A$ 30 IMPRIMA "HOLA, " ; A$ 40 REMPitón
El 1 de abril de 2004, Richie Hindle publicó una implementación de COMEFROM para Python que utiliza ganchos de depuración. A pesar de haber sido publicada el Día de los Inocentes y no estar destinada a un uso serio, la sintaxis es válida y la implementación funciona completamente. [ 3 ]
El código que aparece a continuación, que de hecho es ejecutable, utiliza esta implementación de Python.
desde ir a importar comefrom , etiqueta comefrom . repetirnombre : str = raw_input ( "¿ Cuál es tu nombre?" ) if nombre : print ( f "Hola, { nombre } " ) label.repeat print ( "¡Adiós!" )Rubí
Esta es una implementación en Ruby de la instrucción COME FROM de Intercal.
$come_from_labels = {}def etiqueta ( l ) si $come_from_labels [ l ] $come_from_labels [ l ]. llamar fin findef come_from ( l ) callcc do | block | $come_from_labels [ l ] = block end endOS/360 Fortran G
En el paquete de depuración del compilador Fortran G de OS/360, la ATinstrucción actúa como COMEFROM, ya que transfiere el flujo de control al bloque de depuración , de forma similar a un punto de interrupción . [ 4 ]
En el siguiente código, los valores de SOLON, GFAR, y EWELLse examinan como estaban al finalizar la instrucción 10. La ATinstrucción indica la instrucción 11.
ENTERO SOLON , GFAR , EWELL ... 10 SOLON = GFAR * RAÍZ CUADRADA ( FLOTANTE ( EWELL ) ) 11 SI ( SOLON ) 40 , 50 , 60 ... DEPURACIÓN UNIDAD ( 3 ) EN 11 MOSTRAR GFAR , SOLON , EWELL FINEn el siguiente código, los valores STOCKse muestran cuando se encuentra la instrucción 35.
DIMENSION STOCK ( 1000 ), OUT ( 1000 ) . . . DO 30 I = 1 , 1000 25 STOCK ( I ) = STOCK ( I ) - OUT ( I ) 30 CONTINUE 35 A = B + C . . . DEBUG UNIT ( 3 ) AT 35 MOSPLAY STOCK ENDEn el siguiente código, el seguimiento comienza en la instrucción 10, se detiene en la instrucción 20 mientras se ejecuta el bucle y se reanuda después del bucle. El seguimiento se detiene justo antes de que se ejecute la instrucción 30.
10 A = 1.5 12 L = 1 15 B = A + 1.5 20 HACER 22 I = 1 , 5 . . . 22 CONTINUAR 25 C = B + 3.16 30 D = C / 2 DETENER . . . UNIDAD DE DEPURACIÓN ( 3 ), SEGUIMIENTO C PAQUETE DE DEPURACIÓN NÚMERO 1 EN 10 SEGUIMIENTO ACTIVADO C PAQUETE DE DEPURACIÓN NÚMERO 2 EN 20 SEGUIMIENTO DESACTIVADO HACER 35 I = 1 , 3 . . . 35 CONTINUAR SEGUIMIENTO ACTIVADO C PAQUETE DE DEPURACIÓN NÚMERO 3 EN 30 SEGUIMIENTO DESACTIVADO FINVéase también
- Acción a distancia : antipatrón Páginas que muestran descripciones breves de destinos de redirección Páginas que muestran descripciones breves sin espacios
- Continuación – Representación del estado de control de un programa informático
- Disparador de base de datos : código de base de datos que se ejecuta después de ciertos eventos en una tabla.
- Programación orientada a eventos : paradigma de programación informática
- FX Reid – un experto en la semántica de COMEFROM [ 5 ]
- Bloques de enrutamiento de señales Goto/From en MATLAB Simulink
- Punta de corte
- Patrón observador : patrón de diseño de software basado en un objeto que se actualiza mediante eventos y que tiene una lista de dependencias.
- Webhook – Método de desarrollo web
Referencias
- ↑ Clarke, Lawrence , "No sabemos adónde ir si no sabemos de dónde venimos. Esta innovación lingüística cumple con todas las expectativas." , Datamation (artículo), archivado del original el 16 de julio de 2018 , consultado el 24 de septiembre de 2004..
- ↑ Modell, Howard; Slater, William (abril de 1978). "La programación estructurada considerada perjudicial" . ACM SIGPLAN Notices . 13 (4): 76– 79. doi : 10.1145/953411.953418 . Consultado el 18 de julio de 2014 .
- ↑ Hindle, Richie (1 de abril de 2004), goto para Python , Entrian.
- ↑ Lenguaje Fortran IV para IBM System/360 y System/370, GC28-6515-10, mayo de 1974
- ↑ FX Reid, Sobre la semántica formal de la declaración COMEFROM. FACS FACTS , número 2006-1 , páginas 18-20, marzo de 2006.
Enlaces externos
- Página de información de COMO DESDE
- Artículo sobre datamación
- Lista de instrucciones para ensamblar chistes, incluyendo CMFRM
- provenir del soporte para Perl
- Humor informático
- Flujo de control