Wat is “runtime”?

Ik heb gehoord over zaken als “C Runtime”, “Visual C++ 2008 Runtime”, “.NET Common Language Runtime”, enz.

  • Wat is “runtime” precies?
  • Waar is het van gemaakt?
  • Hoe werkt het met mijn code? Of misschien nauwkeuriger, hoe wordt mijn code erdoor bestuurd?

Bij het coderen van assembler op Linux, zou ik de INT-instructie kunnen gebruiken om de systeemaanroep te doen. Dus, is de runtime niets anders dan een aantal geprefabriceerde functies die de low-level-functie in meer abstracte en high-level-functies wikkelen? Maar lijkt dit niet meer op de definitie voor de bibliotheek, niet voor de runtime?

Zijn “runtime” en “runtime-bibliotheek” twee verschillende dingen?

TOEVOEGEN 1

Tegenwoordig denk ik dat Runtimemisschien iets gemeen heeft met de zogenaamde Virtual Machine, zoals JVM. Hier is het citaat dat tot zo’n gedachte leidt:

Dit compilatieproces is voldoende complex om in te breken
verschillende lagen van abstractie, en deze omvatten meestal drie
vertalers: een compiler, een implementatie van een virtuele machine en een
assembler. — De elementen van computersystemen(Inleiding,
De weg naar hardwareland)

TOEVOEGEN 2

Het boek Expert C Programming: Deep C Secrets. Hoofdstuk 6 Runtime Data Structures is een nuttige verwijzing naar deze vraag.

ADD 3 – 7:31 AM 28-2-2021

Hier is een deel van mijn perspectief nadat ik wat kennis heb opgedaan over processorontwerp. Het hele computergebeuren is gewoon meerdere niveaus van abstractie. Het gaat van elementaire transistoren tot aan het lopende programma. Voor elk level Nvan abstractie, is de runtimehet onmiddellijke level N-1van abstractie dat eronder gaat. En het is God die ons het niveau 0 van abstractie geeft.


Antwoord 1, autoriteit 100%

Runtime beschrijft software/instructies die worden uitgevoerd terwijluw programma draait, met name die instructies die u niet expliciet hebt geschreven, maar die nodig zijn voor de juiste uitvoering van uw code.

Lage talen zoals C hebben een zeer kleine (indien aanwezig) runtime. Complexere talen zoals Objective-C, waarmee dynamische berichten kunnen worden doorgegeven, hebben een veel langere looptijd.

Je hebt gelijk dat runtime-code bibliotheekcode is, maar bibliotheekcode is een meer algemene term, die de code beschrijft die door elkebibliotheek wordt geproduceerd. Runtime-code is specifiek de code die nodig is om de functies van de taal zelf te implementeren.


Antwoord 2, autoriteit 38%

Runtime is een algemene term die verwijst naar elke bibliotheek, framework of platform waarop uw code wordt uitgevoerd.

De C- en C++-runtimes zijn verzamelingen van functies.

De .NET-runtime bevat een tussenliggende taal-interpreter, een garbagecollector en meer.


Antwoord 3, autoriteit 26%

Volgens Wikipedia: runtime-bibliotheek/runtime-systeem.

Bij computerprogrammering is een runtime-bibliotheek een speciale programmabibliotheek die door een compiler wordt gebruikt om functies te implementeren die in een programmeertaal zijn ingebouwd tijdens de runtime (uitvoering) van een computerprogramma. Dit omvat vaak functies voor invoer en uitvoer, of voor geheugenbeheer.


Een runtime-systeem (ook wel runtime-systeem of gewoon runtime genoemd) is software die is ontworpen om de uitvoering van computerprogramma’s te ondersteunen die in een of andere computertaal zijn geschreven. Het runtime-systeem bevat implementaties van basiscommando’s op een laag niveau en kan ook commando’s op een hoger niveau implementeren en kan typecontrole, foutopsporing en zelfs het genereren en optimaliseren van code ondersteunen.
Sommige services van het runtime-systeem zijn toegankelijk voor de programmeur via een applicatieprogrammeerinterface, maar andere services (zoals taakplanning en resourcebeheer) zijn mogelijk niet toegankelijk.


Re: uw bewerking, “runtime” en “runtime library” zijn twee verschillende namen voor hetzelfde.


Antwoord 4, autoriteit 21%

De runtimeof uitvoeringsomgevingis het deel van een taalimplementatie die code uitvoert en aanwezig is bij runtime; het compile-timedeel van de implementatie wordt in de C-standaard de vertaalomgevinggenoemd.

Voorbeelden:

  • de Java-runtime bestaat uit de virtuele machine en de standaardbibliotheek

  • een algemene C-runtime bestaat uit de loader (die deel uitmaakt van het besturingssysteem) en de runtime-bibliotheek, die de delen van de C-taal implementeert die niet door de compiler in het uitvoerbare bestand zijn ingebouwd; in gehoste omgevingen omvat dit de meeste delen van de standaardbibliotheek


Antwoord 5, autoriteit 10%

Naar mijn idee is runtimeprecies wat het betekent – de tijd waarop het programma wordt uitgevoerd. Je kunt zeggen dat er iets gebeurt tijdens runtime/ runtimeof tijdens het compileren.

Ik denk dat runtimeen runtime librarytwee aparte dingen zouden moeten zijn (als ze dat niet zijn). “C runtime” lijkt me niet juist. Ik noem het “C runtime bibliotheek”.

Antwoorden op uw andere vragen:
Ik denk dat de term runtimekan worden uitgebreid om ook de omgeving en de context van het programma te omvatten wanneer het wordt uitgevoerd, dus:

  • het bestaat uit alles dat “omgeving” kan worden genoemd gedurende de tijd dat het programma wordt uitgevoerd, bijvoorbeeld andere processen, status van het besturingssysteem en gebruikte bibliotheken, status van andere processen, enz.
  • het heeft geen algemene interactie met uw code, het definieert alleen onder welke omstandigheden uw code werkt, wat ervoor beschikbaar is tijdens de uitvoering.

Dit antwoord is tot op zekere hoogte slechts mijn mening, geen feit of definitie.


Antwoord 6, autoriteit 9%

Matt Ball heeft het goed beantwoord. Ik zou het zeggen met voorbeelden.

Overweeg een programma uit te voeren dat is gecompileerd in de Turbo-Borland C/C++ (versie 3.1 van het jaar 1991) compiler en laat het draaien onder een 32-bits versie van Windows zoals Win 98/2000 enz.

Het is een 16-bits compiler. En u zult zien dat al uw programma’s 16-bits pointers hebben. Waarom is het zo als uw besturingssysteem 32-bits is? Omdat uw compiler de uitvoeringsomgeving van 16 bit heeft ingesteld en de 32-bits versie van het besturingssysteem dit ondersteunt.

Wat gewoonlijk JRE (Java Runtime Environment) wordt genoemd, voorziet een Java-programma van alle middelen die het mogelijk nodig heeft om uit te voeren.

Eigenlijk is de runtime-omgeving een hersenproduct van het idee van virtuele machines. Een virtuele machine implementeert de ruweinterface tussen hardware en wat een programma mogelijk moet uitvoeren. De runtime-omgeving neemt deze interfaces over en presenteert ze voor gebruik door de programmeur. Een compilerontwikkelaar zou deze faciliteiten nodig hebben om een uitvoeringsomgeving voor zijn programma’s te bieden.


Antwoord 7, autoriteit 2%

Laat de tijd precies lopen waar uw code tot leven komt en u kunt veel belangrijke dingen zien die uw code doet.

Runtime is verantwoordelijk voor het toewijzen van geheugen, het vrijmaken van geheugen, het gebruik van het subsysteem van het besturingssysteem zoals (File Services, IO Services.. Network Services etc.)

Uw code heet “WERKEN IN THEORIE” totdat u uw code praktisch uitvoert.
en Runtime is een vriend die hierbij helpt.


Antwoord 8, autoriteit 2%

Ik ben niet gek op de andere antwoorden hier; ze zijn te vaag en abstract voor mij. Ik denk meer in verhalen. Hier is mijn poging tot een beter antwoord.

een BASIC voorbeeld

Stel dat het 1985 is en je schrijft een kort BASIC-programma op een Apple II:

] 10 PRINT "HELLO WORLD!"
] 20 GOTO 10

Tot nu toe is uw programma slechts de broncode. Het is niet actief en we zouden zeggen dat er geen “runtime” aan verbonden is.

Maar nu voer ik het uit:

] RUN

Hoe loopt het eigenlijk? Hoe weet het hoe de stringparameter van PRINTnaar het fysieke scherm moet worden gestuurd? Ik heb zeker geen systeeminformatie in mijn code gegeven, en PRINTzelf weet niets over mijn systeem.

In plaats daarvan is RUNeigenlijk een programma zelf — de code vertelt het hoe mijn code moet worden geparseerd, hoe het moet worden uitgevoerd en hoe relevante verzoeken naar het besturingssysteem van de computer moeten worden verzonden. Het programma RUNbiedt de “runtime”-omgeving die fungeert als een laag tussen het besturingssysteem en mijn broncode. Het besturingssysteem zelf fungeert als onderdeel van deze “runtime”, maar we bedoelen het meestal niet om het op te nemen als we het hebben over een “runtime” zoals het programma RUN.

Soorten compilatie en runtime

Gecompileerde binaire talen

In sommige talen moet uw broncode worden gecompileerd voordat deze kan worden uitgevoerd. Sommige talen compileren uw code in machinetaal — het kan rechtstreeks door uw besturingssysteem worden uitgevoerd. Deze gecompileerde code wordt vaak “binair” genoemd (ook al is elk ander soort bestand ook binair :).

In dit geval is er nog steeds een minimale “runtime” bij betrokken — maar die runtime wordt geleverd door het besturingssysteem zelf. De compileerstap betekent dat veel instructies die ervoor zouden zorgen dat uw programma zou crashen, worden gedetecteerd voordat de code ooit wordt uitgevoerd.

C is zo’n taal; wanneer je een C-programma uitvoert, is het volledig in staat om illegale verzoeken naar het besturingssysteem te sturen (zoals “geef me de controle over al het geheugen op de computer en wis alles”). Als er een onwettig verzoek wordt gedaan, zal het besturingssysteem je programma meestal doden en je niet vertellen waarom, en de inhoud van het geheugen van dat programma op het moment dat het werd gedood dumpen in een .dump-bestand dat behoorlijk moeilijk is zin te geven. Maar soms heeft je code een commando dat een heel slecht idee is, maar het besturingssysteem beschouwt het niet als illegaal, zoals “wis een willekeurig beetje geheugen dat dit programma gebruikt”; dat kan super rare problemen veroorzaken die moeilijk tot op de bodem uit te zoeken zijn.

Bytecodetalen

Andere talen compileren uw code in een taal die het besturingssysteem niet rechtstreeks kan lezen, maar een specifiek runtime-programma kan uw gecompileerde code lezen. Deze gecompileerde code wordt vaak “bytecode” genoemd.

Hoe uitgebreider dit runtime-programma is, hoe meer extra spul het aan de zijkant kan doen dat uw code niet heeft opgenomen (zelfs in de bibliotheken die u gebruikt) – bijvoorbeeld, kan de Java Runtime-omgeving (“JRE”) bijvoorbeeld Houd de geheugenopdrachten bij die niet langer nodig zijn en vertel het besturingssysteem het veilig is om dat geheugen voor iets anders opnieuw te gebruiken, en het kan situaties vangen waarin uw code probeert een illegaal verzoek naar het besturingssysteem te sturen en in plaats daarvan te verlagen een leesbare fout.

Al deze overhead maakt ze langzamer dan gecompileerde binaire talen, maar het maakt de runtime krachtig en flexibel; In sommige gevallen kan het zelfs een andere code inhalen nadat het begint met draaien, zonder opnieuw te beginnen. De compileerstap betekent dat veel uitspraken die ervoor zorgen dat uw programma aan crash worden gedetecteerd voordat de code ooit wordt uitgevoerd; En de krachtige runtime kan je code houden van domme dingen (bijvoorbeeld, je kunt niet “een willekeurig beetje geheugen wissen Dit programma gebruikt”).

Scripting Talen

Nog andere talen proesten uw code helemaal niet; De runtime doet al het werk van het lezen van uw codelijn per regel, interpreteert het en het uitvoeren ervan. Dit maakt ze zelfs langzamer dan “bytecode” -talen, maar ook nog flexibeler; In sommige gevallen kunt u zelfs met uw broncode viemen als deze wordt uitgevoerd! Hoewel het ook betekent dat je een volledig illegale verklaring in je code kunt hebben, en het kan daar in je productiecode zitten zonder aandacht te trekken, tot op een dag wordt het uitgevoerd en veroorzaakt een crash.

Dit worden over het algemeen “scripting”-talen genoemd; ze omvatten Javascript, Python, Perl en PHP. Sommige van deze bieden gevallen waarin u ervoor kunt kiezen om de code te compileren om de snelheid te verbeteren (bijvoorbeeld het WebAssembly-project van Javascript en de trans-compilatie van Python naar C-code). Met Javascript kunnen gebruikers op een website dus de exacte code zien die wordt uitgevoerd, aangezien hun browser de runtime levert.

Deze flexibiliteit maakt ook innovaties in runtime-omgevingen mogelijk, zoals node.js, dat zowel een codebibliotheek als een runtime-omgeving is die uw Javascript-code als een server kan uitvoeren, wat inhoudt dat u zich heel anders gedraagt dan wanneer u de dezelfde code in een browser.


Antwoord 9

Runtime betekent in feite wanneer het programma interageert met de hardware en het besturingssysteem van een machine. C heeft geen eigen runtime, maar in plaats daarvan vraagt het runtime van een besturingssysteem (dat in feite een onderdeel is van ram) om zichzelf uit te voeren.


Antwoord 10

een runtime kan de huidige fase van de levensduur van het programma aangeven (runtime / compileertijd / laadtijd / linktijd)
of het kan een runtime-bibliotheek betekenen, die de basisacties op laag niveau vormt die in verbinding staan met de uitvoeringsomgeving.
of het kan een runtime-systeem betekenen, wat hetzelfde is als een uitvoeringsomgeving.

in het geval van C-programma’s is de runtime de code die de stapel, de heap enz. instelt, wat een vereiste is die wordt verwacht door de C-omgeving. het vormt in wezen de omgeving die door de taal wordt beloofd. (het kan een runtime-bibliotheekcomponent hebben, crt0.lib of iets dergelijks in het geval van C)


Antwoord 11

Ik ontdekte dat de volgende mappenstructuureen zeer inzichtelijke context om te begrijpen wat runtimeis:

U kunt zien dat er de ‘bron ‘ is, er is de ‘sdk ‘ of ‘software ontwikkelingskit’ en dan is er de Runtime, bijvoorbeeld. het spul dat wordt uitgevoerd – bij runtime. De inhoud is als:

De Win32-zip bevat .exe -s en .dll -s.

dus bijvoorbeeld. De C-runtime zou de bestanden zijn zoals deze – C Runtime-bibliotheken, .so-s of .dll -s – je runt bij runtime, speciaal gemaakt door hun (of de inhoud ‘of doeleinden’) Inclusion in de definitie van de C Taal (op ‘Papier’), vervolgens geïmplementeerd door uw C-implementatie van keuze. En dan krijg je de runtime van die implementatie, om het te gebruiken en op te bouwen.

Dat wil zeggen, met een kleine polarisatie, de Runnable-bestanden die de gebruikers van uw nieuwe C-gebaseerde programma nodig hebben. Als een ontwikkelaar van een op C-gebaseerd programma, doe je dat ook, maar je hebt de C-compiler en de C-bibliotheekkoppen ook nodig; de gebruikers hebben die niet nodig.


Antwoord 12

Als mijn begrip van het lezen van de bovenstaande antwoorden correct is, is runtime in principe ‘achtergrondprocessen’ zoals garbage-verzameling, geheugentoewijzing, in principe alle processen die indirect zijn aangeroepen, door de bibliotheken / kaders die uw code in zijn en met name die processen die plaatsvinden na compilatie, terwijl de toepassing wordt uitgevoerd.


Antwoord 13

Deze secties van de MSDN-documentatie Deal met de meeste van uw vragen:
http://msdn.microsoft.com/en-us/ Bibliotheek / 8BS2ECF4 (vs.71) .aspx

Ik hoop dat dit helpt.

Bedankt,
Damian


Antwoord 14

Runtime is enigszins tegengesteld aan ontwerptijd en compileertijd/linktijd. Historisch gezien komt het uit een trage mainframe-omgeving waar machinetijd duur was.


Antwoord 15

Runtime is de instantie waarin u niet weet welk type objecten tijdens de uitvoering worden gemaakt, het maken van objecten is gebaseerd op een bepaalde voorwaarde of enig rekenwerk.
In tegendeel, compileertijd is de instantie waar vereiste objecten door u worden gedefinieerd voordat deze worden uitgevoerd.

Other episodes