Reality hat gesagt.:
Ist es nicht ein großer Schwachsinn, wenn man ein C++-Programm programmiert und diesen dann mit Java anspricht? Da kann man grad alles in C++ machen! Wozu dann noch Java?
Übrigens kann man in C/C++ auch plattformunabhängig programmieren.
Man benutzt einfach Ansi C/C++ und beispielsweise GTK+ oder QT o.ä.
Einige Anmerkungen dazu:
Irgendwann und irgendwo gibt es Leute, die es der Java-Programmiergemeinde ermöglichen, auf allen möglichen und unmöglichen Systemen auf das jeweilige Dateisystem, auf die Soundkarte, auf den Drucker und was weiß ich noch alles zuzugreifen. D.h. es gibt Leute, die den "Unterbau" der Java-Portabilität erstellen und nach "oben", d.h. in die VM hinein, ein und dasselbe Interface allüberall anbieten. DIESE Menschen brauchen das Java Native Interface, um aus der VM-Welt mal eben "nach Hause" zu telefonieren. Es ist fast wie bei Neo in seiner MATRIX: Irgendwo ist die Hardware, auch wenn wir uns virtuell bewegen, letztendlich ist da irgendwo dasjenige System, die CPU, die auch Java benötigt, um zu laufen... "Ich brauche ein Telefon!"
Sicher kann ich auch portabel in C und C++ programmieren (aber Achtung: Es gibt hier schattige Bereiche, die sind alles andere als portabel), aber ein übersetztes C-Programm ist eben nicht "mobil", ist kein "mobile code", d.h. ich kann meine Java-Applikation in übersetzem Zustand auf einen Server packen und dann - wo immer ich bin, was immer ich auch für ein System unterm Bytecode-Interpreter habe - vor Ort ohne weiteres ausführen! Das geht so mit C und C++ nicht! Ich kann mein x86-Office, selbst wenn es mit Qt gebunden ist, nicht einfach auf einem PowerPC-basierten Mac schaufeln und dann damit arbeiten. (Dafür gibt es VMware, VirtualPC & Co.)
Es gibt zudem interessante Artikel, die belegen, daß man selbst als C++-Programmierer von Java profitiert, in dem man nämlich über Projekte wie den GNU Java-Native-Compiler (GCJ) Zugriff auf die GUI-Bibliotheken von Java bekommt und dies ausnutzt, um diesen systemabhängigen Teil von den auf Portabilität getrimmten Java-APIs erledigen läßt. Das heißt, hier haben wir den umgekehrten Weg, der ebenfalls (!) nichts mit Schwachsinn zu tun hat, es handelt sich in beiden Fällen um ganz normale, im Falle von JNI zeitweise sogar zwingend erforderliche Methoden, um Probleme zu lösen.
Fazit: Irgendwo ist der Preis und die Arbeit versteckt, die geleistet werden muß, damit der Java-Programmierer portabel coden kann. Es hängt von der Zielsetzung des jeweiligen Projekts ab, ob ich C++ und/oder Java in dem einen oder anderen Umfange zur Implementierung nutze.