wirklich ernst gemeinte frage



  • shisha schrieb:

    was kann c++ besser?
    was kann java besser?

    mehr möchte ich nicht.

    vorurteilsfrei und objektiv bitte

    Java ist besser.



  • DEvent schrieb:

    Java wurde mit dem Ziel entwickelt mit einer moeglichst einfachen Sprache schnell zum Ziel zu kommen. Java bietet als Sprache keinen Balast und eine moeglichts einfache Syntax. Ausserdem sind essentielle Dinge, wie Strings, arrays, GC, threads, reflection in die Sprache eingebaut.

    Strings sind genau so in die Sprache Java integriert, wie std::string in C++. Nämlich in der Standardbibliothek.

    Es gibt leider zahlreiche C++ Bibliotheken, die ihre eigenen String-Klassen mitbringen. Solche Bibliotheken kenne ich unter Java nicht. Das ist aber keine Eigenschaft der Sprache, sondern der Bibliotheken.

    Dass C++ statt Built-in Features lieber die Sprachfeatures implementiert, mit dem sich gute Containerklassen, wie beispielsweise std::vector, implementieren lassen, ist eine Designentscheidung. Der Vorteil ist, dass ich für Spezialfälle auch Spezialcontainer implementieren kann, die genauso einfach zu verwenden sind, wie beispielsweise std::vector. Einen Nachteil sehe ich hier nicht.

    Java ist hier einfacher. Dadurch ist es einfacher zu lernen. Natürlich ist eine Sprache mit weniger Möglichkeiten einfacher zu lernen. Das ist wie bei einem Auto. Wenn ich keine Autoradio habe, brauche ich auch nicht zu lernen, dieses zu bedienen. Ist das Auto dann besser? Einfacher zu bedienen ist es sicher. Ein Trabbi ist halt einfacher als eine Mercedes S-Klasse.

    Man muss halt überlegen, ob nicht die Features von Java ausreichen. Dann ist Java eine gute Wahl.

    Und noch was zu dem Codebeispiel mit dem fstream: Da hat man das schlechteste aus der Standardbibliothek herausgepickt um damit auf die Gesamtqualität der Sprache C++ zu schliessen. Fragwürdiger Ansatz. Es gibt auch unter Java immer Dinge, die nur umständlich zu lösen sind. So spontan fällt mir dieser Heckmeck mit BufferedReader und so etwas ein.



  • tntnet schrieb:

    Strings sind genau so in die Sprache Java integriert, wie std::string in C++. Nämlich in der Standardbibliothek.

    nö, die sind so'n zwitterding. über 'ne library wäre z.b. stringverkettung mit '+' schlecht möglich.

    tntnet schrieb:

    Das ist wie bei einem Auto. Wenn ich keine Autoradio habe, brauche ich auch nicht zu lernen, dieses zu bedienen. Ist das Auto dann besser? Einfacher zu bedienen ist es sicher. Ein Trabbi ist halt einfacher als eine Mercedes S-Klasse.

    diese autovergleiche sind doch immer völlig bescheuert. natürlich braucht man für'n trabbi mehr technisches verständnis und fahrerisches können als für 'ne high-tech schleuder à la mercedes, die voller hilfsmittel steckt, damit ja jeder opa damit umgehen kann. gibts zu, du wärst doch schon mit dem mixen des zweitakt-sprits überfordert, oder würdest 'nen trabbi zum nachstellen der ventile zur werkstatt bringen.

    tntnet schrieb:

    Es gibt auch unter Java immer Dinge, die nur umständlich zu lösen sind. So spontan fällt mir dieser Heckmeck mit BufferedReader und so etwas ein.

    zeig mal ein beispiel.
    🙂



  • tntnet schrieb:

    DEvent schrieb:

    Java wurde mit dem Ziel entwickelt mit einer moeglichst einfachen Sprache schnell zum Ziel zu kommen. Java bietet als Sprache keinen Balast und eine moeglichts einfache Syntax. Ausserdem sind essentielle Dinge, wie Strings, arrays, GC, threads, reflection in die Sprache eingebaut.

    Strings sind genau so in die Sprache Java integriert, wie std::string in C++. Nämlich in der Standardbibliothek.

    Ne, mach das mal in C++;

    System.out.println("abc".length());
    


  • +fricky schrieb:

    technische gründe waren's demnach nicht.
    🙂

    welche Gründe sind denn da genannt? Ich lese dort, was aus der Anlehnung an C++-ähnliche Syntax folgt (Vertrautheit, schneller produktiv), aber wo steht, was zur Entscheidung für diese Syntax geführt hat?



  • Es gibt auch unter Java immer Dinge, die nur umständlich zu lösen sind.

    +fricky schrieb:

    zeig mal ein beispiel.
    🙂

    die Syntax ist für meinen Geschmack umständlich. "public static void main(...)" ist umständlich - 4 keywords, um "hier geht's los" auszudrücken ... Daß primitive Datentypen keine Objekte sind, ist umständlich. Fehlende Operatorüberladung ist umständlich.

    Reicht das? Schau' dir Smalltalk an, wenn Du sehen willst, wie es anders geht.



  • u_ser-l schrieb:

    welche Gründe sind denn da genannt? Ich lese dort, was aus der Anlehnung an C++-ähnliche Syntax folgt (Vertrautheit, schneller produktiv), aber wo steht, was zur Entscheidung für diese Syntax geführt hat?

    goggle doch mal nach: 'java language design decisions', oder sowas. vielleicht findet sich was.
    🙂



  • u_ser-l schrieb:

    Es gibt auch unter Java immer Dinge, die nur umständlich zu lösen sind.

    +fricky schrieb:

    zeig mal ein beispiel.
    🙂

    die Syntax ist für meinen Geschmack umständlich. "public static void main(...)" ist umständlich - 4 keywords, um "hier geht's los" auszudrücken ... Daß primitive Datentypen keine Objekte sind, ist umständlich. Fehlende Operatorüberladung ist umständlich.

    Anzufügen wären die fehlenden Closures (für die anonyme Klassen mangels Scope-Capturing kein Ersatz sind), die Standardbibliothek, die von Checked Exceptions durchsetzt ist, der ständige Zwang, eine try/finally-Verschachtelung für einen .dispose()-Aufruf zu verwenden oder die infolge der Implementation über Type-Erasure nur überschaubar nützlichen Generics.



  • +fricky schrieb:

    goggle doch mal nach: 'java language design decisions', oder sowas. vielleicht findet sich was.
    🙂

    Aha: Simplicity & Familiarity & ... Nun gut ... 🙂



  • +fricky schrieb:

    zeig mal ein beispiel.
    🙂

    Nehmen wir doch mal das Beispiel von oben in Java:

    BufferedReader in = new BufferedReader(
      new InputStreamReader(
        new FileInputStream( dir + "/" + file ) ) );
    

    Zur Erinnerung in C++:

    std::ifstream in((std::string(dir) + "/" + file).c_str());
    

    Das war in Java doch viel Einfacher - oder? 😉

    Und noch was @+fricky: Bitte nicht gleich so angreifend. Ob ich mit einem Trabbi umgehen kann oder nicht entzieht sich völlig Deiner Kenntnis. Ich bleibe auch bei meiner Meinung, dass da wo nichts ist, auch nichts bedient werden kann. Ersetze Trabbi mit Opel Corsa oder so. Der ist wirklich für jeden leichter zu bedienen, als eine Mercedes S-Klasse. Da brauche ich die Bedienungs des Navis nicht zu lernen, da es nicht vorhanden ist.



  • Der Grund, das jede C++ Library eigene Strings mitbringt, kann auch daran liegen, dass bei der Entstehung der Bibliothek schlicht und einfach std::string noch nicht verfuegbar/bekannt war.



  • tntnet schrieb:

    +fricky schrieb:

    zeig mal ein beispiel.
    🙂

    Nehmen wir doch mal das Beispiel von oben in Java:

    BufferedReader in = new BufferedReader(
      new InputStreamReader(
        new FileInputStream( dir + "/" + file ) ) );
    

    Zur Erinnerung in C++:

    std::ifstream in((std::string(dir) + "/" + file).c_str());
    

    Das war in Java doch viel Einfacher - oder? 😉

    Nicht so viel Unterschied. In Java hast du ein bisschen mehr bei den Streams zu tun, in C++ hast du dafür mehr bei den std::string und wieder zurück zu c_str zu tun. Außerdem nimmt man in Java File.separator und nicht hardcodete Separatoren



  • tntnet schrieb:

    +fricky schrieb:

    zeig mal ein beispiel.
    🙂

    Nehmen wir doch mal das Beispiel von oben in Java:

    BufferedReader in = new BufferedReader(
      new InputStreamReader(
        new FileInputStream( dir + "/" + file ) ) );
    

    Zur Erinnerung in C++:

    std::ifstream in((std::string(dir) + "/" + file).c_str());
    

    Das war in Java doch viel Einfacher - oder?

    dass Java-programmierer einen höheren tastaturverschleiss haben, will ich nicht infrage stellen. aber zum java-code: FileInputstream liest rohdaten, InputStreamReader verwandelt den inhalt (asci, utf-8, utf-16, etc.) in den Java 'char' datentyp und 'BufferedReader' schaltet eine pufferung dazu. ingesamt eine recht einleuchtende angelegenheit, wie ich finde. ich weiss nicht, ob dein 'std::ifstream' das alles in einem rutsch macht, aber spätestens wenn die datei utf-8 kodiert ist, dürfte dein C++ code kläglich versagen.

    tntnet schrieb:

    Und noch was @+fricky: Bitte nicht gleich so angreifend. Ob ich mit einem Trabbi umgehen kann oder nicht entzieht sich völlig Deiner Kenntnis. Ich bleibe auch bei meiner Meinung, dass da wo nichts ist, auch nichts bedient werden kann. Ersetze Trabbi mit Opel Corsa oder so. Der ist wirklich für jeden leichter zu bedienen, als eine Mercedes S-Klasse. Da brauche ich die Bedienungs des Navis nicht zu lernen, da es nicht vorhanden ist.

    ok, sorry, war nicht so böse gemeint, wie's sich liest. aber diese vergleiche von wegen billigkarre vs. nobelkarosse kommen immer dann, wenn einer überhaupt keine argumente hat. hier auch schon wieder. navi und high-end autoradio sind nebensächlichkeiten. beides kannste in einem schrottwagen, wie auch in 'nem maybach oder rolls-royce betreiben, ja es ist noch nicht mal ein auto nötig, damit das zeug funktioniert. also: was wolltest du damit eigentlich sagen?
    🙂



  • Ein Trabbifahrer kann jedes Auto fahren, ein Audifahrer kann aber keinen Trabbi fahren.



  • knivil schrieb:

    Ein Trabbifahrer kann jedes Auto fahren, ein Audifahrer kann aber keinen Trabbi fahren.

    nicht nur das. hat sein auto 'nen kolbenklemmer, nimmt der trabbifahrer hammer, feile und macht die kiste wieder flott. so`n audifahrer verzweifelt doch schon, wenn er ein glühlämpchen wechseln muss.
    🙂



  • +fricky schrieb:

    knivil schrieb:

    Ein Trabbifahrer kann jedes Auto fahren, ein Audifahrer kann aber keinen Trabbi fahren.

    nicht nur das. hat sein auto 'nen kolbenklemmer, nimmt der trabbifahrer hammer, feile und macht die kiste wieder flott. so`n audifahrer verzweifelt doch schon, wenn er ein glühlämpchen wechseln muss.
    🙂

    Und was, wenn der Trabbifahrer ne Frau ist und der Audifahrer ein Automechaniker.



  • klischeebediener schrieb:

    Und was, wenn der Trabbifahrer ne Frau ist und der Audifahrer ein Automechaniker.

    naja, das würde vielleicht so ablaufen: die frau sagt: 'schatzi, ich glaub mit unserem auto stimmt was nicht'. der audibesitzer und automechaniker schliesst ein diagnosegerät an, studiert einen haufen diagramme, findet keinen fehler, aber lässt seinen azubi 'nen ölwechsel machen.
    🙂



  • +fricky schrieb:

    ich weiss nicht, ob dein 'std::ifstream' das alles in einem rutsch macht, aber spätestens wenn die datei utf-8 kodiert ist, dürfte dein C++ code kläglich versagen.

    nein.
    du kannst sogar UGUBUGU-72 kodierte daten auslesen



  • Shade Of Mine schrieb:

    nein.
    du kannst sogar UGUBUGU-72 kodierte daten auslesen

    was den codeschnipsel von tftnet ein klein wenig länger machen würde, nicht wahr? aber sag an, wie geht das?
    🙂



  • smokeonthewater schrieb:

    Nicht so viel Unterschied. In Java hast du ein bisschen mehr bei den Streams zu tun, in C++ hast du dafür mehr bei den std::string und wieder zurück zu c_str zu tun. Außerdem nimmt man in Java File.separator und nicht hardcodete Separatoren

    Genau darauf wollte ich hinaus. Das ifstream-Beispiel wurde genannt um zu zeigen, wie umständlich C++ und wie einfach Java ist. Ich wollte mit meinem Beitrag ausdrücken (das "in Java viel Einfacher" war ironisch gemeint), dass es in beiden (allen) Sprachen Dinge gibt, die umständlich sind. Ich kann nicht einfach ein Beispiel nennen und damit beweisen, dass C++ viel schlechter ist als Java.

    Ich persönlich finde das übliche Problem, einfach mal schnell eine Datei lesen in C++ einfacher zu lösen, als in Java. Das mag auch daran liegen, dass ich wesentlich mehr C++ als Java programmiert habe.


Anmelden zum Antworten