Kompilieren <-> Interpretieren



  • Hallo,

    hab in letzter Zeit relativ viel mit PERL gemacht.
    Was mir dabei besonders aufgefallen ist:

    Das Interpretieren von Perlcode geht deutlich schneller als das Kompilieren von C/C++ Code. Ich will mal behaupten, dass der Perlscript mindestens 10 mal so lang ist wie der das Programm (~ 10.000 <-> 1.000 Zeilen)

    Mich würds jetzt einfach interessieren, an was das liegt.
    Weil im Prinzip muss ja beides auf irgendeine Art und Weise in Maschinencode verwandelt werden.

    Sind da die C-Parser so ineffizient weils da wurscht is und das spätere Ergebnis wichtiger ist?

    mfg
    Martin



  • Das Ergibnis ist wichtiger ja.

    Perl hat ja z.B. auch keine vorherige Fehlerüberprüfung, oder?
    Bei C muss alles bis zum Ende stimmig sein.

    Und Optimiert werden muss ja auch noch.
    Und viele Abhängigkeiten aufgelöst werden, z.B. aus der Runtime.



  • Naja, interpetierter Code ist theoretisch um einiges langsamer als ein kompiliertes Programm... Besonders bei komplexeren Anwendungen. Beispielsweise könnte man das selbe Programm in Java und C schreiben, C wäre wohl deutlich schneller - obwohl Java eine Mischform darstellt, also kein gutes Beispiel 🙄

    Natürlich müssen beim kompilieren einige Standardroutinen reingepackt werden, was bei Scriptsprachen der Interpreter übernimmt, jedoch muss dieser die Befehle dann während der Laufzeit in äquivalenten Maschienencode umwandeln. Eine optimierte Binary sollte in der Regel schneller sein...



  • SeppSchrot schrieb:

    Perl hat ja z.B. auch keine vorherige Fehlerüberprüfung, oder?

    hm, stümmt, etz wo du's sagst...
    Perl meckert erst zur Laufzeit über Fehler, ausser es sind grobe Syntaxfehler, glaub ich...

    OK, dass C schneller ist als Perl ist schon klar, nur die Zeit zum Kompilieren hat mich halt doch a bissl verwundert, aber ok, ist ja ned so, dass ma ned leben könnte damit 🙂



  • was hast du denn da überhaupt gemacht?

    Der Perlcode sleep(10); dauert wesentlich länger zu "interpretieren" als der Kompiliervorgang eines int main() { sleep(10); } ...

    Das kann man doch gar nicht vergleichen 😕


Anmelden zum Antworten