C++ vs. Java [Update]



  • Mir kam es eigentlich mehr auf diesen anderen Fehler an, nicht das mit der Zeit:

    Benchmark.cpp:38: use of 'less' is ambiguous;
    Benchmark.cpp:12: first declared as 'int less(const void*, const void*)' here c:/c++/mingw/ include/c++/3.2/bits/stl_function.h:195: also declared as 'template<class _Tp> struct std::less' here

    [ Dieser Beitrag wurde am 01.12.2002 um 17:32 Uhr von Gregor editiert. ]



  • Original erstellt von Shade Of Mine:
    **
    Der code von kingruedi ist ein POSIX kompatibler code -> das haette er natuerlich besser machen koennen um windows auch mit einzubeziehen.
    **

    Ehrlich gesagt interessiert es mich garnicht, zu was der Code alles kompatibel ist. Das, worauf es mir ankam ist, dass erst das 4. Programm mit g++ kompilierbar war. Ganz schön schwach, wenn C++-Programme doch auf allen möglichen Compilern kompiliert werden sollen, um Plattformunabhängigkeit zu erreichen.



  • Ach? <ironie>Wie misst den so ein Java-System die Zeit ohne Uhr? Ich vergas: In Java haben wir ja per Definition eine Internetverbindung mit der wir, in Echtzeit, von der Sun-Seite die vergangene Zeit, in Planck-Zeit, seit der Erfindung Javas laden können. Oder hatten wir immer eine Uhr?</ironie>

    Nein! Das wird wohl mit nem Wrapper gelöst. Sowas, wie

    long getMicroSeconds()
    {
    #ifdef __WIN32__ || WIN32
    
        return GetTickCount();
    
    #else
       
        timeval tv;
        timezone tz;
        gettimeofday(&tv,&tz);
        return tv.tv_usec;
    
    #endif
    }
    

    wohl. Allerdings vom Compiler bzw. von der JVM aus.

    Jedes Programm hängt von einer Plattform ab. Siehe oben.

    Nein. Das tut es nicht. Es kommt drauf an, wie abstrakt die Programmiersprache gehalten ist. Also wie stark diese von einer gegebenen Platform abstrahiert.

    [ Dieser Beitrag wurde am 01.12.2002 um 19:00 Uhr von Gregor editiert. ]



  • Original erstellt von Gregor:
    [quote]Original erstellt von Shade Of Mine:
    Ehrlich gesagt interessiert es mich garnicht, zu was der Code alles kompatibel ist. Das, worauf es mir ankam ist, dass erst das 4. Programm mit g++ kompilierbar war. Ganz schön schwach, wenn C++-Programme doch auf allen möglichen Compilern kompiliert werden sollen, um Plattformunabhängigkeit zu erreichen.

    du musst mal von diesem Java ist das einzig wahre Trip runter kommen.
    POSIX ist eine Standard. Wer sich nach diesem Standard richtet, kann seine Programme auf allen POSIX kompatiblen Systemen laufen lassen!

    kingruedi hat mit less einen Fehler gemacht - das ist der Grund warum man using namespace std; nicht verwenden sollte! (less ist nähmlich im Standard schon definiert)

    Wenn du keine solchen #ifdef konstrukte in C++ haben willst, nimmst du einfach eine Plattformunabhängige Library! (die versteckt das ganze vor dir, genau so wie deine VM)

    was stoert dich an dem C++ konzept der PLattformunabhänigkeit? Es hat bis jetzt bestens funktioniert - und wird auch noch weiterhin funktionieren. Egal ob du es magst oder nicht, aber es ist und bleibt ein Ansatz der Plattformunabhänigkeit, genauso wie der Java Ansatz: Java als eine Plattform zu nehmen.



  • Original erstellt von Shade Of Mine:
    **du musst mal von diesem Java ist das einzig wahre Trip runter kommen.

    ...

    was stoert dich an dem C++ konzept der PLattformunabhänigkeit? Es hat bis jetzt bestens funktioniert - und wird auch noch weiterhin funktionieren. Egal ob du es magst oder nicht, aber es ist und bleibt ein Ansatz der Plattformunabhänigkeit, genauso wie der Java Ansatz: Java als eine Plattform zu nehmen.**

    Ich glaube, du machst es dir zu einfach! Ich bin nicht auf nem Java-Trip! :p Momentan bin ich dabei, ganz massiv C++ zu lernen. ...und zwar aus guten Gründen. C++ hat ne Menge Stärken. Zum Beispiel die Geschwindigkeit oder die Möglichkeit, systemnah programmieren zu können. IMHO ist Platformunabhängigkeit aber keine Stärke von C++. Da kommt es mir so vor, als ob hier einige andere ziemlich stark auf nem C++-Trip sind und sich die Sprache schöner reden als sie ist.



  • Original erstellt von Gregor:
    Da kommt es mir so vor, als ob hier einige andere ziemlich stark auf nem C++-Trip sind und sich die Sprache schöner reden als sie ist.

    zum teil ja, aber du musst bedenken das Shade Of Mine kein durchschnitts Programmierer ist,



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


Anmelden zum Antworten