Moin
Ja da war noch die Optimierung..., aber mir geht es erstmal ums Grundsätzliche. Aber Unix und Windows laufen doch z.B. auf denselben "maschinden", aber die verstehen doch nicht denselben Quellcode?! Das OS muß da doch auch irgendwas mit zu tun haben. Und bei dieser Zwischenstufe, die kann auf mehrern OS installiert werden, und wird jeweils unterschiedlich interpretiert, oder nur auf verschiedene Maschienen bezogen?
Jein. Die Maschinen sind die selben, und der Code der letztendlich auf der Maschine ausgeführt wird ist der selbe. Aber da gibt es noch kleine aber wichtige Unterschiede. Zunächst mal sind die Binärdateiformate nicht kompatibel. Das Betriebssystem kann ja, wenn du die Datei ausführst, sie nicht einfach aufmachen und alles was da kommt an den Prozessor schicken (naja, bei .com-Dateien unter DOS lief das glaub ich so ähnlich). Stattdessen enthält die Datei Zusatzinformationen: Was für Bibliotheken gebraucht werden, an welche Stellen im Speicher die einzelnen Bereiche der Datei geladen werden sollen, die Hauptfunktion an die das Betriebssytem einspringen soll um das Programm zu starten, etc. Da geht schonmal das reine rüberkopieren der Binary-Dateien nicht.
Beim Compilieren fallen aber als Zwischenschritt Objektdateien an, die später zusammengelinkt werden und erst dabei kommt die endgültige Binary raus. Die Objektdateien müssten also theoretisch von Betriebssystem zu Betriebssystem kompatibel sein. Pustekuchen! Da gibt es nämlich noch mehr Unterschiede, vor allem bei den verwendeten Bibliotheken und Systemaufrufen. Ein gängiges Programm kann ja nicht einfach so im luftleeren Raum agieren, sondern benutzt in der Regel Hilfsbibliotheken mit nützlichen Funktionen (zum Beispiel die C Standardbibliothek) und muss ab und zu auch mal das Betriebssystem direkt, mit sogenannten Betriebssystemaufrufen, ansprechen etwa um eine Datei zu öffnen, einen Prozess zu starten oder (bei Windows) ein Fenster zu malen, etc. Auch diese Ebene ist also nicht kompatibel.
Nur für mein Verständnis, es gibt ja von vielen Programmen(z.B. PHP) immer den Sourcecode, ist der für alle Maschinen und OS gleich? Also kann das wenn man will jeder durch seinen entsprechenden Compilier laufen lassen, und alle habe aus demselben Code eine andere maschinen/os-Spezifisches Programm? Die Binary-Distributions gibt es ja auch für alle OS einzelnd.
Bleibt der ursprüngliche Quellcode, zum Beispiel in C. Der ist 'weitgehend' kompatibel. Ein einfaches C-Programm müsste relativ problemlos unter den verschiedensten Betriebssystemen kompilierbar sein. Sobald es aber Betriebssystemspezifische Sachen benutzen möchte, wird es wieder komplizierter, und das nonplusultra sind dann die grafischen Benutzeroberflächen. Bei letzterem helfen einige Toolkits wenigstens weiter, wie etwa qt oder gtk.
Und noch eine Frage zum Schluß, Javascript und html - die werden vom Browser einfach nur interpretiert, d.h. an dieser Stelle in Bytecode übbersetzt, den die Maschine versteht?
HTML ist _keine_ Programmiersprache :), fällt also bei dieser Betrachtung weitestgehend raus. JavaScript wird dann wohl ähnlich wie etwa PHP interpretiert
--
Henryk Plötz
Grüße aus Berlin