C++ vs. Java [Update]



  • 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.

    [url=http://www.ph-ludwigsburg.de/mathematik/lehre/ws0203inf1/skript/021016/PrintSlides.htm]http://www.ph-ludwigsburg.de/mathematik/lehre/ws0203inf1/skript/021016/PrintSlides.htm[/ URL]

    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.



  • Original erstellt von Dimah:
    was macht Java den besser wartbar? vielleicht kann man da was für c++ abkucken

    Ich führe das einfach mal auf 2 Punkte zurück :

    1. C++ ist viel komplexer als Java. Natürlich spiegelt sich das auch in den Programmen wieder. Wenn man Probleme auf viele verschiedene Arten lösen kann, dann findet man auch viele verschiedene Lösungen in den Programmen. C++ ermöglicht dem Programmierer auch eine bessere Kontrolle über das, was eigentlich gemacht wird. Entsprechend hat der Programmierer aber auch mehr Verantwortung. Er muss sich z.B. darum kümmern, dass keine Speicherlecks entstehen. Bei Java muss man sich um solche Dinge nicht kümmern.

    2. Mir wird oft gesagt, dass hinter C++ in etwa folgende Philosophie steckt:

    Der Programmierer weiß, was er tut, außerdem soll C++ möglichst schnell sein. Da es Zeit kostet, auf Fehler zu prüfen, und der Programmierer eh weiß, was er tut, wird Code halt so geschrieben, dass er schnell ist und nicht Fehlertolerant.

    Es ist doch kein Wunder, dass durch soetwas unwartbarer Code entsteht. Wartung? Warum denn? Der Programmierer weiß auch schon am Anfang, was er tut! 😉



  • Hallo,
    also ich kann keine Aussage darüber treffen ob Java-Code oder C++ Code besser wartbar ist, ich weiß aber, dass eine Sprache allein nicht darüber entscheidet, ob etwas wartbar ist oder nicht macht.

    Wenn du den Faktor Mensch vergisst, rennst du am Ziel vorbei. Schlecht ausgebildete Programmieren können auch in LupenRein++(tm) miese Programme schreiben.

    Ich bin bisher immer davon ausgegangen, dass Java leichter zu erlenen ist als C++. Mittlerweile bin ich mir da aber nicht mehr so sicher. Es gibt kaum was schlimmeres als Java-Programme von Programmierern die das Prinzip der OOP nicht verstanden haben.

    Und das man in C++ sehr leicht grausame Programme schreiben kann, ist hier wohl auch jedem klar 🙂



  • Und das man in C++ sehr leicht grausame Programme schreiben kann, ist hier wohl auch jedem klar 🙂

    Sprichst du damit auf dich selber an? 🙂 🙂 🙂 🙂 🙂 🙂 🙂


Anmelden zum Antworten