Saltar al contenido

Tiempo de ejecución frente a tiempo de compilación

Solución:

La diferencia entre el tiempo de compilación y el tiempo de ejecución es un ejemplo de lo que los teóricos puntiagudos llaman el distinción de fase. Es uno de los conceptos más difíciles de aprender, especialmente para personas sin mucha experiencia en lenguajes de programación. Para abordar este problema, me resulta útil preguntar

  1. ¿Qué invariantes satisface el programa?
  2. ¿Qué puede salir mal en esta fase?
  3. Si la fase tiene éxito, ¿cuáles son las poscondiciones (qué sabemos)?
  4. ¿Cuáles son las entradas y salidas, si las hay?

Tiempo de compilación

  1. El programa no necesita satisfacer invariantes. De hecho, no es necesario que sea un programa bien estructurado. Podrías alimentar este HTML al compilador y verlo vomitar …
  2. Qué puede salir mal en tiempo de compilación:
    • Errores de sintaxis
    • Errores de verificación de tipo
    • (Rara vez) el compilador se bloquea
  3. Si el compilador tiene éxito, ¿qué sabemos?
    • El programa estaba bien formado, un programa significativo en cualquier idioma.
    • Es posible comenzar a ejecutar el programa. (El programa puede fallar inmediatamente, pero al menos podemos intentarlo).
  4. ¿Cuáles son las entradas y salidas?
    • La entrada fue el programa que se estaba compilando, más los archivos de encabezado, interfaces, bibliotecas u otro vudú que necesitaba importar para poder ser compilado.
    • Es de esperar que la salida sea un código ensamblador o un código de objeto reubicable o incluso un programa ejecutable. O si algo sale mal, la salida es un montón de mensajes de error.

Tiempo de ejecución

  1. No sabemos nada acerca de las invariantes del programa, son lo que sea que haya introducido el programador. Las invariantes en tiempo de ejecución rara vez son aplicadas por el compilador solo; necesita ayuda del programador.
  2. ¿Qué puede salir mal? errores en tiempo de ejecución:

    • División por cero
    • Desreferenciar un puntero nulo
    • Quedarse sin memoria

    También pueden existir errores que sean detectados por el propio programa:

    • Intentando abrir un archivo que no está ahí
    • Intentar encontrar una página web y descubrir que una supuesta URL no está bien formada
  3. Si el tiempo de ejecución tiene éxito, el programa finaliza (o continúa) sin fallar.
  4. Las entradas y salidas dependen totalmente del programador. Archivos, ventanas en pantalla, paquetes de red, trabajos enviados a la impresora, lo que sea. Si el programa lanza misiles, eso es una salida, y ocurre solo en tiempo de ejecución 🙂

Pienso en ello en términos de errores y cuándo se pueden detectar.

Tiempo de compilación:

string my_value = Console.ReadLine();
int i = my_value;

A un valor de cadena no se le puede asignar una variable de tipo int, por lo que el compilador lo sabe con certeza en tiempo de compilación que este código tiene un problema

Tiempo de ejecución:

string my_value = Console.ReadLine();
int i = int.Parse(my_value);

Aquí el resultado depende de qué cadena fue devuelta por ReadLine (). Algunos valores se pueden analizar en un int, otros no. Esto solo se puede determinar en tiempo de ejecución

Tiempo de compilación: el período de tiempo en el que usted, el desarrollador, está compilando su código.

Tiempo de ejecución: el período de tiempo durante el cual un usuario está ejecutando su pieza de software.

¿Necesitas una definición más clara?

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *