Hallo Zusammen,
ich habe eine Frage zu Interpretersprachen, wie z.B. Basic, perl etca.
sind alle Interpretersprachen plattformunabhängig?
vielen Dank für eure Antworten
Mina
Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge
Hi!
Bein, können sie ja auch nicht, da ja bei einer echten Plattformunabhängigkeit der verwendete Interpreter für JEDE denkbare Plattform existieren müsste. (Der Interpreter ist ja auch nichts anderes als ein Programm, dass dann unter einem Betriebssystem auf der jeweiligen Hardware laufen muss.)
Bis dann
Andreas
Hallo Andreas,
danke für deine Antwort.
Aber ich verstehe da etwas immernoch nicht so genau:
bei Java ist es doch so das sie durch die virtuelle Maschine dem Java-Interpreter plattformunabhängig ist, wie das geht verstehe ich nicht, eben aus dem von dir benannten Grund, da der Interpreter ja auch unter einem Betriebssystem und einer Hardware laufen muss
Mein Problem ist es, dass ich den unterschied zwischen Interpreter und Compilersprachen darstellen soll und der JVM von Java.
Könnte man dann sagen dass die Interpretersprachen plattformunabhängiger sind als compilersprachen? und wenn ja warum?
lg
Mina
Der Unterschied zwischen Compiler- und Interpretersprachen? Ganz einfach:
Compilersprachen (C/C++ etc.) werden vor der Ausführung compiliert, also übersetzt. Der Compiler macht aus dem kompletten Quelltext vor der Ausführung ein ausführbares Programm (vereinfacht gesprochen). Das ist dann nur auf der Plattform lauffähig, für die es compiliert wurde.
Ein Interpreter hingegen führt ein Programm Zeile für Zeile aus (z.B. Basic, PHP).
Plattformunabhängig ist JAVA deshalb, weil es für (fast) jede Plattform eine Java Virtual Machine gibt. Diese führt dann den JAVA-Quelltext aus.
Grüße,
Alsion
Hallo Alison,
danke für deine Antwort.
Ich verstehe, aber leider noch nicht ganz.
Du schreibst es gibt für (fast) jede Plattform eine JVM.
Aber ist es nicht so, dass Java deshalb plattformunabhängig ist weil sie eben nicht für jede Plattform eine eigene JVM benötigt. Die JVM ist sozusagen ein Universalübersetzter?
Zum vergleich: Es gibt doch auch für jede Plattform einen eigenen C-Compiler (oder nicht?) und deshalb ist C doch plattformabhängig?
Wäre dir sehr dankbar, wenn du eventuelle Denkfehler meinerseits korrigieren könntest;-)
lg
Mina
Der Prozessor eines Computers kann nur Maschinenbefehle lesen (bestehend aus Binärcode 0/1). Programme, die nicht in Maschinensprache geschrieben sind, müssen erst in diese übersetzt werden.
Die Aufgabe des Übersetzens übernehmen eigens dafür entwickelte Programme, Interpreter oder Compiler genannt.
Interpreter
Interpreter übersetzen (interpretieren) die Programme zeilenweise. Das Programm kann deshalb zur Laufzeit geändert werden. Die Befehle werden Zeile für Zeile in Maschinensprache übersetzt und vom Prozessor ausgeführt. Bei jedem Neustart des Programms muss dieses auch wieder neu interpretiert werden. Aus diesem Grund können keine Optimierungen vorgenommen werden, und die Programme laufen langsamer ab.
Beispiele für Interpreter-Sprachen: Q-BASIC, JAVA, LOGO
Compiler
Ein Compiler übersetzt einen Programmtext vollständig in Maschinensprache und legt diesen in einer eigenständigen Programm-Datei ab. Während der Compilierung optimiert der Compiler die Programmgröße und -geschwindigkeit. Beim Neustart wird vom Prozessor direkt die Programmdatei abgearbeitet.
Dadurch laufen compilierte Programme 10 bis 20 mal schneller ab als zu interpretierende Programme.
Beispiele für Compiler-Sprachen: PASCAL, DELPHI, C++
Quelle: http://www.plauener.de/lessing/delphi/delphi01.htm
JVM
Ein ausführbares Programm läuft in dieser immer gleichen Umgebung, die durch entsprechende Software dargestellt wird; JVM-Implementationen sind z.B. in jedem vernünftigen Web-Browser enthalten und daher praktisch überall verfügbar.
Quelle: http://www.java.de/article/view/43/1/16
Zum vergleich: Es gibt doch auch für jede Plattform einen eigenen C-Compiler (oder nicht?) und deshalb ist C doch plattformabhängig?
Solange du nur die Standard C/C++ Libs oder die Boost Libs verwendest kann ein C/C++-Programm durchaus auch Plattformunabhängig sein.
Gruss, d-oli
... bei C/C++-Programmen muss der Source Code auf der Plattform, auf der das Programm ausgeführt werden soll, kompiliert und gelinkt werden.
danke d-oli für diese ausfürliche Erklärung.
Nun hätte ich noch eine Frage:
Ich muss auch die Vorteile/ Nachteile dieser beiden Übersätzungsvorgänge beschreiben.
Als Vorteil Compiler gegenüber Interpreter:
Compiler sind schneller.
Aber welchen Vorteil hat ein Interpreter:
da dachte ich eben, Interpreter wären plattformunabhängiger?
kennt jemand einen Vorteil den ich anbringen kann?
vielen lieben dank
lg
Mina
Ändern/Anpassen des Programmes zu Laufzeit möglich.
*Ich* finde bei Interpreterbasierten Sprachen (Perl, PHP etc.) lassen sich Fehler oft einfacher finden. Außerdem sind Interpretersprachen leichter zu lernen. Ist aber meine persönliche Meinung, andere sehen das vielleicht anders ;)
Grüße,
Alsion
Ich glaube hier muss noch zwischen Scriptsprachen (z.B. PHP, VBScript, JScript) und interpretierten höheren Programmiersprachen der 4. Generation (z.B. JAVA) unterschieden werden.
Bei PHP wird der Source durch den PHP-Interpreter in die entsprechende Maschinensprache ubersetzt (compilert/interpretiert).
Bei JAVA wird der Source in einen sogenannten Byte-Code übersetzt (compilert) und die VM widerum übesetzt (interpretiert) den Byte-Code in die entsprechende Maschinensprache.
Es ist richtig, das Scriptsprachen oft einfacher zu erlenen sind, doch sie haben auch begrenzte Einsatzmöglichkeiten.
Hallo alle,
ich danke euch allen für eure Anworten.
Schönen Tag noch.
lg
Mina