Che cos'è veramente "l'ambiente di runtime"?

1

Questa è una domanda molto basilare ma è qualcosa che non ho mai capito completamente e recentemente, studiando .NET Core e ASP.NET 5 ho sentito il bisogno di una comprensione più completa dell'argomento.

Leggere l'articolo Introduzione al Common Language Runtime ( CLR) troviamo la seguente parte di testo:

Every program has a surprising number of dependencies on its runtime environment. Most obviously, the program is written in a particular programming language, but that is only the first of many assumptions a programmer weaves into the program. All interesting programs need some runtime library that allows them to interact with the other resources of the machine (such as user input, disk files, network communications, etc). The program also needs to be converted in some way (either by interpretation or compilation) to a form that the native hardware can execute directly.

Ora, questa idea di ambiente di runtime sembra essere molto semplice, ma ancora molto importante, non solo quando si lavora con .NET, ma quando si ha a che fare con la programmazione in generale. Sembra essere un concetto generale che è abbastanza importante da capire.

Fino ad oggi ho sempre avuto una comprensione intuitiva e semplice al riguardo: l'ambiente runtime è l'ambiente su cui verrà eseguito il codice. Ma questo è un modo abbastanza sciolto per capirlo. Probabilmente c'è molto di più ad esso, come si può dedurre dal testo sopra.

In questa impostazione: che cos'è realmente l'ambiente di runtime in generale? Non solo per .NET, ma nella programmazione in generale, qual è l'ambiente di runtime? È solo qualcosa di concettuale o è un pezzo di software, come il CLR per .NET? In breve, come dovremmo comprendere correttamente l'idea dell'ambiente di runtime?

    
posta user1620696 07.12.2015 - 02:11
fonte

3 risposte

7

Ci sono alcuni componenti che compongono l'ambiente di runtime. Non tutti i componenti sono applicabili a tutti gli ambienti (ad esempio assemblatore, C ++ e C # dispongono di diverse funzionalità di runtime), ma generalmente comprendono quanto segue:

  • La piattaforma CPU e hardware su cui viene eseguito il programma.
  • Il sistema operativo che esegue il programma, inclusi i driver di dispositivo che si interfacciano con l'hardware.
  • Librerie standard disponibili per lingua e piattaforma. Determinati ambienti (ad esempio incorporato) possono ridurre la libreria standard pertinente a causa di problemi di spazio.
  • Framework e altre librerie collegate al programma in modo statico o dinamico.
  • Qualsiasi interprete che si trova tra il programma e il sistema operativo, come CLR, JVM, shell (per esempio uno script Bash), interprete Perl / Python, ecc.

Ricorda che i computer sono tutti basati su livelli e astrazioni. Come puoi raccogliere dall'elenco sopra, un runtime è praticamente una raccolta di astrazioni che si trovano tra il bare metal e il programma in esecuzione.

    
risposta data 07.12.2015 - 06:48
fonte
4

TL; risposta DR:

L'ambiente di runtime è un termine un po 'nebuloso che collettivamente si riferisce alla macchina virtuale in cui viene eseguito il codice e alle librerie standard che il tuo codice potrebbe aspettarsi di trovare installato e pronto per l'uso, indipendentemente da dove è installato. Può anche essere pensato come uno strato di isolamento tra il tuo codice e il sistema operativo sottostante, in modo che il tuo codice possa essere agnostico (e quindi portatile).

La risposta lunga:

Nei vecchi (non così buoni) giorni in cui governavano FORTRAN e COBOL, la lingua era anche l'ambiente di runtime. La maggior parte delle applicazioni sono state costruite utilizzando qualsiasi funzionalità fornita dalla lingua e ciò è stato sufficiente. Di conseguenza, la sintassi dei linguaggi era molto complessa e le cose che potevi fare con loro erano limitate a ciò che gli autori della lingua potevano immaginare quando stavano creando la lingua: accesso a file e database, scrittura caratteri ai terminali e alle stampanti, e questo era praticamente tutto.

Quando C uscì, fece una chiara distinzione tra la lingua e le librerie di runtime. Il linguaggio C è molto minimale e per la maggior parte delle cose che potresti voler fare ci sono delle librerie. Le librerie standard forniscono materiale di uso comune e puoi aggiungere librerie per qualsiasi altra cosa. Ad esempio, il linguaggio C non ha un concetto predefinito di allocazione della memoria; per allocare memoria devi invocare malloc() , una routine di libreria standard. E se malloc() non è abbastanza buono per te, allora puoi usare qualche libreria che offre qualcosa di meglio. Le librerie di runtime standard erano il precursore degli ambienti di runtime, ma le cose non erano ancora lì, perché ai tempi di C il sistema operativo Unix giocava principalmente il ruolo dell'ambiente di runtime, quindi non c'era alcun concetto di portabilità: secondo il mondo Unix, il mondo Unix era l'unico mondo.

Quando sono usciti i linguaggi portatili basati su macchine virtuali come Java e C #, era necessario fornire un ulteriore livello di isolamento tra le applicazioni e il sistema operativo sottostante. Inoltre, sono state fornite ricche librerie standard per promuovere la standardizzazione. Inoltre, il concetto stesso di una macchina virtuale che di solito esegue una sorta di bytecode è di per sé in un certo senso un ambiente di runtime.

    
risposta data 07.12.2015 - 02:38
fonte
2

what really is the runtime environment in general?

Sì, la vostra ampia comprensione "l'ambiente di runtime è l'ambiente su cui verrà eseguito il codice" è specifico quanto verrà definito quel termine.

Not just for .NET, but in programming in general, what is the runtime environment?

In effetti, l'hardware su cui è in esecuzione il tuo codice. Il sistema operativo su cui è in esecuzione il tuo codice. Le librerie rese disponibili per il tuo codice durante l'esecuzione. Le variabili di ambiente a cui il tuo codice ha accesso. Le impostazioni internazionali in cui è in esecuzione il programma. (Se applicabile) il compilatore JIT / interprete byte-codice / garbage collector / sandbox / app server su cui è in esecuzione il codice.

In summary, how should we properly understand the idea of runtime environment?

Varia da lavoro a lavoro. A molti programmi non interessa molto, perché non ha molta importanza. Alcuni programmi devono preoccuparsi molto, perché la piattaforma su cui girano non fa un ottimo lavoro nell'estrarre le differenze hardware, o perché il codice varierà il suo comportamento a seconda dell'ambiente in cui è in esecuzione.

Ma come termine, conoscere "ambiente di runtime" generalmente si riferisce all'intermediario "roba" necessario per eseguire linguaggi gestiti come C # e Java è sufficiente.

    
risposta data 07.12.2015 - 02:37
fonte

Leggi altre domande sui tag