C ++ Runtime e runtime-linking

3

Stavo installando boost e mi sono imbattuto in un'opzione chiamata "runtime-link". Dopo aver cercato un po ', mi sono imbattuto in un altro argomento complesso: "runtime system"

che secondo Wikipedia:

The runtime system is the gateway by which a running program interacts with the runtime environment, which contains state values that are accessible during program execution, as well as active entities that can be interacted with during program execution. For example, environment variables are features of many operating systems, and are part of the runtime environment; a running program can access them via the runtime system. Likewise, hardware devices such as a DVD drive are active entities that a program can interact with via a runtime system.

ancora un altro argomento "Ambiente di runtime" viene visualizzato

the runtime system of the C language is a particular set of instructions inserted into the executable image by the compiler. Among other things, these instructions manage the processor stack, create space for local variables, and copy function-call parameters onto the top of the stack

Sulla base di quanto riportato sopra, è sicuro affermare che "il runtime di C ++ è fondamentalmente un'API per le chiamate di sistema per l'implementazione multipiattaforma di parole chiave e dichiarazioni C ++" e che "l'ambiente di runtime è fondamentalmente il kernel del sistema operativo" (si noti che I sto solo parlando di c ++)?

E ancora non ho idea del collegamento in runtime e del perché può essere statico o condiviso? È legato alle librerie statiche e dinamiche? (Sono completamente a conoscenza di questi, quindi non devi spiegarlo, solo una relazione se ce n'è una) e più di tutto sono confuso a causa della "gerarchia di runtime".

    
posta Ehsan 22.08.2015 - 18:16
fonte

1 risposta

7

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).

    
risposta data 27.08.2015 - 13:49
fonte

Leggi altre domande sui tag