Laufzeit vs. Kompilierungszeit


370

Was ist der Unterschied zwischen Laufzeit und Kompilierungszeit?


Ich habe ein sehr kleines, aber klares Beispiel gegeben ... Es schüchtert nicht mit großen Details ein. Danach können alle Antworten durchgearbeitet werden. Sie sind fantastisch ...
Sankar Banerjee

Antworten:


479

Der Unterschied zwischen Kompilierungszeit und Laufzeit ist ein Beispiel dafür, was spitzköpfige Theoretiker die Phasendifferenzierung nennen . Es ist eines der am schwierigsten zu erlernenden Konzepte, insbesondere für Menschen ohne viel Hintergrundwissen in Programmiersprachen. Um dieses Problem anzugehen, finde ich es hilfreich zu fragen

  1. Welche Invarianten erfüllt das Programm?
  2. Was kann in dieser Phase schief gehen?
  3. Wenn die Phase erfolgreich ist, wie lauten die Nachbedingungen (was wissen wir)?
  4. Was sind die Ein- und Ausgänge, falls vorhanden?

Kompilierzeit

  1. Das Programm muss keine Invarianten erfüllen. Tatsächlich muss es überhaupt kein wohlgeformtes Programm sein. Sie können diesen HTML-Code dem Compiler zuführen und ihn barf ...
  2. Was kann beim Kompilieren schief gehen:
    • Syntaxfehler
    • Tippfehler
    • (Selten) Compiler stürzt ab
  3. Was wissen wir, wenn der Compiler erfolgreich ist?
    • Das Programm war gut geformt - ein aussagekräftiges Programm in jeder Sprache.
    • Es ist möglich, das Programm zu starten. (Das Programm schlägt möglicherweise sofort fehl, aber wir können es zumindest versuchen.)
  4. Was sind die Ein- und Ausgänge?
    • Die Eingabe war das zu kompilierende Programm sowie alle Header-Dateien, Schnittstellen, Bibliotheken oder anderes Voodoo, die importiert werden mussten, um kompiliert zu werden.
    • Die Ausgabe ist hoffentlich Assembler-Code oder verschiebbarer Objektcode oder sogar ein ausführbares Programm. Oder wenn etwas schief geht, ist die Ausgabe eine Reihe von Fehlermeldungen.

Laufzeit

  1. Wir wissen nichts über die Invarianten des Programms - sie sind alles, was der Programmierer eingegeben hat. Laufzeitinvarianten werden nur selten vom Compiler erzwungen. es braucht Hilfe vom Programmierer.
  2. Was schief gehen kann, sind Laufzeitfehler :

    • Durch Null teilen
    • Dereferenzieren eines Nullzeigers
    • Der Speicher geht zur Neige

    Es kann auch Fehler geben, die vom Programm selbst erkannt werden:

    • Es wird versucht, eine Datei zu öffnen, die nicht vorhanden ist
    • Versuchen Sie, eine Webseite zu finden, und stellen Sie fest, dass eine angebliche URL nicht gut formuliert ist
  3. Wenn die Laufzeit erfolgreich ist, wird das Programm beendet (oder läuft weiter), ohne dass es abstürzt.
  4. Die Ein- und Ausgänge liegen ganz beim Programmierer. Dateien, Fenster auf dem Bildschirm, Netzwerkpakete, an den Drucker gesendete Aufträge, wie Sie es nennen. Wenn das Programm Raketen startet, ist das eine Ausgabe, und dies geschieht nur zur Laufzeit :-)

13
Sehr gute Antwort auf das, was es abdeckt (+1), aber Sie berühren nicht einmal die Metaprogrammierungsaspekte von Kompilierungszeit und Laufzeit, und das ist meiner Meinung nach der interessanteste Teil. Ich gebe zu, wenn diese Antwort akzeptiert wird, dass sie möglicherweise außerhalb dessen liegt, wonach das OP gesucht hat.
BCS

4
Schön, wenn mich jemand während meiner Vorlesungen danach fragt, benutze ich deine Antwort :-)
e-satis

12
Das ist wirklich eine schöne Antwort. Es ist ziemlich klar und verständlich. Es ist nicht einfach, so viele klare Antworten in Google zu finden.
Tarik

7
Selbst wenn Sie eine Weile programmiert haben, ist es immer noch nicht leicht zu bekommen ... es ist nicht nur ein Neuling. Gute Frage vom OP.
PositiveGuy

11
"Das Programm muss keine Invarianten befriedigen. Tatsächlich muss es überhaupt kein wohlgeformtes Programm sein. Sie könnten diesen HTML-Code dem Compiler zuführen und ihn barf ansehen ..." Ich habe keine Ahnung, was Sie sagen Hier. Können Sie das in einfachen Worten erklären, die nicht mit all dem technischen Müll überfüllt sind?
PositiveGuy

175

Ich denke an Fehler und daran, wann sie abgefangen werden können.

Kompilierungszeit:

string my_value = Console.ReadLine();
int i = my_value;

Einem Zeichenfolgenwert kann keine Variable vom Typ int zugewiesen werden, sodass der Compiler zur Kompilierungszeit sicher weiß , dass dieser Code ein Problem aufweist

Laufzeit:

string my_value = Console.ReadLine();
int i = int.Parse(my_value);

Hier hängt das Ergebnis davon ab, welche Zeichenfolge von ReadLine () zurückgegeben wurde. Einige Werte können zu einem int analysiert werden, andere nicht. Dies kann nur zur Laufzeit ermittelt werden


59
Das können wir alle verstehen. Keine allgemeinen Mülltechnikwörter hier. Nett.
PositiveGuy

Für eine iPhone-App: Wird der Code zum ersten Mal vom Entwickler in eine .appErweiterung kompiliert ? oder passiert es beim Start jedes Mal, wenn der Benutzer die App startet?
Honig

1
@Honey es wird zum ersten Mal vom Entwickler in eine .app
maytham-ɯɐɥʇʎɐɯ

2
Dies ist eine großartige Antwort, die den Unterschied zwischen Kompilierung und Laufzeit konzeptionell abdeckt. Ich schätze die akademische, professorale Antwort, die ebenfalls gewählt wurde, aber diese ist klar und prägnant. Nachdem ich diese Antwort gelesen habe, kann ich zurückgehen und die gewählte Antwort lesen, und es ist sinnvoller. Danke
Mojave

72

Kompilierungszeit: Der Zeitraum, in dem Sie als Entwickler Ihren Code kompilieren.

Laufzeit: Der Zeitraum, in dem ein Benutzer Ihre Software ausführt.

Benötigen Sie eine klarere Definition?


12
@BCS: Das OP hatte möglicherweise eine äußerst einfache Einführung in die Programmierung mit einer interpretierten Sprache oder einer Sprache, die in einem Schritt kompiliert und dann ausgeführt wird, sodass die Unterscheidung nie erforderlich war. Die Frage ist naiv, aber nicht dumm.
dmckee --- Ex-Moderator Kätzchen

@dmckee: Ich denke, diese Antwort wäre für Ihren Benutzer nicht einmal von Nutzen, da sie nicht mehr Informationen enthält als die ursprüngliche Frage. Jeder, der die Frage stellen würde, die diese Antwort beantwortet, hat keine Business-Programmierung (und ich glaube nicht, dass das OP das gefragt hat).
BCS

Ich habe eine kurze Frage. Wenn jemand sagt, dass ein typischer Laufzeitfehler durch Null geteilt wird, aber was ist, wenn Sie eine Variable haben, sagen wir, int x = 3/0aber Sie tun nichts mit dieser Variablen. Wir drucken es nicht oder so. Wird das immer noch als Laufzeitfehler angesehen?
Robben

Für eine iPhone-App: Wird der Code zum ersten Mal vom Entwickler in eine .app-Erweiterung kompiliert? oder passiert es beim Start jedes Mal, wenn der Benutzer die App startet? Wenn es die Kompilierungszeit ist, für die der Code des Entwicklers kompiliert wird, warum sollte es mich dann interessieren? Ich meine, das hat keinen Einfluss auf die Benutzererfahrung, oder? Wie es die Entwickler Zeit töten würde - nur!
Honig

1
@ Robben Ich gehe davon aus, dass Sie Ihre Antwort nach all der Zeit haben, aber ich werde es für andere beantworten. Ja, es wäre ein Laufzeitfehler, auch wenn Sie es nicht verwenden
فربد ضروري

22

( Bearbeiten : Folgendes gilt für C # und ähnliche, stark typisierte Programmiersprachen. Ich bin mir nicht sicher, ob dies Ihnen hilft.)

Beispielsweise wird der folgende Fehler vom Compiler (zur Kompilierungszeit ) erkannt , bevor Sie ein Programm ausführen, und führt zu einem Kompilierungsfehler:

int i = "string"; --> error at compile-time

Andererseits kann ein Fehler wie der folgende vom Compiler nicht erkannt werden. Sie erhalten zur Laufzeit (wenn das Programm ausgeführt wird) einen Fehler / eine Ausnahme .

Hashtable ht = new Hashtable();
ht.Add("key", "string");
// the compiler does not know what is stored in the hashtable
// under the key "key"
int i = (int)ht["key"];  // --> exception at run-time

Ausnahmen. Hashtable war einer, aber ich fand, dass der größte Schritt .net 1.1 zu .net 2.0 war, von untypisierten zu typisierten Datensätzen (und jetzt linq). Der Versuch, ein defektes Formular mit einer zwielichtigen Datenbank zu beheben, hat mich sehr traurig gemacht!
Spence

19

Die Übersetzung von Quellcode in Dinge, die auf dem [Bildschirm | Festplatte | Netzwerk] geschehen, kann auf (ungefähr) zwei Arten erfolgen. Nennen Sie sie Kompilieren und Interpretieren.

In einem kompilierten Programm (Beispiele sind c und fortran):

  1. Der Quellcode wird in ein anderes Programm eingespeist (normalerweise als Compiler-Go-Figur bezeichnet), das ein ausführbares Programm (oder einen Fehler) erzeugt.
  2. Die ausführbare Datei wird ausgeführt (indem Sie darauf doppelklicken oder ihren Namen in die Befehlszeile eingeben).

Dinge, die im ersten Schritt geschehen, sollen zur "Kompilierungszeit" geschehen, Dinge, die im zweiten Schritt geschehen, sollen zur "Laufzeit" geschehen.

In einem interpretierten Programm (Beispiel MicroSoft Basic (on dos) und Python (glaube ich)):

  1. Der Quellcode wird in ein anderes Programm (normalerweise als Interpreter bezeichnet) eingespeist, das ihn direkt "ausführt". Hier dient der Interpreter als Zwischenschicht zwischen Ihrem Programm und dem Betriebssystem (oder der Hardware in wirklich einfachen Computern).

In diesem Fall ist der Unterschied zwischen Kompilierungszeit und Laufzeit schwieriger zu bestimmen und für den Programmierer oder Benutzer viel weniger relevant.

Java ist eine Art Hybrid, bei dem der Code zu Bytecode kompiliert wird, der dann auf einer virtuellen Maschine ausgeführt wird, die normalerweise ein Interpreter für den Bytecode ist.

Es gibt auch einen Zwischenfall, in dem das Programm zu Bytecode kompiliert und sofort ausgeführt wird (wie in awk oder perl).


11

Wenn Ihr Compiler herausfinden kann, was Sie meinen oder was ein Wert "zur Kompilierungszeit" ist, kann er dies grundsätzlich in den Laufzeitcode fest codieren. Wenn Ihr Laufzeitcode jedes Mal eine Berechnung durchführen muss, wenn er langsamer ausgeführt wird, ist es natürlich viel besser, wenn Sie zur Kompilierungszeit etwas bestimmen können.

Z.B.

Ständiges Falten:

Wenn ich schreibe:

int i = 2;
i += MY_CONSTANT;

Der Compiler kann diese Berechnung zur Kompilierungszeit durchführen, da er weiß, was 2 ist und was MY_CONSTANT ist. Als solches erspart es sich, bei jeder einzelnen Ausführung eine Berechnung durchzuführen.


Und es ist einfacher, den Kompilierungszeitcode zu pflegen als den zur Laufzeit gebundenen Code. Zur Kompilierungszeit können Sie den Compiler verwenden, um einige Dinge zu überprüfen. Das gleiche Material zur Laufzeit benötigt mehr Zeit zum Überprüfen, da es sich um Tests handelt.
user1154664

10

Hmm, ok, Laufzeit wird verwendet, um etwas zu beschreiben, das auftritt, wenn ein Programm ausgeführt wird.

Die Kompilierungszeit wird verwendet, um etwas zu beschreiben, das beim Erstellen eines Programms auftritt (normalerweise von einem Compiler).


8

Kompilierungszeit:

Dinge, die zur Kompilierungszeit ausgeführt werden, verursachen (fast) keine Kosten, wenn das resultierende Programm ausgeführt wird, können jedoch beim Erstellen des Programms hohe Kosten verursachen.

Laufzeit:

Mehr oder weniger das genaue Gegenteil. Geringe Kosten beim Erstellen, höhere Kosten beim Ausführen des Programms.

Von der anderen Seite; Wenn etwas zur Kompilierungszeit ausgeführt wird, wird es nur auf Ihrem Computer ausgeführt, und wenn etwas zur Laufzeit ausgeführt wird, wird es auf dem Computer Ihres Benutzers ausgeführt.

Relevanz

Ein Beispiel dafür, wo dies wichtig ist, wäre ein Gerätetragetyp. Eine Version zur Kompilierungszeit (wie Boost.Units oder meine Version in D ) ist genauso schnell wie die Lösung des Problems mit nativem Gleitkomma-Code, während eine Laufzeitversion Informationen über die Einheiten, die ein Wert sind, umpacken muss in und führen Sie neben jeder Operation Überprüfungen durch. Andererseits erfordern die Versionen zur Kompilierungszeit, dass die Einheiten der Werte zur Kompilierungszeit bekannt sind, und können den Fall nicht behandeln, in dem sie aus der Laufzeiteingabe stammen.


8

Nach der vorherigen ähnlichen Antwort auf die Frage Was ist der Unterschied zwischen Laufzeitfehler und Compilerfehler?

Kompilierungs- / Kompilierungszeit- / Syntax- / Semantikfehler: Kompilierungs- oder Kompilierungszeitfehler sind Fehler, die aufgrund eines Tippfehlers aufgetreten sind. Wenn wir nicht der richtigen Syntax und Semantik einer Programmiersprache folgen, werden Kompilierungszeitfehler vom Compiler ausgelöst. Sie lassen Ihr Programm keine einzelne Zeile ausführen, bis Sie alle Syntaxfehler entfernt oder die Fehler bei der Kompilierung behoben haben.
Beispiel: Fehlen eines Semikolons in C oder falsches Eingeben intals Int.

Laufzeitfehler: Laufzeitfehler sind die Fehler, die generiert werden, wenn das Programm ausgeführt wird. Diese Art von Fehlern führt dazu, dass sich Ihr Programm unerwartet verhält oder sogar Ihr Programm beendet. Sie werden oft als Ausnahmen bezeichnet.
Beispiel: Angenommen, Sie lesen eine nicht vorhandene Datei, was zu einem Laufzeitfehler führt.

Lesen Sie mehr über alle Programmierfehler hier


7

Als Ergänzung zu den anderen Antworten würde ich es einem Laien folgendermaßen erklären:

Ihr Quellcode ist wie die Blaupause eines Schiffes. Es definiert, wie das Schiff hergestellt werden soll.

Wenn Sie Ihre Blaupause an die Werft übergeben und sie beim Bau des Schiffes einen Defekt feststellen, hören sie auf zu bauen und melden ihn Ihnen sofort, bevor das Schiff jemals das Trockendock verlassen oder Wasser berührt hat. Dies ist ein Fehler bei der Kompilierung. Das Schiff schwebte noch nie oder benutzte seine Motoren. Der Fehler wurde gefunden, weil dadurch verhindert wurde, dass das Schiff überhaupt hergestellt wurde.

Wenn Ihr Code kompiliert wird, ist es so, als würde das Schiff fertiggestellt. Gebaut und bereit zu gehen. Wenn Sie Ihren Code ausführen, ist das wie das Starten des Schiffes auf einer Reise. Die Passagiere sind an Bord, die Motoren laufen und der Rumpf ist auf dem Wasser, also ist dies Laufzeit. Wenn Ihr Schiff einen schwerwiegenden Fehler aufweist, der es auf seiner Jungfernfahrt versenkt (oder auf einer Reise nachher wegen zusätzlicher Kopfschmerzen), ist ein Laufzeitfehler aufgetreten.


5

Beispiel: In einer stark typisierten Sprache kann ein Typ zur Kompilierungszeit oder zur Laufzeit überprüft werden. Zur Kompilierungszeit bedeutet dies, dass sich der Compiler beschwert, wenn die Typen nicht kompatibel sind. Zur Laufzeit bedeutet, dass Sie Ihr Programm problemlos kompilieren können, zur Laufzeit jedoch eine Ausnahme auslösen.


4

In einfachen Worten Differenz s / w Kompilierzeit & Laufzeit.

Kompilierungszeit: Der Entwickler schreibt das Programm im Java-Format und konvertiert es in den Bytecode, der eine Klassendatei ist. Während dieser Kompilierung kann jeder auftretende Fehler als Kompilierungszeitfehler definiert werden.

Laufzeit: Die generierte .class-Datei wird von der Anwendung für ihre zusätzliche Funktionalität verwendet. Die Logik stellt sich als falsch heraus und gibt einen Fehler aus, der ein Laufzeitfehler ist


4

Hier ist ein Zitat von Daniel Liang, Autor von 'Introduction to JAVA Programming', zum Thema Compilation:

„Ein Programm in einer Hochsprache geschrieben ist ein Quellprogramm oder Quellcode genannt. Da ein Computer kein Quellprogramm ausführen kann, muss ein Quellprogramm werden übersetzt in Maschinencode für die Ausführung . Die Übersetzung kann getan werden , ein weiteres Programmier - Tool aufgerufen ein Interpreter oder ein Compiler . " (Daniel Liang, "Einführung in die JAVA-Programmierung" , S. 8).

...Er fährt fort...

"Ein Compiler übersetzt den gesamten Quellcode in eine Maschinencodedatei , und die Maschinencodedatei wird dann ausgeführt."

Wenn wir Code auf hoher Ebene / für Menschen lesbar eingeben, ist dies zunächst nutzlos! Es muss in eine Abfolge von "elektronischen Ereignissen" in Ihrer winzigen kleinen CPU übersetzt werden! Der erste Schritt dazu ist die Zusammenstellung.

Einfach ausgedrückt: Während dieser Phase tritt ein Kompilierungsfehler auf, während später ein Laufzeitfehler auftritt.

Denken Sie daran: Nur weil ein Programm fehlerfrei kompiliert wurde, heißt das nicht, dass es fehlerfrei ausgeführt wird.

Ein Laufzeitfehler tritt im bereiten, laufenden oder wartenden Teil eines Programmlebenszyklus auf, während ein Kompilierungsfehler vor der 'neuen' Phase des Lebenszyklus auftritt.

Beispiel für einen Fehler bei der Kompilierung:

Ein Syntaxfehler - Wie kann Ihr Code in Anweisungen auf Maschinenebene kompiliert werden, wenn diese nicht eindeutig sind? Ihr Code muss zu 100% den syntaktischen Regeln der Sprache entsprechen, sonst kann er nicht in funktionierenden Maschinencode kompiliert werden .

Beispiel für einen Laufzeitfehler:

Speichermangel - Ein Aufruf einer rekursiven Funktion kann beispielsweise bei einer Variablen eines bestimmten Grades zu einem Stapelüberlauf führen! Wie kann der Compiler dies antizipieren? es kann nicht.

Und das ist der Unterschied zwischen einem Fehler bei der Kompilierung und einem Laufzeitfehler


2

Laufzeit bedeutet, dass etwas passiert, wenn Sie das Programm ausführen.

Kompilierungszeit bedeutet, dass etwas passiert, wenn Sie das Programm kompilieren.


2

Kompilierungszeit:

Dinge, die zur Kompilierungszeit ausgeführt werden, verursachen (fast) keine Kosten, wenn das resultierende Programm ausgeführt wird, können jedoch beim Erstellen des Programms hohe Kosten verursachen. Laufzeit:

Mehr oder weniger das genaue Gegenteil. Geringe Kosten beim Erstellen, höhere Kosten beim Ausführen des Programms.

Von der anderen Seite; Wenn etwas zur Kompilierungszeit ausgeführt wird, wird es nur auf Ihrem Computer ausgeführt, und wenn etwas zur Laufzeit ausgeführt wird, wird es auf dem Computer Ihres Benutzers ausgeführt.


2

Kompilierungszeit: Die Zeit, die benötigt wird, um den Quellcode in einen Maschinencode umzuwandeln, damit er zu einer ausführbaren Datei wird, wird als Kompilierungszeit bezeichnet.

Laufzeit: Wenn eine Anwendung ausgeführt wird, wird sie als Laufzeit bezeichnet.

Kompilierungszeitfehler sind solche Syntaxfehler, fehlende Dateireferenzfehler. Laufzeitfehler treten auf, nachdem der Quellcode in ein ausführbares Programm kompiliert wurde und während das Programm ausgeführt wird. Beispiele sind Programmabstürze, unerwartetes Programmverhalten oder nicht funktionierende Funktionen.


2

Stellen Sie sich vor, Sie sind ein Chef und haben einen Assistenten und ein Dienstmädchen. Sie geben ihnen eine Liste der zu erledigenden Aufgaben. Der Assistent (Kompilierungszeit) greift nach dieser Liste und überprüft, ob die Aufgaben verständlich sind und Sie hat nicht in einer unangenehmen Sprache oder Syntax geschrieben, also versteht er, dass Sie jemanden für einen Job zuweisen möchten, also weist er ihn für Sie zu und er versteht, dass Sie einen Kaffee möchten, also ist seine Rolle vorbei und das Dienstmädchen (Laufzeit) beginnt diese Aufgaben auszuführen, damit sie dir Kaffee macht, aber plötzlich findet sie keinen Kaffee mehr, damit sie aufhört, ihn zu machen, oder sie verhält sich anders und macht dir Tee (wenn das Programm anders verhält, weil er einen Fehler gefunden hat ).


1

Hier ist eine Erweiterung der Antwort auf die Frage "Unterschied zwischen Laufzeit und Kompilierungszeit?" - Unterschiede im Overhead im Zusammenhang mit Laufzeit und Kompilierungszeit?

Die Laufzeitleistung des Produkts trägt zu seiner Qualität bei, indem es schnellere Ergebnisse liefert. Die Leistung des Produkts zur Kompilierungszeit trägt zu seiner Aktualität bei, indem der Zyklus zum Bearbeiten, Kompilieren und Debuggen verkürzt wird. Sowohl die Laufzeitleistung als auch die Kompilierungsleistung sind jedoch sekundäre Faktoren für die Erzielung einer zeitnahen Qualität. Daher sollten Verbesserungen der Laufzeit und der Kompilierungszeit nur in Betracht gezogen werden, wenn dies durch Verbesserungen der Gesamtproduktqualität und -aktualität gerechtfertigt ist.

Eine großartige Quelle für weitere Informationen hier :


1

Ich habe immer darüber nachgedacht, was den Aufwand für die Programmverarbeitung betrifft und wie sich dies auf die Leistung auswirkt, wie bereits erwähnt. Ein einfaches Beispiel wäre, entweder den für mein Objekt erforderlichen absoluten Speicher im Code zu definieren oder nicht.

Ein definierter Boolescher Wert benötigt x Speicher. Dieser befindet sich dann im kompilierten Programm und kann nicht geändert werden. Wenn das Programm ausgeführt wird, weiß es genau, wie viel Speicher für x reserviert werden muss.

Wenn ich dagegen nur einen generischen Objekttyp definiere (dh eine Art undefinierten Platzhalter oder vielleicht einen Zeiger auf einen riesigen Blob), ist der für mein Objekt erforderliche tatsächliche Speicher erst bekannt, wenn das Programm ausgeführt wird und ich ihm etwas zuweise Daher muss es ausgewertet werden, und die Speicherzuweisung usw. wird dann zur Laufzeit dynamisch behandelt (mehr Laufzeitaufwand).

Wie es dynamisch gehandhabt wird, hängt dann von der Sprache, dem Compiler, dem Betriebssystem, Ihrem Code usw. ab.

In diesem Sinne hängt es jedoch wirklich vom Kontext ab, in dem Sie die Laufzeit im Vergleich zur Kompilierungszeit verwenden.


1

Wir können diese in zwei große Gruppen einteilen: statische Bindung und dynamische Bindung. Es basiert darauf, wann die Bindung mit den entsprechenden Werten erfolgt. Wenn die Referenzen zur Kompilierungszeit aufgelöst werden, handelt es sich um eine statische Bindung. Wenn die Referenzen zur Laufzeit aufgelöst werden, handelt es sich um eine dynamische Bindung. Statische Bindung und dynamische Bindung werden auch als frühe Bindung und späte Bindung bezeichnet. Manchmal werden sie auch als statischer Polymorphismus und dynamischer Polymorphismus bezeichnet.

Joseph Kulandai.


1

Der Hauptunterschied zwischen Laufzeit und Kompilierungszeit ist:

  1. Wenn in Ihrem Code Syntaxfehler und Typprüfungen vorhanden sind, wird ein Fehler bei der Kompilierungszeit ausgelöst, wobei die Laufzeit nach der Ausführung des Codes überprüft wird. Zum Beispiel:

int a = 1 int b = a/0;

Hier hat die erste Zeile am Ende kein Semikolon ---> Kompilierungszeitfehler nach Ausführung des Programms während der Ausführung von Operation b, Ergebnis ist unendlich ---> Laufzeitfehler.

  1. Bei der Kompilierungszeit wird nicht nach der Ausgabe der von Ihrem Code bereitgestellten Funktionen gesucht, während dies bei der Laufzeit der Fall ist.

1

Hier ist eine sehr einfache Antwort:

Laufzeit und Kompilierungszeit sind Programmierbegriffe, die sich auf verschiedene Phasen der Softwareprogrammentwicklung beziehen. Um ein Programm zu erstellen, schreibt ein Entwickler zuerst den Quellcode, der definiert, wie das Programm funktioniert. Kleine Programme enthalten möglicherweise nur einige hundert Zeilen Quellcode, während große Programme möglicherweise Hunderttausende von Zeilen Quellcode enthalten. Der Quellcode muss in Maschinencode kompiliert werden, um ein ausführbares Programm zu werden. Dieser Kompilierungsprozess wird als Kompilierungszeit bezeichnet (stellen Sie sich einen Compiler als Übersetzer vor).

Ein kompiliertes Programm kann von einem Benutzer geöffnet und ausgeführt werden. Wenn eine Anwendung ausgeführt wird, wird sie als Laufzeit bezeichnet.

Die Begriffe "Laufzeit" und "Kompilierungszeit" werden von Programmierern häufig verwendet, um auf verschiedene Arten von Fehlern hinzuweisen. Ein Kompilierungszeitfehler ist ein Problem wie ein Syntaxfehler oder ein fehlender Dateiverweis, der verhindert, dass das Programm erfolgreich kompiliert wird. Der Compiler erzeugt Fehler bei der Kompilierung und gibt normalerweise an, welche Zeile des Quellcodes das Problem verursacht.

Wenn der Quellcode eines Programms bereits in ein ausführbares Programm kompiliert wurde, können weiterhin Fehler auftreten, während das Programm ausgeführt wird. Beispiele hierfür sind nicht funktionierende Funktionen, unerwartetes Programmverhalten oder Programmabstürze. Diese Arten von Problemen werden als Laufzeitfehler bezeichnet, da sie zur Laufzeit auftreten.

Die Referenz


0

IMHO müssen Sie viele Links und Ressourcen lesen, um eine Vorstellung vom Unterschied zwischen Laufzeit und Kompilierungszeit zu bekommen, da es sich um ein sehr komplexes Thema handelt. Ich habe unten eine Liste dieser Bilder / Links, die ich empfehlen kann.

Abgesehen von dem, was oben gesagt wurde, möchte ich hinzufügen, dass manchmal ein Bild mit 1000 Wörtern:

  1. Die Reihenfolge dieser beiden: Zuerst ist die Kompilierungszeit und dann führen Sie ein kompiliertes Programm aus, das von einem Benutzer geöffnet und ausgeführt werden kann. Wenn eine Anwendung ausgeführt wird, heißt sie Laufzeit: Kompilierungszeit und dann Laufzeit1 Kompilierungszeit und dann Laufzeit1;

CLR_diag Kompilierungszeit und dann Laufzeit2  CLR_diag Kompilierungszeit und dann Laufzeit2

 from Wiki  

https://en.wikipedia.org/wiki/Run_time https://en.wikipedia.org/wiki/Run_time_(program_lifecycle_phase)

Laufzeit, Laufzeit oder Laufzeit können sich beziehen auf:

Computing

Laufzeit (Programmlebenszyklusphase) , der Zeitraum, in dem ein Computerprogramm ausgeführt wird

Runtime Library , eine Programmbibliothek zur Implementierung von Funktionen, die in eine Programmiersprache integriert sind

Laufzeitsystem , Software zur Unterstützung der Ausführung von Computerprogrammen

Software-Ausführung, der Prozess der Ausführung von Anweisungen nacheinander während der Laufzeitphase

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein Liste der Compiler https://en.wikipedia.org/wiki/List_of_compilersGeben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

  • Suchen Sie auf Google und vergleichen Sie Laufzeitfehler mit Kompilierungsfehlern:

Laufzeitfehler

Fehler kompilieren ;;

  1. Meiner Meinung nach ist es sehr wichtig zu wissen: 3.1 den Unterschied zwischen Build und Compile und dem Build Lifecycle https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

3.2 der Unterschied zwischen diesen 3 Dingen: Kompilieren vs Build vs Laufzeit

https://www.quora.com/Was-ist-das-differenz- zwischen- build-run-and- compile Fernando Padoan, ein Entwickler, der nur ein bisschen neugierig auf Sprachdesign ist Beantwortet 23. Februar Ich gehe in Bezug zurück zu anderen Antworten:

Beim Ausführen wird eine ausführbare Binärdatei (oder ein Skript für interpretierte Sprachen) als neuer Prozess auf dem Computer ausgeführt. Beim Kompilieren wird ein Programm analysiert, das in einer höheren Sprache geschrieben ist (im Vergleich zum Maschinencode höher), die Syntax und Semantik überprüft, Bibliotheken verknüpft, möglicherweise optimiert und anschließend ein ausführbares Binärprogramm als Ausgabe erstellt. Diese ausführbare Datei kann in Form von Maschinencode oder einer Art Bytecode vorliegen, dh Anweisungen, die auf eine Art virtuelle Maschine abzielen. Das Erstellen umfasst normalerweise das Überprüfen und Bereitstellen von Abhängigkeiten, das Überprüfen von Code, das Kompilieren des Codes in Binärdateien, das Ausführen automatisierter Tests und das Packen der resultierenden Binärdateien und anderer Elemente (Bilder, Konfigurationsdateien, Bibliotheken usw.) in ein bestimmtes Format einer bereitstellbaren Datei. Beachten Sie, dass die meisten Prozesse optional sind und einige von der Zielplattform abhängen, für die Sie erstellen. Wenn Sie beispielsweise eine Java-Anwendung für Tomcat packen, wird eine .war-Datei ausgegeben. Das Erstellen einer ausführbaren Win32-Datei aus C ++ - Code kann nur das EXE-Programm ausgeben oder es auch in einem MSI-Installationsprogramm verpacken.


0

Schauen Sie sich dieses Beispiel an:

public class Test {

    public static void main(String[] args) {
        int[] x=new int[-5];//compile time no error
        System.out.println(x.length);
    }}

Der obige Code wurde erfolgreich kompiliert, es gibt keinen Syntaxfehler, er ist vollkommen gültig. Zur Laufzeit wird jedoch der folgende Fehler ausgegeben.

Exception in thread "main" java.lang.NegativeArraySizeException
    at Test.main(Test.java:5)

Wie wenn in der Kompilierungszeit bestimmte Fälle überprüft wurden, wurden nach dieser Laufzeit bestimmte Fälle überprüft, sobald das Programm alle Bedingungen erfüllt, die Sie erhalten. Andernfalls erhalten Sie einen Kompilierungs- oder Laufzeitfehler.


0

öffentliche Klasse RuntimeVsCompileTime {

public static void main(String[] args) {

    //test(new D()); COMPILETIME ERROR
    /**
     * Compiler knows that B is not an instance of A
     */
    test(new B());
}

/**
 * compiler has no hint whether the actual type is A, B or C
 * C c = (C)a; will be checked during runtime
 * @param a
 */
public static void test(A a) {
    C c = (C)a;//RUNTIME ERROR
}

}}

class A{

}}

class B extends A{

}}

class C extends A{

}}

class D{

}}


0

Sie können die Code-Kompilierungsstruktur anhand des tatsächlichen Codes verstehen. Die Laufzeitstruktur ist nur klar, wenn Sie das verwendete Muster verstehen.


-1

Es ist keine gute Frage für SO (es ist keine spezifische Programmierfrage), aber es ist im Allgemeinen keine schlechte Frage.

Wenn Sie denken, dass es trivial ist: Was ist mit Lesezeit und Kompilierungszeit, und wann ist dies eine nützliche Unterscheidung? Was ist mit Sprachen, in denen der Compiler zur Laufzeit verfügbar ist? Guy Steele (kein Dummy, er) hat in CLTL2 7 Seiten über EVAL-WHEN geschrieben, mit denen CL-Programmierer dies steuern können. 2 Sätze reichen kaum für eine Definition , die selbst weit hinter einer Erklärung zurückbleibt .

Im Allgemeinen ist es ein schwieriges Problem, das Sprachdesigner zu vermeiden versucht haben. Sie sagen oft nur "hier ist ein Compiler, er macht Dinge zur Kompilierungszeit; alles danach ist Laufzeit, viel Spaß". C ist so konzipiert, dass es einfach zu implementieren ist und nicht die flexibelste Umgebung für die Berechnung. Wenn der Compiler zur Laufzeit nicht verfügbar ist oder Sie nicht einfach steuern können, wann ein Ausdruck ausgewertet wird, kommt es häufig zu Hacks in der Sprache, um häufige Verwendungen von Makros vorzutäuschen, oder Benutzer entwickeln Entwurfsmuster zur Simulation mächtigere Konstrukte haben. Eine einfach zu implementierende Sprache kann definitiv ein lohnendes Ziel sein, aber das bedeutet nicht, dass es das Ende aller Programmiersprachenentwürfe ist. (Ich benutze EVAL-WHEN nicht viel, aber ich kann mir ein Leben ohne EVAL nicht vorstellen.)

Und der Problembereich um Kompilierungs- und Laufzeit ist riesig und noch weitgehend unerforscht. Das heißt nicht, dass SO der richtige Ort ist, um die Diskussion zu führen, aber ich ermutige die Menschen, dieses Gebiet weiter zu erkunden, insbesondere diejenigen, die keine vorgefassten Vorstellungen davon haben, was es sein sollte. Die Frage ist weder einfach noch albern, und wir könnten zumindest den Inquisitor in die richtige Richtung weisen.

Leider kenne ich hierzu keine guten Referenzen. CLTL2 spricht ein wenig darüber, aber es ist nicht gut, um etwas darüber zu lernen.


4
Alter, was für dich keine gute Programmierfrage ist, ist alles relativ. Ich fand es eine ausgezeichnete Frage und etwas, über das ich mehr erfahren wollte. Ja, ich kenne das allgemeine "Konzept" und weiß, was Kompilierungszeit und Laufzeit sind, aber ich möchte die Feinheiten kennen, die wirklich zur Laufzeit im Vergleich zur Kompilierungszeit auftreten. Es sind diese Feinheiten, die wichtig sind, wenn Sie programmieren und sich dessen bewusst sein müssen. Es ist nicht sehr konkret, deshalb fragt er. Ich hasse es, wenn Leute hier sitzen und allgemeine Fragen wie diese sagen, ist wertlos, wenn sie einige der wichtigsten Fragen sind, die jeder Entwickler erfassen muss.
PositiveGuy

1
Wenn Sie in einer Frage keinen Wert sehen, ist dies Ihr Problem. Wenn es allgemein ist, gibt es einen Grund dafür. Nur weil Sie allgemeine Fragen nicht mögen, heißt das nicht, dass sich die Welt um das dreht, was Sie für nützlich halten. Er hat eine gewisse Absicht, dies zu fragen, und er möchte eine Reihe von Antworten, um beide besser zu verstehen und zu definieren. Kapiert?
PositiveGuy
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.