Una fase del ciclo de vida de un programa es un período de tiempo específico relevante para su funcionamiento, desde el desarrollo hasta la ejecución . Cualquier período en el ciclo de vida de un programa en el que cambie su estado operativo puede identificarse como un tiempo. Por ejemplo, el tiempo de compilación es cuando se compila un programa y el tiempo de enlace es cuando se enlaza. Además, las fases suelen dividirse en fases componentes. Por ejemplo, el tiempo de construcción podría dividirse en tiempo de compilación y enlace, el tiempo de compilación en tiempo de análisis sintáctico y generación de código, y el tiempo de ejecución en tiempo de inicialización y operación normal.
Un programa tiende a pasar por fases en secuencia, pero a menudo no de principio a fin, y a veces se omiten algunas. Por ejemplo, al programar , un desarrollador puede editar, compilar y ejecutar repetidamente un programa sin distribuirlo ni instalarlo. Una vez finalizada la programación, puede distribuirse e instalarse por un usuario .
Si bien el término « fase del ciclo de vida del programa » no es muy conocido, las distintas fases son bien conocidas, de uso común y relevantes. En este artículo se utiliza el término colectivo por falta de uno mejor.
Ejemplos
Las fases operativas de un programa varían según su tecnología de desarrollo. Por ejemplo, un programa compilado incluye fases de compilación y enlace, mientras que un programa interpretado no las tiene (es decir, se distribuye como código fuente). Incluso para los programas compilados, las fases varían. Por ejemplo, algunos entornos de ejecución (como .Net y Java ) incluyen una fase de compilación justo a tiempo , mientras que los entornos de ejecución más tradicionales (como C ) no la incluyen.
Las fases para un programa que se compila a un ejecutable nativo del host normalmente incluyen:
- Tiempo de diseño (o tiempo de edición)
- Cuando se está escribiendo el código fuente del programa . Esto incluye la codificación inicial, así como la corrección de errores , nuevas funcionalidades y la refactorización . [ 1 ]
- Tiempo de compilación
- Cuando el código fuente se compila a código objeto ( código máquina más información para el enlace). [ 2 ]
- Tiempo de enlace
- Cuando se enlazan el código objeto y las bibliotecas externas (se combinan para formar un ejecutable). Las funciones y los datos de una biblioteca se enlazan mediante enlace estático (que se realiza en tiempo de enlace) o enlace dinámico (que se realiza en tiempo de carga). [ 3 ]
- Tiempo de distribución
- Cuando el programa se transfiere a un usuario (por ejemplo, descargado de Internet o a través de un medio físico como una unidad flash USB ).
- Tiempo de instalación
- Cuando se instala el programa , el archivo ejecutable y los archivos relacionados se almacenan de manera que el ordenador anfitrión pueda ejecutar el programa fácilmente. [ 4 ]
- Tiempo de carga
- Cuando se carga el programa , incluyendo la copia del código máquina en la memoria ejecutable y la resolución de los enlaces dinámicos. [ 5 ] [ 6 ]
- Tiempo de ejecución
- Cuando el programa se está ejecutando , la unidad central de procesamiento ejecuta las instrucciones del código máquina del programa. [ 7 ] [ 8 ]
Usar
Describa el tiempo de unión
El tiempo de vinculación describe si la asociación entre entidades se establece antes (temprana) o después (tardía) de que el programa comience a ejecutarse. Las fases descritas aquí permiten describir con mayor precisión cuándo se produce la vinculación. Por ejemplo, una vinculación temprana podría realizarse durante el diseño, la compilación o el enlace.
Computación paralela
Una de las funciones clave del desarrollo de computación paralela es la especialización del código al entorno de ejecución del host. [ 9 ] [ 10 ] Dicha especialización no puede realizarse antes de conocer ese entorno. Si se desea que el mismo código se ejecute en una variedad de plataformas de hardware, entonces dicha especialización no puede ocurrir durante las fases de edición o compilación. La fase más temprana sería la fase de distribución, [ 11 ] si se implementara un sistema que recopilara información del hardware, luego eligiera un ejecutable que ya esté especializado para ese hardware o hardware sustancialmente similar, o generara un binario especializado sobre la marcha. De igual manera, la especialización podría realizarse en el momento de la carga, [ 12 ] invocando una herramienta de reescritura binaria [ 13 ] en combinación con una herramienta que utilice la estructura de flujo de control para generar una forma especializada.
Referencias
- ↑ Franchitti, Jean-Claude (13 de noviembre de 2024). "4.2 Creación de programas en C" . Introducción a la informática . OpenStax . Consultado el 12 de noviembre de 2025 .
- ↑ Aho, Alfred V.; Lam, Monica S.; Sethi, Ravi; Ullman, Jeffrey D. (2006). Compiladores: Principios, técnicas y herramientas (2.ª ed.). Addison-Wesley. ISBN 978-0321486813.
- ↑ Levine, John R. (1999). Enlazadores y cargadores . Morgan Kaufmann. ISBN 978-1558604964.
- ↑ "Información general sobre el Instalador de Windows" . Microsoft Learn . Microsoft. 7 de enero de 2021. Consultado el 12 de noviembre de 2025 .
- ↑ "ld.so(8) — enlazador/cargador dinámico" . Páginas man de Linux en man7.org . Michael Kerrisk . Consultado el 12 de noviembre de 2025 .
- ↑ "Enlace (diapositivas de la clase CS:APP) — enlace dinámico en tiempo de carga frente a enlace dinámico en tiempo de ejecución" (PDF) . Universidad Carnegie Mellon . 26 de octubre de 2023. Consultado el 12 de noviembre de 2025 .
- ↑ "execve(2) — ejecutar programa" . Páginas man de Linux en man7.org . Michael Kerrisk . Consultado el 12 de noviembre de 2025 .
- ↑ "Enlace (diapositivas de la clase CS:APP) — enlace dinámico en tiempo de ejecución (dlopen)" (PDF) . Universidad Carnegie Mellon . 26 de octubre de 2023. Consultado el 12 de noviembre de 2025 .
- ↑ Midkiff, Samuel P. (2012). Paralelización automática: una visión general de las técnicas fundamentales de compilación (PDF) . Synthesis Lectures on Computer Architecture. Morgan & Claypool. ISBN 978-1608458103Consultado el 12 de noviembre de 2025 .
- ↑ "Segmentación de dispositivos (beta)" . Desarrolladores de Android . Google. 21 de julio de 2025. Consultado el 12 de noviembre de 2025 .
- ↑ "LTO (Link Time Optimization)" . Manual de GCC Internals . Free Software Foundation . Consultado el 12 de noviembre de 2025 .
- ↑ Panchenko, Maksim; Fedorov, Andrey; Ottoni, Guilherme; Condon, Rodrigo (2019). BOLT: Un optimizador binario práctico para centros de datos y más allá . IEEE. pp. 2–14 . doi : 10.1109/CGO.2019.8661187 . Recuperado el 12 de noviembre de 2025 .
- Implementación del lenguaje de programación