Che cos'è il "runtime"?


405

Ho sentito parlare di cose come "C Runtime", "Visual C ++ 2008 Runtime", ".NET Common Language Runtime", ecc.

  • Che cos'è esattamente " runtime "?
  • Di cosa è fatto?
  • Come interagisce con il mio codice? O forse più precisamente, come viene controllato il mio codice da esso?

Quando ho codificato il linguaggio assembly su Linux, ho potuto usare l'istruzione INT per effettuare la chiamata di sistema. Quindi, il runtime non è altro che un mucchio di funzioni prefabbricate che avvolgono la funzione di basso livello in funzioni più astratte e di alto livello? Ma questo non sembra più la definizione per la libreria, non per il runtime?

Sono "runtime" e " libreria di runtime " sono due cose diverse?

AGGIUNGI 1

In questi giorni, sto forse pensando che Runtime abbia qualcosa in comune con la cosiddetta Macchina Virtuale , come JVM. Ecco la citazione che porta a tale pensiero:

Questo processo di compilazione è sufficientemente complesso da essere suddiviso in diversi livelli di astrazione e questi di solito coinvolgono tre traduttori: un compilatore, un'implementazione di una macchina virtuale e un assemblatore. --- Gli elementi dei sistemi informatici (Introduzione, La strada verso la terra dell'hardware)

AGGIUNGI 2

Il libro Expert C Programming: Deep C Secrets . Il capitolo 6 Runtime Data Structures è un utile riferimento a questa domanda.


Il runtime contiene runtime librarypiù un codice di controllo e uno stato (forniti dal sistema operativo).
Martin York,

43
Ottima domanda, sempre messa in discussione questo.
contactmatt

Non chiamerei INT una funzione. Per ulteriori dettagli, consultare stackoverflow.com/questions/1817577/… .
Koray Tugay,

2
Ho trovato un altro post su un sito
affiliato

Mi piace sempre come una sandbox per un'infrastruttura di livello inferiore. Hai il Task Manager / O processi sul kit Unix, tutte le librerie GUI di basso livello ecc. Tutto ciò che fa parte del runtime. Le basi su cui sono costruite le cose.
JGFMK,

Risposte:


262

Il runtime descrive il software / le istruzioni eseguite durante del programma, in particolare quelle istruzioni che non sono state scritte in modo esplicito, ma sono necessarie per la corretta esecuzione del codice.

Linguaggi di basso livello come C hanno un tempo di esecuzione molto piccolo (se presente). Linguaggi più complessi come Objective-C, che consente il passaggio dinamico dei messaggi, hanno un tempo di esecuzione molto più ampio.

Hai ragione che il codice di runtime è il codice della libreria, ma il codice della libreria è un termine più generale, che descrive il codice prodotto da qualsiasi libreria. Il codice di runtime è specificamente il codice richiesto per implementare le funzionalità della lingua stessa.


103

Runtime è un termine generale che si riferisce a qualsiasi libreria, framework o piattaforma su cui viene eseguito il codice.

I runtime C e C ++ sono raccolte di funzioni.

Il runtime .NET contiene un interprete di lingua intermedio , un garbage collector e altro.


4
La libreria standard C ++ non contiene solo funzioni e, riferendosi a Matt Ball, il "runtime" C e C ++ sono librerie di runtime, il runtime .NET è una libreria di runtime e un sistema di runtime.
smerlin,

1
La mia domanda è che anche le librerie statiche sono runtime? immagino che il termine sia usato principalmente per oggetti condivisi, no? considera libc in linux. E che dire di piattaforme e framework? anche loro sono suddivisi in biblioteche?
Amir Zadeh,

3
Ma come può effettivamente il mio codice funzionare su qualsiasi " libreria, framework o piattaforma "? Dovrebbe funzionare sulla CPU o altra unità di elaborazione. Potresti fornire un ulteriore livello di dettaglio per ulteriori chiarimenti?
n611x007,

I runtime C e C ++ sono raccolte di funzioni. -> Quali funzioni?
Koray Tugay,

3
@KorayTugay: le funzioni nella libreria standard, come couto printf.
SLaks,

80

Come da Wikipedia: libreria di runtime / sistema di runtime .

Nella programmazione del computer, una libreria di runtime è una libreria di programma speciale utilizzata da un compilatore, per implementare funzioni integrate in un linguaggio di programmazione, durante il runtime (esecuzione) di un programma per computer. Ciò include spesso funzioni per input e output o per la gestione della memoria.


Un sistema di runtime (chiamato anche sistema di runtime o solo runtime) è un software progettato per supportare l'esecuzione di programmi per computer scritti in un linguaggio informatico. Il sistema di runtime contiene implementazioni di comandi di base di basso livello e può anche implementare comandi di livello superiore e può supportare il controllo del tipo, il debug e persino la generazione e l'ottimizzazione del codice. Alcuni servizi del sistema runtime sono accessibili al programmatore tramite un'interfaccia di programmazione dell'applicazione, ma altri servizi (come la pianificazione delle attività e la gestione delle risorse) potrebbero essere inaccessibili.


Ri: la tua modifica , "runtime" e "libreria di runtime" sono due nomi diversi per la stessa cosa.


69
Wikipedia non è una buona fonte di citazioni. È una buona posizione per iniziare a cercare fonti autorevoli, ma di per sé non dovrebbe essere considerato autorevole e come tale citazione da esso non è affidabile. (Secondo le dichiarazioni di Mr Wales, il creatore di Wikipedia).
Martin York,

5
A cosa si riferisce "durante il runtime" nella prima citazione (presumibilmente sulla libreria di runtime)? Una facile [mis] interpretazione potrebbe essere la seguente: "mentre il programma è in esecuzione, il compilatore, in parallelo, utilizza una libreria (per se stesso) per implementare (cioè generare codice aggiuntivo in fase di esecuzione)" promesso "(dalle specifiche del linguaggio ) funzioni per il programma ". Questo può essere falso e / o facilmente piegato con def di un sistema di runtime.
n611x007,

2
Per continuare da dove Loki ha lasciato, soprattutto quando nessuno degli articoli fornisce alcun riferimento (che non è una citazione, è solo qualcosa che pensavo fosse meglio dire)
arsaKasra,

1
@MartinYork, non solo un'enciclopedia non è autorevole, ma si concentra anche sulla documentazione e non sulla spiegazione. Quelli possono essere molto diversi.
Roy Prins,

59

L' ambiente di runtime o esecuzione è la parte di un'implementazione del linguaggio che esegue il codice ed è presente in fase di esecuzione ; la parte del tempo di compilazione dell'implementazione è chiamata ambiente di traduzione nello standard C.

Esempi:

  • il runtime Java è costituito dalla macchina virtuale e dalla libreria standard

  • un runtime C comune è costituito dal caricatore (che fa parte del sistema operativo) e dalla libreria di runtime, che implementa le parti del linguaggio C che non sono integrate nell'eseguibile dal compilatore; negli ambienti ospitati, questo include la maggior parte delle parti della libreria standard


2
Grazie, penso che questa sia la migliore risposta in questo argomento.
Koray Tugay,

1
Apprezzo la denominazione di "ambiente di esecuzione" ma penso che usare solo "runtime" come alias per il primo sia una cattiva idea (che è dalle mie osservazioni ciò che fanno molti programmatori), "ambiente di runtime" è più preciso. Concordo con @ MichałTrybus che "runtime" significa "l'ora in cui il programma viene eseguito".
WloHu,

32

Nella mia comprensione, il runtime è esattamente ciò che significa: il momento in cui il programma viene eseguito. Si può dire qualcosa accade in fase di esecuzione / tempo di esecuzione o in fase di compilazione.

Penso che runtime e libreria di runtime dovrebbero essere (se non lo sono) due cose separate. "C runtime" non mi sembra giusto. Lo chiamo "libreria di runtime C".

Risposte alle altre tue domande: penso che il termine runtime possa essere esteso per includere anche l'ambiente e il contesto del programma quando viene eseguito, quindi:

  • è costituito da tutto ciò che può essere chiamato "ambiente" durante il periodo di esecuzione del programma, ad esempio altri processi, lo stato del sistema operativo e le librerie utilizzate, lo stato di altri processi, ecc.
  • non interagisce con il tuo codice in senso generale, definisce semplicemente in quali circostanze funziona il tuo codice, cosa è disponibile durante l'esecuzione.

Questa risposta è in qualche modo solo la mia opinione, non un fatto o una definizione.


29

Matt Ball ha risposto correttamente. Direi a questo proposito con esempi.

Prendi in considerazione l'esecuzione di un programma compilato nel compilatore Turbo-Borland C / C ++ (versione 3.1 dell'anno 1991) e lascialo funzionare con una versione a 32 bit di Windows come Win 98/2000 ecc.

È un compilatore a 16 bit. E vedrai che tutti i tuoi programmi hanno puntatori a 16 bit. Perché è così quando il tuo sistema operativo è a 32 bit? Perché il compilatore ha impostato l'ambiente di esecuzione a 16 bit e la versione a 32 bit del sistema operativo lo ha supportato.

Quello che viene comunemente chiamato JRE (Java Runtime Environment) fornisce un programma Java con tutte le risorse che potrebbe essere necessario eseguire.

In realtà, l'ambiente di runtime è il prodotto del cervello dell'idea di macchine virtuali. Una macchina virtuale implementa l' interfaccia non elaborata tra hardware e ciò che potrebbe essere necessario per eseguire un programma. L'ambiente di runtime adotta queste interfacce e le presenta per l'uso del programmatore. Uno sviluppatore di compilatori avrebbe bisogno di queste strutture per fornire un ambiente di esecuzione per i suoi programmi.


Una macchina virtuale implementa l'interfaccia "grezza" tra l'hardware e ciò che potrebbe essere necessario per eseguire un programma. -> Non ne sono sicuro.
Koray Tugay,

7

Esegui il tempo esatto in cui il tuo codice prende vita e puoi vedere molte cose importanti che il tuo codice fa.

Il runtime ha la responsabilità di allocare memoria, liberare memoria, utilizzare il sottosistema del sistema operativo come (File Services, IO Services .. Network Services ecc.)

Il tuo codice verrà chiamato "WORKING IN THEORY" fino a quando praticamente non eseguirai il codice. e Runtime è un amico che aiuta a raggiungere questo obiettivo.


3

un runtime potrebbe indicare la fase corrente della vita del programma (runtime / tempo di compilazione / tempo di caricamento / tempo di collegamento) oppure potrebbe significare una libreria di runtime, che costituisce le azioni di base di basso livello che si interfacciano con l'ambiente di esecuzione. oppure potrebbe significare un sistema di runtime, che è lo stesso di un ambiente di esecuzione.

nel caso dei programmi C, il runtime è il codice che imposta lo stack, l'heap ecc. quale requisito previsto dall'ambiente C. fondamentalmente imposta l'ambiente che è promesso dalla lingua. (potrebbe avere un componente della libreria di runtime, crt0.lib o qualcosa del genere in caso di C)


3

Ho scoperto che la seguente struttura di cartelle crea un contesto molto approfondito per comprendere cosa runtimesia:

Runtime di Mozilla XulRunner

Puoi vedere che c'è la ' fonte ', c'è ' SDK ' o 'Software Development Kit' e poi c'è Runtime, ad es. le cose che vengono eseguite - in fase di esecuzione. I suoi contenuti sono come:

contenuto della cartella di runtime

La zip win32 contiene .exe -s e .dll -s.

Quindi ad es. il runtime C sarebbe il file come questo - librerie di runtime C, .so-s o .dll -s - che si esegue in fase di runtime, reso speciale dalla loro inclusione (o dal loro contenuto o scopo) nella definizione del Linguaggio C (su "paper"), quindi implementato dalla tua implementazione C scelta. E poi ottieni il tempo di esecuzione di tale implementazione, per usarlo e per costruirci sopra.

Cioè, con un po 'di polarizzazione, i file eseguibili di cui avranno bisogno gli utenti del tuo nuovo programma basato su C. Come sviluppatore di un programma basato su C, anche tu, ma hai bisogno anche del compilatore C e delle intestazioni della libreria C; gli utenti non ne hanno bisogno.


1
un altro per contestualizzare il runtime, questo articolo non correlato è la sezione mito 6 dei miti di pitone , in cui è possibile vedere la distinzione tra runtime e linguaggio di programmazione , nel primo paragrafo del mito 6.
n611x007

3

Runtime fondamentalmente significa quando il programma interagisce con l'hardware e il sistema operativo di una macchina. C non ha il proprio runtime ma invece richiede il runtime da un sistema operativo (che è fondamentalmente una parte di ram) per eseguire se stesso.


1

Se la mia comprensione dalla lettura delle risposte sopra è corretta, il runtime è fondamentalmente "processi in background" come garbage collection, allocazione della memoria, praticamente qualsiasi processo che viene invocato indirettamente, dalle librerie / framework in cui è scritto il tuo codice, e in particolare quelli processi che si verificano dopo la compilazione, mentre l'applicazione è in esecuzione.


-1

Queste sezioni della documentazione MSDN trattano la maggior parte delle domande: http://msdn.microsoft.com/en-us/library/8bs2ecf4(VS.71).aspx

Spero che questo possa essere d'aiuto.

Grazie Damian


3
In realtà, non lo fa; non sta solo chiedendo di .Net.
SLaks

@Matt: Di nuovo giusto. Tuttavia, 2/3 dei suoi runtime sono stati supportati da .Net, 1/2 dei suoi tag riguardano .Net e ho pensato che i collegamenti sarebbero stati utili.
Damian Schenkelman,

Lo definirei "3/4 delle lingue supportano .NET". .NET non supporta molto, è progettato per mantenere forte la frattura tra unix e windows a livello di middleware.
Matt Joiner,

@MattJoiner - Potrebbe essere vero nel 2010, ma oggi è monumentalmente non vero con .NET Standard e implementazioni open source come .NET Core, ecc.
rory.ap

-2

Il tempo di esecuzione è l'istanza in cui non si conosce il tipo di oggetti creati durante l'esecuzione, la creazione degli oggetti si basa su determinate condizioni o su alcuni lavori di calcolo. In contraddizione, il tempo di compilazione è l'istanza in cui gli oggetti richiesti sono stati definiti dall'utente prima delle sue esecuzioni.


-3

Il runtime è in qualche modo opposto a design-time e compile-time / link-time. Storicamente viene dall'ambiente mainframe lento in cui il tempo di macchina era costoso.


1
Questo non risponde alla domanda e la complica ulteriormente.
cglotr
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.