C++ vs. Java [Update]
-
Original erstellt von Gregor:
[QBIMHO ist Platformunabhängigkeit aber keine Stärke von C++[/QB]Eine stärke wahrscheinlich nicht, da man schon ordentlich programmieren muss um Plattformunabhänig zu bleiben. Allerdings ist das möglich.
Der Ansatz ist nicht so komfortabel wie bei Java (es sei denn man macht es wie Java -> zB cygwin.dll ist eine POSIX Umgebung unter Windows, das ist wie die VM, die ist ja eine Java umgebung).
aber C++ ist dennoch Plattformunabhänig, sonst gäbe es ja wohl keine Crossplattformprogramme ala Mozilla, OpenOffice,...
-
Es ist möglich. Das stelle ich garnicht in Frage. Die Frage ist aber doch, wieviel Aufwand dahinter steckt. Es ist eben nicht so, dass man sich ein Programm schreibt, was dann auf allen möglichen Platformen läuft, weil man ja überall Compiler hat. Man muss schon auf ne Menge Dinge achten und muss ne Menge Verrenkungen machen, damit das Programm auch auf vielen anderen Compilern kompilierbar ist.
So, wie viele hier die "Platformunabhängigkeit" von C++ darstellen, kriegt man den Eindruck, dass das ganz einfach wäre: Man schreibt sich einfach ein Programm und weil es ja überall Compiler gibt, ist das Programm platformunabhängig. Das ist so wohl meistens nicht der Fall.
...und das ist eigentlich auch der Unterschied zwischen Java und C++, auf den es mir hier ankommt. Bei Javaprogrammen muss man nunmal auf sehr wenige Dinge achten, damit das Programm platformunabhängig bleibt, bzw. damit der Ansatz der Platformunabhängigkeit, den man hier hat, funktioniert.
...und was den "Fehler" von Kingruedi betrifft:
Das ist IMHO kein Fehler von ihm. Auf seinem Compiler ist es wohl zugelassen und somit auch erlaubt. Es ist ein Fehler des Compilers, dass er das zuläßt.
-
Original erstellt von Gregor:
Das ist IMHO kein Fehler von ihm. Auf seinem Compiler ist es wohl zugelassen und somit auch erlaubt. Es ist ein Fehler des Compilers, dass er das zuläßt.Ich habe den standard gerade nicht bei der hand, aber IMHO IST es laut standard nicht erlaubt - weil es eben zu namenskonflikten kommt!
in java kannst du ja auch nicht einfach einer funktion den namen einer funktion aus der standard library geben, oder?
-
Original erstellt von Shade Of Mine:
**
in java kannst du ja auch nicht einfach einer funktion den namen einer funktion aus der standard library geben, oder?**Wenn es in Java zu Namenskonfikten kommt, dann meckert der Compiler. Ansonsten ist das in Java ja auch etwas ander gelöst. Es gibt ja keine Namespaces, sondern nur Packages, in denen Klassen stehen. Dadurch kommt es wohl insgesamt zu weniger Konflikten. Ich hatte zumindest erst an einer Stelle damit Probleme, als ich zwei Packages eingebunden habe, die beide eine Klasse mit gleichem Namen enthielten. Dann muss man halt genauer sagen, was man aus welchem Package haben will. Wenn man beide Klassen haben möchte, dann gibt man jeweils noch explizit den Packagenamen an.
...aber anscheinend weiß Kingruedis Compiler ja, was er machen soll, wenn er auf sowas stößt. Er erlaubt halt etwas mehr, als der Standard. ...und solche Dinge passieren doch auch, wenn man alles Standardkonform macht. Gibt es da z.B. nicht so eine Geschichte mit Templates, die laut Standard erlaubt ist, die viele Compiler aber nicht unterstützen?
-
Original erstellt von Gregor:
Das wird wohl mit nem Wrapper gelöst.Wie 'wrappt' man etwas das nicht existiert? Mit Java!
Die meisten Systeme geben dann irgendwas wie 'No clock found. Exiting.' von sich.
-
Original erstellt von Daniel E.:
Wie 'wrappt' man etwas das nicht existiert? Mit Java!
Die meisten Systeme geben dann irgendwas wie 'No clock found. Exiting.' von sich.Ich verstehe nicht, worauf du hinaus willst!
-
Dass wrappen nichts hilft, wenn z.B. die Hardware nicht mitspielt (weil nicht vorhanden. Also hängt eben doch _jedes_ Programm von der Plattform (Hard- und Software) ab.
-
@Gregor: Stell dir einen ... eine Fernbedienung vor. Braucht die eine ms-genaue Uhr? Nö.
-
naja, aber ne sekundengenaue braucht sie auch nicht. Und eine solche muss es nach ISO-C++ schon geben.
Ich bin schon der Meinung, dass es auch c++ nicht einfach der kleinste gemeinsame Nenner aller Systeme sein sollte, sondern auch z.B. fürs Netzwerkprogrammieren im Standard enthalten sein sollte. Wenns sowas im System nicht gibt, kann diese eine Komponente weggelassen werden. Schließlich hat auch nicht jedes System nen Heap. Hab da auch ein bisschen was drüber gelesen, dass es in c++0x in die Richtung gehen soll. Hier hat Java nämlich schon ein paar Vorteile und das dürfte auch einer der Gründe sein, warum Java C++ beginnt den Rang abzulaufen.
-
Original erstellt von Daniel E.:
Dass wrappen nichts hilft, wenn z.B. die Hardware nicht mitspielt (weil nicht vorhanden. Also hängt eben doch _jedes_ Programm von der Plattform (Hard- und Software) ab.Du kannst mal davon ausgehen, dass jede Platform, für die es eine JVM gibt, eine Uhr hat. Die Platformen, auf die du hier anspielen möchtest, sind doch garnicht Zielplatformen für Java. Java ist auch keine Programmiersprache, mit der man systemnahe Programmierung machen kann.
Die JVM ist im Prinzip ein großer Wrapper, der die ganze darunter liegende Platform wrappt. Deshalb können Java-Programme auf allen Platformen ausgeführt werden, für die es ne JVM gibt. Das sind genug.
...und wo eben das "Fernbedienung-Beipiel" kam: Da es ja für alles C++-Compiler geben soll, zeig mir doch mal bitte nen Link zu nem Compiler für ne Fernbedienung.
-
lol
Dat kommt auf den Chip druf und wird mit Assembler gemacht.
-
Original erstellt von Shade Of Mine:
in java kannst du ja auch nicht einfach einer funktion den namen einer funktion aus der standard library geben, oder?Dazu das Stichwort: Reflection
-
Original erstellt von Gregor:
**
Wenn es in Java zu Namenskonfikten kommt, dann meckert der Compiler. Ansonsten ist das in Java ja auch etwas ander gelöst. Es gibt ja keine Namespaces, sondern nur Packages, in denen Klassen stehen. Dadurch kommt es wohl insgesamt zu weniger Konflikten. Ich hatte zumindest erst an einer Stelle damit Probleme, als ich zwei Packages eingebunden habe, die beide eine Klasse mit gleichem Namen enthielten. Dann muss man halt genauer sagen, was man aus welchem Package haben will. Wenn man beide Klassen haben möchte, dann gibt man jeweils noch explizit den Packagenamen an....aber anscheinend weiß Kingruedis Compiler ja, was er machen soll, wenn er auf sowas stößt. Er erlaubt halt etwas mehr, als der Standard. ...und solche Dinge passieren doch auch, wenn man alles Standardkonform macht. Gibt es da z.B. nicht so eine Geschichte mit Templates, die laut Standard erlaubt ist, die viele Compiler aber nicht unterstützen?**
kingruedis Compiler hatte das Problem mit den doppelten Namen nicht. Da jede Standard-Header-Datei jede andere einbinden DARF, kann es sein, dass dein Compiler die Header mit less eingebunden hat, seine nicht.
Haette er (wie du so schoen schreibst) nicht das ganze Package eingebunden (sprich den namespace std; nicht geoeffnet) haette es auch keine Probleme gegeben.
Jo, templates sind so eine Sache fuer sich... Die sind viel zu neu und unerforscht, als dass die Compilerhersteller viel Wert darauf gelegt haben. Allerdings aendert sich das momentan ziemlich drastisch...
und auf das 'export'-feature, welches du vermutlich meinst, kann man sowieso verzichten, da es bisher AFAIK nur ein Compiler kann.
-
Original erstellt von Gregor:
...und wo eben das "Fernbedienung-Beipiel" kam: Da es ja für alles C++-Compiler geben soll, zeig mir doch mal bitte nen Link zu nem Compiler für ne Fernbedienung.Sorry, da kenn ich mich nicht aus.
Aber mein Vater programmiert die Steuerung von Scheinwerfern. Also diese kleinen Motoren die Scheinwerfer in Theatern drehen und schwenken - dafuer verwendet er zwar C (weil er kein C++ kann) aber prinzipiell hat er auch einen C++ Compiler.ist zwar nicht das selbe wie eine Fernsteuerung, allerdings gibt es auch ein Schaltpult, welches die Scheinwerfer steuern kann - da ist die Steuerung ebenfalls in C geschrieben.
Ist zwar nicht das selbe wie eien Fernbedienung, aber ich denke doch in etwa aehnlich. (einen C++ Compiler fuer so ausgefallene Sachen findet man allerdings nicht leicht - ist ja auch logisch, da er keine breite Masse anspricht, aber wenn du auf diesem Gebiet arbeitest, dann weisst du auch woher du einen Compiler bekommst - zumindest hatte mein Vater noch nie Probleme damit)
-
Interessant! Hätte ich garnicht gedacht. Naja: Sowas ist zumindest nicht ein Anwendungsgebiet für Java. Entsprechend gibt es für soetwas natürlich auch keine JVM. ...und mit Sicherheit kannst du deinen Mozilla auch nicht für die Scheinwerfersteuerung kompilieren, oder?!
-
Tja was ist wohl besser? C++ oder Java?
Es kommt IMHO bei der Sprachenwahl immer darauf an, was man machen will. Will man z.B. ein Betriebssystem programmieren, so ist Java eher ungeeignet. Möchte man hingegen ein Programm für den Web-Browser (Applet) erstellen, so ist C++ leicht im Nachteil.
-
Vor kurzem hab ich ein Interview von einem Siemens-Menschen zu C++ und Java gehört. Er meinte, dass in seinem Bereich zeitkritische und hardwarenahe Programme in C++ geschrieben würden, da die Performance besser und Hardware-Zugriffe möglich seien. Für andere Anwendungen wird Java verwendet, wegen der besseren Wartbarkeit.
Wenn man unbedingt will, kann man natürlich auch da anderer Meinung sein.
-
Sowas ist zumindest nicht ein Anwendungsgebiet für Java.
Urprünglich wurde Java genau dafür entworfen: einfache hardware-nahe Programmierung von irgendwelche Geräten.
Hat sich dann aber in ne ziehmlich andere Richtung entwickelt.
[ Dieser Beitrag wurde am 04.12.2002 um 10:51 Uhr von kartoffelsack editiert. ]
-
Original erstellt von Kauz01:
**Vor kurzem hab ich ein Interview von einem Siemens-Menschen zu C++ und Java gehört. Er meinte, dass in seinem Bereich zeitkritische und hardwarenahe Programme in C++ geschrieben würden, da die Performance besser und Hardware-Zugriffe möglich seien. Für andere Anwendungen wird Java verwendet, wegen der besseren Wartbarkeit.Wenn man unbedingt will, kann man natürlich auch da anderer Meinung sein.**
was macht Java den besser wartbar? vielleicht kann man da was für c++ abkucken
-
@Dimah
Dachte ich's mir doch, dass jemanden motzt.