Was ist "Laufzeit"?


404

Ich habe von Dingen wie "C Runtime", "Visual C ++ 2008 Runtime", ".NET Common Language Runtime" usw. gehört.

  • Was genau ist " Laufzeit "?
  • Aus was ist es gemacht?
  • Wie interagiert es mit meinem Code? Oder genauer gesagt, wie wird mein Code dadurch gesteuert?

Beim Codieren der Assemblersprache unter Linux könnte ich die INT-Anweisung verwenden, um den Systemaufruf durchzuführen. Ist die Laufzeit also nichts anderes als eine Reihe vorgefertigter Funktionen, die die Low-Level-Funktion in abstraktere und High-Level-Funktionen umhüllen? Aber scheint dies nicht eher die Definition für die Bibliothek zu sein, nicht für die Laufzeit?

Sind "Laufzeit" und " Laufzeitbibliothek " zwei verschiedene Dinge?

ADD 1

Heutzutage denke ich, dass Runtime vielleicht etwas mit der sogenannten virtuellen Maschine gemeinsam hat , wie zum Beispiel JVM. Hier ist das Zitat, das zu solchen Gedanken führt:

Dieser Kompilierungsprozess ist so komplex, dass er in mehrere Abstraktionsebenen unterteilt werden kann. In der Regel sind drei Übersetzer beteiligt: ​​ein Compiler, eine Implementierung einer virtuellen Maschine und ein Assembler. --- Die Elemente von Computersystemen (Einführung, Der Weg zum Hardware-Land)

ADD 2

Das Buch Expert C Programming: Deep C Secrets . Kapitel 6 Laufzeitdatenstrukturen ist eine nützliche Referenz zu dieser Frage.


Die Laufzeit enthält den runtime libraryPlus-Steuercode und einen Status (vom Betriebssystem bereitgestellt).
Martin York

43
Tolle Frage, immer in Frage gestellt.
Kontaktmatt

Ich würde INT keine Funktion nennen. Weitere Informationen finden Sie unter stackoverflow.com/questions/1817577/… .
Koray Tugay

2
Ich habe einen anderen Beitrag auf einer Schwesterseite gefunden, der nützlich sein könnte: programmers.stackexchange.com/questions/294346/…
CloudyTrees

Ich finde es immer wie eine Sandbox zur Infrastruktur auf niedrigerer Ebene. Sie haben den Task-Manager / oder die Prozesse unter Unix-Kit, alle Low-Level-GUI-Bibliotheken usw. All das ist Teil der Laufzeit. Die Grundlagen, auf denen die Dinge aufgebaut sind.
JGFMK

Antworten:


262

Runtime beschreibt Software / Anweisungen, die ausgeführt werden, während Ihr Programm ausgeführt wird, insbesondere solche Anweisungen, die Sie nicht explizit geschrieben haben, die jedoch für die ordnungsgemäße Ausführung Ihres Codes erforderlich sind.

Low-Level-Sprachen wie C haben eine sehr kleine (wenn überhaupt) Laufzeit. Komplexere Sprachen wie Objective-C, die eine dynamische Nachrichtenübermittlung ermöglichen, haben eine viel umfangreichere Laufzeit.

Sie haben Recht, dass Laufzeitcode Bibliothekscode ist, aber Bibliothekscode ist ein allgemeinerer Begriff, der den von jeder Bibliothek erzeugten Code beschreibt . Laufzeitcode ist speziell der Code, der zum Implementieren der Funktionen der Sprache selbst erforderlich ist.


103

Runtime ist ein allgemeiner Begriff, der sich auf jede Bibliothek, jedes Framework oder jede Plattform bezieht, auf der Ihr Code ausgeführt wird.

Die C- und C ++ - Laufzeiten sind Sammlungen von Funktionen.

Die .NET-Laufzeit enthält einen Intermediate Language Interpreter, einen Garbage Collector und vieles mehr.


4
Die C ++ - Standardbibliothek enthält nicht nur Funktionen. Unter Bezugnahme auf Matt Ball sind die C- und C ++ - "Laufzeit" Laufzeitbibliotheken, die .NET-Laufzeit ist eine Laufzeitbibliothek und ein Laufzeitsystem.
Smerlin

1
Meine Frage ist, dass statische Bibliotheken auch Laufzeit sind? Ich denke, der Begriff wird hauptsächlich für gemeinsam genutzte Objekte verwendet, nicht wahr? Betrachten Sie libc unter Linux. Und was ist mit Plattformen und Frameworks? Auch sie sind in Bibliotheken unterteilt?
Amir Zadeh

3
Aber wie kann mein Code tatsächlich auf einer " Bibliothek, einem Framework oder einer Plattform " ausgeführt werden? Es sollte auf der CPU oder einer anderen Verarbeitungseinheit ausgeführt werden. Könnten Sie eine zusätzliche Detailebene zur weiteren Klärung bereitstellen?
n611x007

Die C- und C ++ - Laufzeiten sind Sammlungen von Funktionen. -> Welche Funktionen?
Koray Tugay

3
@KorayTugay: Die Funktionen in der Standardbibliothek, wie coutoder printf.
SLaks

80

Laut Wikipedia: Laufzeitbibliothek / Laufzeitsystem .

Bei der Computerprogrammierung ist eine Laufzeitbibliothek eine spezielle Programmbibliothek, die von einem Compiler verwendet wird, um während der Laufzeit (Ausführung) eines Computerprogramms in eine Programmiersprache integrierte Funktionen zu implementieren. Dies umfasst häufig Funktionen für die Ein- und Ausgabe oder für die Speicherverwaltung.


Ein Laufzeitsystem (auch Laufzeitsystem oder einfach nur Laufzeitsystem genannt) ist eine Software, die die Ausführung von Computerprogrammen unterstützt, die in einer bestimmten Computersprache geschrieben sind. Das Laufzeitsystem enthält Implementierungen grundlegender Befehle auf niedriger Ebene und kann auch Befehle auf höherer Ebene implementieren und die Typprüfung, das Debuggen und sogar die Codegenerierung und -optimierung unterstützen. Auf einige Dienste des Laufzeitsystems kann der Programmierer über eine Anwendungsprogrammierschnittstelle zugreifen, auf andere Dienste (z. B. Aufgabenplanung und Ressourcenverwaltung) kann jedoch möglicherweise nicht zugegriffen werden.


Betreff: Ihre Bearbeitung , "Laufzeit" und "Laufzeitbibliothek" sind zwei verschiedene Namen für dieselbe Sache.


69
Wikipedia ist keine gute Quelle für Zitate. Es ist ein guter Ort, um nach maßgeblichen Quellen zu suchen, sollte jedoch selbst nicht als maßgeblich angesehen werden und ist daher nicht zuverlässig. (Gemäß den Aussagen von Herrn Wales, dem Schöpfer von Wikipedia).
Martin York

5
Worauf bezieht sich "zur Laufzeit" im ersten Zitat (angeblich zur Laufzeitbibliothek)? Eine einfache [falsche] Interpretation könnte die folgende sein: "Während das Programm ausgeführt wird, verwendet der Compiler parallel eine Bibliothek (für sich selbst), um" versprochen "(dh zur Laufzeit zusätzlichen Code zu generieren)" zu versprechen "(gemäß der Sprachspezifikation) ) Funktionen für das Programm ". Dies kann falsch sein und / oder leicht mit einem Def eines Laufzeitsystems verbogen werden.
n611x007

2
Um fortzufahren, wo Loki abgereist ist, insbesondere wenn keiner der Artikel einen Hinweis enthält (das ist kein Zitat, ich dachte nur, ich sollte es besser sagen)
arsaKasra

1
@MartinYork ist nicht nur eine nicht maßgebliche Enzyklopädie, sondern konzentriert sich auch auf Dokumentation und nicht auf Erklärung. Die können sehr unterschiedlich sein.
Roy Prins

59

Die Laufzeit- oder Ausführungsumgebung ist der Teil einer Sprachimplementierung, die Code ausführt und zur Laufzeit vorhanden ist . Der Teil der Implementierung zur Kompilierungszeit wird im C-Standard als Übersetzungsumgebung bezeichnet .

Beispiele:

  • Die Java-Laufzeit besteht aus der virtuellen Maschine und der Standardbibliothek

  • Eine gemeinsame C-Laufzeit besteht aus dem Loader (der Teil des Betriebssystems ist) und der Laufzeitbibliothek, die die Teile der C-Sprache implementiert, die vom Compiler nicht in die ausführbare Datei integriert sind. In gehosteten Umgebungen umfasst dies die meisten Teile der Standardbibliothek


2
Danke, ich denke das ist die beste Antwort in diesem Thema.
Koray Tugay

1
Ich schätze es, "Ausführungsumgebung" zu nennen, aber ich denke, dass die Verwendung von "Laufzeit" als Alias ​​für die erstere eine schlechte Idee ist (was nach meinen Beobachtungen das ist, was viele Programmierer tun). "Laufzeitumgebung" ist genauer. Ich stimme @ MichałTrybus zu, dass "Laufzeit" "die Zeit bedeutet, zu der das Programm ausgeführt wird".
WloHu

32

Nach meinem Verständnis ist Laufzeit genau das, was es bedeutet - die Zeit, zu der das Programm ausgeführt wird. Sie können sagen, dass etwas zur Laufzeit / Laufzeit oder zur Kompilierungszeit passiert .

Ich denke, Laufzeit und Laufzeitbibliothek sollten (wenn nicht) zwei getrennte Dinge sein. "C runtime" scheint mir nicht richtig zu sein. Ich nenne es "C-Laufzeitbibliothek".

Antworten auf Ihre anderen Fragen: Ich denke, der Begriff Laufzeit kann erweitert werden, um auch die Umgebung und den Kontext des Programms zu berücksichtigen, wenn es ausgeführt wird.

  • Es besteht aus allem, was während der Ausführung des Programms als "Umgebung" bezeichnet werden kann, z. B. anderen Prozessen, dem Status des Betriebssystems und der verwendeten Bibliotheken, dem Status anderer Prozesse usw.
  • Es interagiert nicht im Allgemeinen mit Ihrem Code, sondern definiert lediglich, unter welchen Umständen Ihr Code funktioniert und was ihm während der Ausführung zur Verfügung steht.

Diese Antwort ist bis zu einem gewissen Grad nur meine Meinung, keine Tatsache oder Definition.


29

Matt Ball hat es richtig beantwortet. Ich würde es mit Beispielen sagen.

Erwägen Sie, ein Programm auszuführen, das in Turbo-Borland C / C ++ (Version 3.1 aus dem Jahr 1991) kompiliert wurde, und lassen Sie es unter einer 32-Bit-Version von Windows wie Win 98/2000 usw. laufen.

Es ist ein 16-Bit-Compiler. Und Sie werden sehen, dass alle Ihre Programme 16-Bit-Zeiger haben. Warum ist es so, wenn Ihr Betriebssystem 32bit ist? Weil Ihr Compiler die Ausführungsumgebung von 16 Bit eingerichtet hat und die 32-Bit-Version des Betriebssystems dies unterstützt.

Was allgemein als JRE (Java Runtime Environment) bezeichnet wird, bietet einem Java-Programm alle Ressourcen, die es zur Ausführung benötigt.

Tatsächlich ist die Laufzeitumgebung ein Gehirnprodukt der Idee von virtuellen Maschinen. Eine virtuelle Maschine implementiert die unformatierte Schnittstelle zwischen Hardware und dem, was ein Programm möglicherweise ausführen muss. Die Laufzeitumgebung übernimmt diese Schnittstellen und stellt sie dem Programmierer zur Verfügung. Ein Compiler-Entwickler würde diese Funktionen benötigen, um eine Ausführungsumgebung für seine Programme bereitzustellen.


Eine virtuelle Maschine implementiert die "rohe" Schnittstelle zwischen Hardware und dem, was ein Programm möglicherweise ausführen muss. -> Da bin ich mir nicht sicher.
Koray Tugay

7

Führen Sie die Laufzeit genau dort aus, wo Ihr Code zum Leben erweckt wird, und Sie können viele wichtige Dinge sehen, die Ihr Code tut.

Runtime ist dafür verantwortlich, Speicher zuzuweisen, Speicher freizugeben und das Subsystem des Betriebssystems wie (Dateidienste, E / A-Dienste, Netzwerkdienste usw.) zu verwenden.

Ihr Code heißt "WORKING IN THEORY", bis Sie Ihren Code praktisch ausführen. und Runtime ist ein Freund, der dabei hilft, dies zu erreichen.


3

Eine Laufzeit kann die aktuelle Phase der Programmlebensdauer (Laufzeit / Kompilierungszeit / Ladezeit / Verknüpfungszeit) oder eine Laufzeitbibliothek bezeichnen, die die grundlegenden Aktionen auf niedriger Ebene bildet, die mit der Ausführungsumgebung verbunden sind. oder es könnte ein Laufzeitsystem bedeuten, das mit einer Ausführungsumgebung identisch ist.

Bei C-Programmen ist die Laufzeit der Code, der den Stapel, den Heap usw. einrichtet, was von der C-Umgebung erwartet wird. Es schafft im Wesentlichen die Umgebung, die von der Sprache versprochen wird. (Es könnte eine Laufzeitbibliothekskomponente, crt0.lib oder ähnliches im Fall von C haben.)


3

Ich fand heraus, dass die folgende Ordnerstruktur einen sehr aufschlussreichen Kontext für das Verständnis dessen darstellt, was runtimeist:

Laufzeit von Mozilla XulRunner

Sie können sehen, dass es die ' Quelle ' gibt, es gibt das ' SDK ' oder 'Software Development Kit' und dann gibt es die Runtimez. das Zeug, das ausgeführt wird - zur Laufzeit. Der Inhalt ist wie folgt:

Ordnerinhalt der Laufzeit

Die Win32-Zip enthält .exe -s und .dll -s.

Also zB. Die C-Laufzeit sind die Dateien wie diese - C-Laufzeitbibliotheken, .so-s oder .dll -s -, die Sie zur Laufzeit ausführen C-Sprache (auf 'Papier'), dann von Ihrer C-Implementierung Ihrer Wahl implementiert. Und dann erhalten Sie die Laufzeit dieser Implementierung, um sie zu verwenden und darauf aufzubauen.

Das heißt, mit ein wenig Polarisierung die ausführbaren Dateien, die die Benutzer Ihres neuen C-basierten Programms benötigen. Als Entwickler eines C-basierten Programms tun Sie das auch, aber Sie benötigen auch den C-Compiler und die C-Bibliotheks-Header. Die Benutzer brauchen diese nicht.


1
Eine andere Möglichkeit, die Laufzeit zu kontextualisieren, ist der nicht verwandte Artikel Mythos 6 der Python-Mythen , in dem Sie die Unterscheidung zwischen Laufzeit und Programmiersprache im ersten Absatz von Mythos 6 sehen können.
n611x007

3

Laufzeit bedeutet im Grunde, wenn das Programm mit der Hardware und dem Betriebssystem einer Maschine interagiert. C hat keine eigene Laufzeit, sondern fordert die Laufzeit von einem Betriebssystem (das im Grunde ein Teil von RAM ist) an, sich selbst auszuführen.


1

Wenn ich beim Lesen der obigen Antworten richtig verstanden habe, handelt es sich bei Runtime im Grunde genommen um Hintergrundprozesse wie Speicherbereinigung, Speicherzuweisung, im Grunde alle Prozesse, die indirekt von den Bibliotheken / Frameworks aufgerufen werden, in denen Ihr Code geschrieben ist, und insbesondere um diese Prozesse, die nach der Kompilierung auftreten, während die Anwendung ausgeführt wird.


-1

Diese Abschnitte der MSDN-Dokumentation behandeln die meisten Ihrer Fragen: http://msdn.microsoft.com/en-us/library/8bs2ecf4(VS.71).aspx

Ich hoffe das hilft.

Danke, Damian


3
Eigentlich nicht; er fragt nicht nur nach .Net.
SLaks

@ Matt: Schon wieder richtig. Allerdings wurden 2/3 seiner Laufzeiten von .Net unterstützt, 1/2 seiner Tags befassen sich mit .Net und ich dachte nur, die Links wären nützlich.
Damian Schenkelman

Ich würde es so ausdrücken: "3/4 der Sprachen unterstützen .NET". .NET unterstützt nicht viel, es wurde entwickelt, um die Kluft zwischen Unix und Windows auf Middleware-Ebene aufrechtzuerhalten.
Matt Joiner

@ MattJoiner - Das mag 2010 wahr gewesen sein, aber es ist heute mit .NET Standard und Open-Source-Implementierungen wie .NET Core usw. monumental nicht wahr.
rory.ap

-2

Die Laufzeit ist der Fall, in dem Sie nicht wissen, welche Art von Objekten während der Ausführung erstellt wird. Die Objekterstellung basiert auf bestimmten Bedingungen oder Berechnungsarbeiten. Im Gegensatz dazu ist die Kompilierungszeit die Instanz, in der erforderliche Objekte von Ihnen vor ihrer Ausführung definiert werden.


-3

Die Laufzeit ist etwas entgegengesetzt zur Entwurfszeit und Kompilierungszeit / Verknüpfungszeit. Historisch gesehen stammt es aus einer langsamen Mainframe-Umgebung, in der die Maschinenzeit teuer war.


1
Dies beantwortet die Frage nicht und erschwert sie weiter.
cglotr
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.