Che cos'è il supporto di runtime richiesto da una lingua?

4

Ho letto da qualche parte che C è preferito per driver e firmware su sistemi embedded perché richiede meno supporto in fase di esecuzione. Non riuscivo a capire la parte 'supporto runtime'. La mia comprensione è che il codice C viene convertito in codice assembly, che viene visualizzato su un dispositivo incorporato sotto forma di file binario. Per favore correggimi, se questo è sbagliato. Se è corretto, quale tipo di supporto di runtime è richiesto da C in questo scenario?

    
posta Manali Bhadsalkar 03.11.2016 - 14:31
fonte

2 risposte

10

In alcuni casi, per qualsiasi linguaggio di programmazione, ti imbatti in cose che sono importanti da fare ma non facili da esprimere per uno sviluppatore in una buona maniera in quella lingua. Spesso tendono ad essere compiti di livello molto basso che sono molto comuni, e spesso cose la cui implementazione varierà da una piattaforma all'altra anche se la natura di base di ciò che deve essere fatto rimane piuttosto costante.

I progettisti di linguaggi mettono queste cose come "magiche" che è già disponibile come libreria precostituita da utilizzare per lo sviluppatore, quindi non devono progettarle da sole. Questa è nota come libreria di runtime.

Poiché C è un linguaggio di basso livello con un piccolo set di funzionalità, ha un runtime di piccole dimensioni, ma ha ancora bisogno del supporto di runtime per cose come I / O (funziona diversamente su ogni piattaforma) e gestione della memoria (tecnicamente no possibile scrivere un malloc conforme agli standard in C).

Molti linguaggi di livello superiore includono funzionalità più complesse che richiedono un maggiore supporto di runtime o semplicemente includono più elementi nelle librerie di runtime standard per fornire un'esperienza di sviluppo più completa e unificata.

    
risposta data 03.11.2016 - 14:39
fonte
10

What is run-time support required by a language?

Analizziamo in dettaglio alcune delle funzionalità che coinvolgono vari livelli di supporto al runtime.

Gestione della memoria

La gestione della memoria in molte lingue implica funzioni di linguaggio come new e garbage collection. La raccolta dei dati inutili richiede la traccia degli oggetti per identificare le entità dal vivo o quelle morte. Questo in genere richiede il supporto al runtime che implica la scansione di stack e oggetti heap.

Al contrario, in C, la gestione della memoria è manuale e consiste in malloc & gratis, che sono le routine di libreria che potresti scrivere autonomamente in termini di chiamata al sistema operativo per ottenere un heap (anche se come scrive @Mason, forse non conforme agli standard).

Gestione errori e amp; recupero

In molte lingue, la gestione degli errori viene eseguita tramite eccezioni. Lanciare (stack unwinding,) e catching, in particolare, richiede il supporto al runtime, coinvolgendo il coordinamento tra il compilatore e lo stack di runtime.

Al contrario, la gestione degli errori in C è esplicita; lo sbobinamento dello stack è supportato da chiamate in libreria, anche se le routine specializzate, come longjmp, piuttosto che la gestione delle eccezioni più complessa.

Gestione tipi dinamici

Caricare e scaricare classi, classi di caricamento lazy, l'inizializzazione della classe richiede in genere un supporto di runtime. Casting, ad es. down-casting o casting di interfacce richiedono generalmente qualche supporto di runtime. Riflessione e amp; la serializzazione, generalmente richiede anche qualche supporto di runtime. Il runtime traccia i campi e il layout delle classi caricate.

Al contrario, C non fornisce il caricamento dinamico della classe: il caricamento dinamico della libreria può essere supportato dalle chiamate del sistema operativo senza un supporto di runtime significativo dal linguaggio C, e C non ha cast di runtime, o funzioni di riflessione o serializzazione. Ai campi vengono assegnati offset in fase di compilazione; la dimensione completa delle strutture è nota al momento della compilazione, quindi non è richiesto il supporto al runtime.

Operazioni aritmetiche

La maggior parte delle lingue fornisce tipi di dati in virgola mobile; alcuni forniscono tipi decimali nella lingua e altri forniscono un controllo di overflow e underflow (in genere coordinato con i meccanismi di gestione delle eccezioni delle lingue).

C supporta operazioni in virgola mobile; a volte questi sono supportati da emulazioni del sistema operativo di hardware in virgola mobile, altre volte da librerie di lingue di basso livello note al compilatore.

Per C altre operazioni sono fornite da routine di libreria più ordinarie (che non richiedono necessariamente la modifica del compilatore da fornire) piuttosto che funzioni di linguaggio incorporate.

    
risposta data 03.11.2016 - 16:03
fonte

Leggi altre domande sui tag