wirklich ernst gemeinte frage



  • man kann sich aber schon berechtigt fragen, aus welchen technischen Gründen man bei java zu einem großen Teil auf die C-Syntax zurückgegriffen hat, die ja in den 1960er Jahren wurzelt und auch zur Zeit, als java entwickelt wurde, nicht mehr ganz unumstritten war. Daß dies der Popularität von java behilflich war und ist, ist klar.



  • Kissenschlachter schrieb:

    Vergleich mal Java, C++ und ABAP, dann wirst du bei letzterem viel größere unterschiede finden, als zwischen den ersten beiden.

    kann schon sein, dass du recht hast. aber bei wikipedia steht z.b. auch sowas:

    Die Vielzahl der möglichen ABAP-Anweisungen und ihrer Varianten führt allgemein zu einem schwerer verständlichen Quellcode als in anderen gängigen Programmiersprachen.

    das hat ABAP z.b. mit C++ gemein, nicht aber mit Java.
    🙂



  • shisha schrieb:

    Ich weiß dass beide Sprachen ihre Vorteile haben, aber in Java macht Programmieren einfach Spass.

    Das wird der Hauptunterschied sein. In Java zu programmieren macht Spass und in C++ nicht 😃 . Das ist bestimmt auch der Grund, warum in vielen Businessapplikationen Java eingesetzt wird.



  • u_ser-l schrieb:

    man kann sich aber schon berechtigt fragen, aus welchen technischen Gründen man bei java zu einem großen Teil auf die C-Syntax zurückgegriffen hat, die ja in den 1960er Jahren wurzelt und auch zur Zeit, als java entwickelt wurde, nicht mehr ganz unumstritten war. Daß dies der Popularität von java behilflich war und ist, ist klar.

    hier stehts (1.2.1): http://java.sun.com/docs/white/langenv/Intro.doc2.html#349
    technische gründe waren's demnach nicht.
    🙂



  • shisha schrieb:

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

    mehr möchte ich nicht.

    vorurteilsfrei und objektiv bitte

    Waerend andere Sprachen dir ein Feature bieten um ein Problem moeglichs schnell und effizient zu loesen, gibt dir C++ eine Handvoll von Meta-Features. Anstelle von eingebauten Strings und Container gibt es dir Templates, anstelle von GC gibt es dir smart pointers. Das erlaubt dir eine perfekte Loesung zu programmieren, das Problem ist nur dass es mit allem anderen inkompatibel wird. Jede noch so kleine Bibliothek bringt seine eigene Strings und Container-Klassen mit. Z.B. Qt4 hat QtString, WxWidgets hat wxString, die STL hat std::string, usw.

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

    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.



  • DEvent schrieb:

    Waerend andere Sprachen dir ein Feature bieten um ein Problem moeglichs schnell und effizient zu loesen, gibt dir C++ eine Handvoll von Meta-Features. Anstelle von eingebauten Strings und Container gibt es dir Templates, anstelle von GC gibt es dir smart pointers. Das erlaubt dir eine perfekte Loesung zu programmieren, das Problem ist nur dass es mit allem anderen inkompatibel wird. Jede noch so kleine Bibliothek bringt seine eigene Strings und Container-Klassen mit.

    http://yosefk.com/c++fqa/picture.html#fqa-6.2 schrieb:

    Where other languages give you a feature, C++ gives you meta-features. Instead of built-in strings and vectors, it gives you templates. Instead of garbage collection, it gives you smart pointers. This way, you can (theoretically) implement your own "perfect" (most efficient and generic) strings. In practice, this turns into a nightmare since many different kinds of strings, smart pointers, etc., each perfect in its own way, will not work with each other.

    wer hat wohl von wem abgeschrieben?
    🙂



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


Anmelden zum Antworten