Die Programmiersprache - eine erste Annäherung

Wir haben uns bisher ausführlich das Java-Umfeld angesehen. Die Sprache an sich blieb indes "Just Another Vague Acronym", wie die c't - Magazin für Computertechnik - einst (6/1997) scherzhaft titelte. Das herausragendste Merkmal ist die zunächst irritierende Kombination
zweier sich scheinbar ausschließender Techniken - entweder wird eine Sprache interpretiert, oder ein Quelltext wird compiliert, womit man instinktiv Maschinencode für einen real existierenden, im wahrsten Sinne des Wortes greifbaren Prozessor, assoziiert. In Java wird ein Quelltext zunächst compiliert (in Sun's JDK - Java Development Kit - ist javac dafür zuständig). Die so erzeugten Dateien enthalten sogenannten Bytecode. Man kann sich Bytecode als Assembleranweisungen
für einen virtuellen Mikroprozessor vorstellen. In der Java Terminologie nennt man ihn JVM, Java virtual machine. Diese virtuelle Java-Maschine enthält wie ein richtiger Chip aus Silizium einen definierten Befehlssatz, einen Stack-Pointer und Register. Sun's JDK enthält eine Referenzimplementierung der JVM, java genannt, der man die durch javac erzeugten Dateien als Parameter übergibt. Plattformunabhängigkeit, die sich Java auf seine Fahnen geschrieben hat, heißt also, die JVM für ein bestehendes System zu portieren. Genauso denkbar ist es - und bei Sun gibt es in der Tat entsprechende Entwicklungen - die VM in Silizium zu gießen.

Diese Java-Chips könnten dann die Basis für die von mir bereits erwähnten Netzwerk-Computer bilden, die allerdings ein (wenn auch rudimentäres) Betriebssystem benötigen. Sun selbst hat mit der JavaStation bereits ein mögliches Gerät (inklusive JavaOS) vorgestellt. Der größte Vorteil des Konzepts der virtual machine ist die prinzipielle Unabhängigkeit von real existierenden Prozessoren bzw. Hardware-Eigenschaften. Diese Unabhängigkeit findet ihre unmittelbare Fortsetzung in der Sprache selbst. So müssen sich C-Programmierer beispielsweise mit 2-, 4- oder gar 8-Byte großen Integer-Variablen herumschlagen, ein großer Stolperstein, wenn ein Projekt portiert werden soll, der sich nur mühsam mit Hilfe des Präprozessors und zahlreichen #define und #ifdef Anweisungen in den Griff bekommen läßt - wenn überhaupt. Java braucht - und kennt - keinen Präprozessor, Plattformunabhängigkeit gefährdende zusammengesetzte Datentypen (struct/union) oder (manch gestandenem C-Programmierer mag es wie eine Katastrophe vorkommen): Pointer.

JAVA - 4 / 9

107