mrjerk: Gedanken eines Laien...

Beitrag lesen

Hallo,

Warum also überhaupt Dateien in unterschiedlichen Formaten abspeichern, die danach erst mühsam auseinandergenommen und wieder zusammengesetzt werden müssen? Wäre es nicht sehr viel effizienter, wenn man den Übersetzungsprozess nur beim Schreiben oder Lesen des Codes durch Menschen bräuchte, und ansonsten alles direkt in einer einzigen Sprache verfasst wäre?

Nun, im Prinzip waren es vermutlich genau diese Überlegung, die zur Entwicklung von Compilern geführt haben:
In der Anfangszeit der Computerrei wurde ein Computerprogramm dediziert für einen einzigen Computer geschrieben. Das lief dann auch nur da. Das war in Zeiten, in denen es weltweit auch nur eine Handvoll Rechner gab, kein Problem, denn die paar wenigen Firmen, die einen besassen, brauchten ohnehin Spezialsoftware speziell für ihr Unternehmen, die sie selber entwickeln (lassen) mussten.

Es wurde dann schwierig, als es mehr und mehr (zum Teil sehr verschiedene) Rechner gab, und man gerne auch das eine Programm für Rechner A auf einem anderen Rechner B laufen lassen wollte, ohne es komplett neu schreiben zu müssen.

Der Schritt zu Compiler-Sprachen (C, C++, ...) sollte genau dieses Problem lösen:  Man schreibt das Programm EINMAL in einer Sprache, die weitgehend von der darunter liegenden Maschine abstrahiert, der Compiler übersetzt es dann automatisch in den Maschinencode für die Hardware, auf der das ganze laufen soll.

Weil das aber bisweilen auch noch relativ viel Wissen über die Hardware darunter erfordert (wenn Du z.b. mal versucht hast, einen Treiber in C, der für i386-Prozessoren, also "klassiche PCs", geschrieben wurde, auf einem ARM-Prozessor zum Laufen zu bringen, wirst Du schnell merken, dass es leider mit "einfach neu-compilieren" oft nicht getan ist), kann man auch noch einen Schritt weiter gehen:

Man "erfindet" sich einfach eine virtuelle Maschine, auf der das ganze läuft und compiliert dann sein Zeug für diese Maschine. Die tatsächliche Ziel-Hardware muss dann nur irgendwie diese virtuelle Maschine bereit stellen, aber der Programmierer muss die tatsächliche Hardware nicht mehr kennen sondern nur noch die virtuelle Maschine (die überall gleich ist).
Java macht das z.b. so, Python meines Wissens auch (und sicher noch einige andere).

Hat es mal einen Versuch gegeben, eine so angedachte universelle Programmiersprache zu entwickeln?

Ich glaube, den Versuch gibt es immer wieder mal, und es wird auch alle Jahre wieder eine neue Programmiersprachen-Sau durchs Dorf getrieben werden, die genau das verspricht.
Ich glaube die Schwierigkeit ist die, dass je universeller eine Programmiersprache ist, desto unhandlicher wird sie für den konkreten Anwendungsfall.
Nimm  Java: Mit Java kannst Du fast alles programmieren. Warum wird aber für das Web z.b. oft was anderes genommen (PHP, Perl, Python, you name it)? Weil Java auf Grund seiner Universalität einfach extrem komplex ist, und man (gerade kleinere Web-Anwendungen) einfach schneller in einer anderen Sprache runter getippt hat - dafür kann man dann damit aber nicht so viel anderes machen.

Viele Grüße,
Jörg