Sembra che tu sia confuso perché "runtime" è sia un nome che un aggettivo. La tua domanda si interroga sui tre concetti distinti di "ambiente di runtime", "runtime della lingua" e "link di runtime":
Come nome, " ambiente run-time " di un programma, o formulato in modo diverso: "l'ambiente di un processo", si riferisce allo stato (mutevole) del mondo esterno. Questo stato è ovviamente accessibile e modificabile tramite I / O, come leggere o scrivere {da, a} {terminali, file, dispositivi a blocchi, prese di rete}. L'ambiente può anche includere concetti come "directory di lavoro corrente" o "variabili d'ambiente".
Come sostantivo, un runtime di un linguaggio di programmazione si riferisce alla parte di un'implementazione linguistica che fornisce semantica di runtime. Questo è più visibile nelle implementazioni interpretate, in cui l'interprete è il runtime. Ma le funzioni di libreria standard possono anche far parte del runtime, come malloc
in C.
Alcune parti del runtime potrebbero essere compilate nel programma piuttosto che essere accessibili tramite una libreria. Il modo in cui i distruttori vengono richiamati in C ++ sarebbe un esempio di ciò: il compilatore inserisce le istruzioni per distruggere gli oggetti stack quando viene lasciato il loro scope e le istruzioni per distruggere le variabili membro quando viene distrutta un'istanza di classe. Un altro esempio di codice fornito dal runtime è il punto di ingresso del programma, che è non int main()
. Il modo in cui il punto di ingresso viene determinato dipende dal formato eseguibile. Ma in quel punto di ingresso reale, il compilatore avrà emesso il codice che, ad es. si occupa dell'inizializzazione dei membri statici. Questo codice invocherà il main()
fornito dal programmatore, ma potrebbe non essere banale di per sé. Per esempio. in C ++ questo implica la gestione delle eccezioni non rilevate, mentre Java deve anche generare il thread principale. Dopo il ritorno di main()
, il runtime deve eseguire varie operazioni di pulizia, quindi comunicare il codice di uscita al sistema operativo e terminare il processo. Nota che sistemi complessi come linguaggi o framework implementati sopra C aggiungono più livelli alla ricerca del vero punto di ingresso del programma percepito dall'utente.
Generalmente non è utile visualizzare il sistema operativo come parte di un runtime della lingua,
ma quella vista cambia quando si scrive un assembly.
Alcuni assemblatori includono funzionalità di generazione di codice simili a runtime,
ma fare qualcosa di interessante di solito coinvolge syscalls nel kernel del sistema operativo. Nello spazio utente, il punto del runtime in linguaggio C e le sue estensioni come POSIX sono di astrarre su queste syscalls e altri dettagli specifici del sistema, in modo che l'interfaccia fornita dal sistema operativo sia completamente sommersa dall'interfaccia di runtime linguaggio.
Come aggettivo, "runtime" in " collegamento run-time " viene utilizzato per differenziare il collegamento dinamico dal collegamento statico. In quasi tutti i contesti di informatica, la parola "dinamico" può essere sostituita con "tempo di esecuzione" per ottenere il significato desiderato. L'uso improprio delle parole in greco antico è molto più bello dell'usare noioso inglese antico, quindi continuiamo a parlare di "digitazione dinamica" o "collegamento dinamico" o "invio dinamico" (nel suo significato originale, "dinamico" significa "potente" o "coinvolgente energia" ", Ma attraverso il significato di" cambiamento "sembra essere arrivato al suo attuale significato specifico per l'informatica).