¿Qué es el "tiempo de ejecución"?


405

He oído hablar de cosas como "C Runtime", "Visual C ++ 2008 Runtime", ".NET Common Language Runtime", etc.

  • ¿Qué es exactamente el " tiempo de ejecución "?
  • ¿De qué está hecho?
  • ¿Cómo interactúa con mi código? O tal vez más precisamente, ¿cómo controla mi código?

Al codificar el lenguaje ensamblador en Linux, podría usar la instrucción INT para realizar la llamada al sistema. Entonces, ¿el tiempo de ejecución no es más que un montón de funciones prefabricadas que envuelven la función de bajo nivel en funciones más abstractas y de alto nivel? Pero, ¿no se parece más a la definición de la biblioteca, no al tiempo de ejecución?

¿Son "tiempo de ejecución" y " biblioteca de tiempo de ejecución " dos cosas diferentes?

AGREGAR 1

En estos días, creo que quizás Runtime tiene algo en común con la llamada máquina virtual , como JVM. Aquí está la cita que lleva a tal pensamiento:

Este proceso de compilación es lo suficientemente complejo como para dividirse en varias capas de abstracción, y estas generalmente involucran tres traductores: un compilador, una implementación de máquina virtual y un ensamblador. --- Los elementos de los sistemas informáticos (Introducción, El camino hacia la tierra del hardware)

AGREGAR 2

El libro Expert C Programming: Deep C Secrets . El Capítulo 6 Estructuras de datos en tiempo de ejecución es una referencia útil para esta pregunta.


El tiempo de ejecución contiene runtime librarymás un código de control y un cierto estado (suministrado por el sistema operativo).
Martin York

43
Gran pregunta, siempre cuestioné esto.
contactmatt

No llamaría a INT una función. Consulte stackoverflow.com/questions/1817577/… para obtener más detalles.
Koray Tugay

2
Encontré otra publicación en un sitio hermano que puede ser útil: programmers.stackexchange.com/questions/294346/…
CloudyTrees

Siempre considero que es una caja de arena para la infraestructura de nivel inferior. Tiene el Administrador de tareas / O procesos en el kit Unix, todas las bibliotecas GUI de bajo nivel, etc. Todo eso es parte del tiempo de ejecución. Los cimientos sobre los que se construyen las cosas.
JGFMK

Respuestas:


262

El tiempo de ejecución describe el software / las instrucciones que se ejecutan mientras su programa se está ejecutando, especialmente aquellas instrucciones que no escribió explícitamente, pero que son necesarias para la correcta ejecución de su código.

Los lenguajes de bajo nivel como C tienen un tiempo de ejecución muy pequeño (si lo hay). Los lenguajes más complejos como Objective-C, que permite el paso dinámico de mensajes, tienen un tiempo de ejecución mucho más extenso.

Tiene razón en que el código de tiempo de ejecución es código de biblioteca, pero el código de biblioteca es un término más general, que describe el código producido por cualquier biblioteca. El código de tiempo de ejecución es específicamente el código requerido para implementar las características del lenguaje en sí.


103

Tiempo de ejecución es un término general que se refiere a cualquier biblioteca, marco o plataforma en la que se ejecuta su código.

Los tiempos de ejecución de C y C ++ son colecciones de funciones.

El tiempo de ejecución .NET contiene un intérprete de lenguaje intermedio , un recolector de basura y más.


44
La biblioteca estándar de C ++ no solo contiene funciones, y en referencia a Matt Ball, el "tiempo de ejecución" de C y C ++ son bibliotecas de tiempo de ejecución, el tiempo de ejecución de .NET es una biblioteca de tiempo de ejecución y un sistema de tiempo de ejecución.
smerlin

1
Mi pregunta es que las bibliotecas estáticas también son tiempo de ejecución. Supongo que el término se usa principalmente para objetos compartidos, ¿no? considere libc en linux. ¿Y qué hay de las plataformas y frameworks? ellos también se dividen en bibliotecas?
Amir Zadeh

3
Pero, ¿cómo puede mi código realmente ejecutarse en cualquier " biblioteca, marco o plataforma "? Debe ejecutarse en la CPU u otra unidad de procesamiento. ¿Podría proporcionar un nivel adicional de detalle para obtener más aclaraciones?
n611x007

Los tiempos de ejecución de C y C ++ son colecciones de funciones. -> ¿Qué funciones?
Koray Tugay

3
@KorayTugay: las funciones en la biblioteca estándar, como couto printf.
SLaks

80

Según Wikipedia: biblioteca de tiempo de ejecución / sistema de tiempo de ejecución .

En la programación de computadoras, una biblioteca de tiempo de ejecución es una biblioteca de programas especial utilizada por un compilador, para implementar funciones integradas en un lenguaje de programación, durante el tiempo de ejecución (ejecución) de un programa de computadora. Esto a menudo incluye funciones para entrada y salida, o para administración de memoria.


Un sistema de tiempo de ejecución (también llamado sistema de tiempo de ejecución o simplemente tiempo de ejecución) es un software diseñado para soportar la ejecución de programas de computadora escritos en algún lenguaje de computadora. El sistema de tiempo de ejecución contiene implementaciones de comandos básicos de bajo nivel y también puede implementar comandos de nivel superior y puede admitir verificación de tipo, depuración e incluso generación y optimización de código. El programador puede acceder a algunos servicios del sistema de tiempo de ejecución a través de una interfaz de programación de aplicaciones, pero otros servicios (como la programación de tareas y la gestión de recursos) pueden ser inaccesibles.


Re: su edición , "tiempo de ejecución" y "biblioteca de tiempo de ejecución" son dos nombres diferentes para la misma cosa.


69
Wikipedia no es una buena fuente de citas. Es un buen lugar para comenzar a buscar fuentes autorizadas, pero en sí mismo no debe considerarse autoritario y, como tal, su cita no es confiable. (Según las declaraciones del Sr. Wales, el creador de Wikipedia).
Martin York

55
¿A qué se refiere "durante el tiempo de ejecución" en la primera cita (supuestamente sobre la biblioteca de tiempo de ejecución)? Una interpretación fácil [errónea] podría ser la siguiente: "mientras el programa se está ejecutando, el compilador, en paralelo, usa una biblioteca (para sí mismo) para implementar (es decir, generar código adicional en tiempo de ejecución)" prometido "(según las especificaciones del lenguaje ) funciones para el programa ". Esto puede ser falso y / o fácilmente doblado con la definición de un sistema de tiempo de ejecución.
n611x007

2
Para continuar desde donde Loki se fue, especialmente cuando ninguno de los artículos proporciona ninguna referencia (eso no es una cita, es solo algo que pensé que sería mejor decir)
arsaKasra

1
@MartinYork, no solo es una enciclopedia no autorizada, sino que también se centra en la documentación y no en la explicación. Esos pueden ser muy diferentes.
Roy Prins

59

El tiempo de ejecución o el entorno de ejecución es la parte de una implementación del lenguaje que ejecuta código y está presente en tiempo de ejecución ; La parte en tiempo de compilación de la implementación se denomina entorno de traducción en el estándar C.

Ejemplos:

  • el tiempo de ejecución de Java consta de la máquina virtual y la biblioteca estándar

  • un tiempo de ejecución C común consiste en el cargador (que forma parte del sistema operativo) y la biblioteca de tiempo de ejecución, que implementa las partes del lenguaje C que el compilador no integra en el ejecutable; en entornos alojados, esto incluye la mayoría de las partes de la biblioteca estándar


2
Gracias, creo que esta es la mejor respuesta en este tema.
Koray Tugay

1
Aprecio nombrar "entorno de ejecución" pero creo que usar solo "tiempo de ejecución" como alias para el primero es una mala idea (que es, según mis observaciones, lo que hacen muchos programadores), "entorno de tiempo de ejecución" es más preciso. Estoy de acuerdo con @ Michał Trybus que "tiempo de ejecución" significa "el momento en que se ejecuta el programa".
WloHu

32

Según tengo entendido, el tiempo de ejecución es exactamente lo que significa: el momento en que se ejecuta el programa. Puede decir que algo sucede en tiempo de ejecución / tiempo de ejecución o en tiempo de compilación.

Creo que el tiempo de ejecución y la biblioteca de tiempo de ejecución deberían ser (si no lo son) dos cosas separadas. "C runtime" no me parece correcto. Lo llamo "biblioteca de tiempo de ejecución C".

Respuestas a sus otras preguntas: creo que el término tiempo de ejecución se puede extender para incluir también el entorno y el contexto del programa cuando se ejecuta, por lo tanto:

  • Consiste en todo lo que se puede llamar "entorno" durante el tiempo en que se ejecuta el programa, por ejemplo, otros procesos, estado del sistema operativo y bibliotecas usadas, estado de otros procesos, etc.
  • no interactúa con su código en un sentido general, solo define en qué circunstancias funciona su código, qué está disponible durante la ejecución.

Esta respuesta es, en cierta medida, solo mi opinión, no un hecho o definición.


29

Matt Ball respondió correctamente. Diría al respecto con ejemplos.

Considere ejecutar un programa compilado en el compilador Turbo-Borland C / C ++ (versión 3.1 del año 1991) y deje que se ejecute en una versión de Windows de 32 bits como Win 98/2000, etc.

Es un compilador de 16 bits. Y verá que todos sus programas tienen punteros de 16 bits. ¿Por qué es así cuando su sistema operativo es de 32 bits? Debido a que su compilador ha configurado el entorno de ejecución de 16 bits y la versión de 32 bits del sistema operativo lo admite.

Lo que comúnmente se llama JRE (Java Runtime Environment) proporciona un programa Java con todos los recursos que puede necesitar para ejecutar.

En realidad, el entorno de tiempo de ejecución es el producto cerebral de la idea de las máquinas virtuales. Una máquina virtual implementa la interfaz sin formato entre el hardware y lo que un programa puede necesitar ejecutar. El entorno de ejecución adopta estas interfaces y las presenta para el uso del programador. Un desarrollador de compiladores necesitaría estas facilidades para proporcionar un entorno de ejecución para sus programas.


Una máquina virtual implementa la interfaz "en bruto" entre el hardware y lo que un programa puede necesitar ejecutar. -> No estoy seguro de esto.
Koray Tugay

7

Ejecute el tiempo exactamente donde su código cobra vida y puede ver muchas cosas importantes que hace su código.

El tiempo de ejecución tiene la responsabilidad de asignar memoria, liberar memoria, usar el subsistema del sistema operativo como (Servicios de archivo, Servicios IO ... Servicios de red, etc.)

Su código se llamará "TRABAJANDO EN TEORÍA" hasta que prácticamente lo ejecute. y Runtime es un amigo que ayuda a lograr esto.


3

un tiempo de ejecución podría denotar la fase actual de la vida del programa (tiempo de ejecución / tiempo de compilación / tiempo de carga / tiempo de enlace) o podría significar una biblioteca de tiempo de ejecución, que forma las acciones básicas de bajo nivel que interactúan con el entorno de ejecución. o podría significar un sistema de tiempo de ejecución, que es lo mismo que un entorno de ejecución.

En el caso de los programas C, el tiempo de ejecución es el código que configura la pila, el montón, etc., que es un requisito esperado por el entorno C. esencialmente configura el entorno que promete el lenguaje. (podría tener un componente de biblioteca de tiempo de ejecución, crt0.lib o algo así en el caso de C)


3

Descubrí que la siguiente estructura de carpetas crea un contexto muy perspicaz para comprender lo que runtimees:

Tiempos de ejecución de Mozilla XulRunner

Puede ver que existe la ' fuente ', está el ' SDK ' o 'Kit de desarrollo de software' y luego está el Runtime, por ejemplo. las cosas que se ejecutan, en tiempo de ejecución. Sus contenidos son como:

contenido de la carpeta de tiempos de ejecución

El zip win32 contiene .exe -s y .dll -s.

Entonces, por ejemplo. el tiempo de ejecución C serían los archivos como este: bibliotecas de tiempo de ejecución C, .so-s o .dll -s, que ejecuta en tiempo de ejecución, hecho especial por su inclusión (o sus contenidos o propósitos) en la definición de Lenguaje C (en 'papel'), luego implementado por su implementación C de elección. Y luego obtienes el tiempo de ejecución de esa implementación, para usarla y construir sobre ella.

Es decir, con un poco de polarización, los archivos ejecutables que necesitarán los usuarios de su nuevo programa basado en C. Como desarrollador de un programa basado en C, tú también, pero también necesitas el compilador de C y los encabezados de la biblioteca de C; los usuarios no los necesitan.


1
otro para contextualizar el tiempo de ejecución, es este artículo no relacionado con la sección 6 de los mitos de Python , donde puedes ver la distinción entre el tiempo de ejecución y el lenguaje de programación , en el primer párrafo del mito 6.
n611x007

3

El tiempo de ejecución básicamente significa cuando el programa interactúa con el hardware y el sistema operativo de una máquina. C no tiene su propio tiempo de ejecución, sino que solicita el tiempo de ejecución de un sistema operativo (que es básicamente una parte de RAM) para ejecutarse.


1

Si mi comprensión al leer las respuestas anteriores es correcta, el tiempo de ejecución es básicamente 'procesos en segundo plano', como la recolección de basura, la asignación de memoria, básicamente cualquier proceso que se invoque indirectamente, por las bibliotecas / marcos en los que está escrito su código, y específicamente aquellos procesos que ocurren después de la compilación, mientras se ejecuta la aplicación.


-1

Estas secciones de la documentación de MSDN tratan la mayoría de sus preguntas: http://msdn.microsoft.com/en-us/library/8bs2ecf4(VS.71).aspx

Espero que esto ayude.

Gracias Damian


3
En realidad, no lo hace; no solo pregunta por .Net.
SLaks

@ Matt: De nuevo a la derecha. Sin embargo, 2/3 de sus tiempos de ejecución fueron compatibles con .Net, la mitad de sus etiquetas tratan con .Net y pensé que los enlaces serían útiles.
Damian Schenkelman

Lo diría "3/4 de los idiomas admiten .NET". .NET no es muy compatible, está diseñado para mantener la brecha fuerte entre Unix y Windows en el nivel de middleware.
Matt Joiner

@MattJoiner: eso podría haber sido cierto en 2010, pero hoy es monumentalmente falso con .NET Standard e implementaciones de código abierto como .NET Core, etc.
rory.ap

-2

El tiempo de ejecución es la instancia en la que no sabe qué tipo de objetos crea durante su ejecución, la creación de objetos se basa en ciertas condiciones o en algún trabajo de cálculo. Por el contrario, el tiempo de compilación es la instancia en la que usted define los objetos necesarios antes de sus ejecuciones.


-3

El tiempo de ejecución es algo opuesto al tiempo de diseño y tiempo de compilación / tiempo de enlace. Históricamente proviene de un entorno lento de mainframe donde el tiempo de máquina era costoso.


1
Esto no responde la pregunta y la complica aún más.
cglotr
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.