Welche Programmiersprache für das internet



  • Ich denke eh, dass wir noch 3 Dinge in den Test mit einbeziehen sollten, wo ich mir aber eh sicher bin, dass C# und Java verlieren

    1. Gesamt Dauer des Programmes (C# und Java haben den Nachteil, dass das Jitten noch dazu kommt)
    2. Speicher Bedarf der Binarys (bei C# und Java kommt noch die VM+Jitter hinzu, also wird das deutlich größer)
    3. Arbeitsspeicher Bedarf (ich denke C# und Java haben da schlechte Karten, wegen der VM, die ja noch geladen werden muss)



  • Bei den Binaries würde ich die JVM bzw. das Framework nicht mitzählen. Die sind ja generell da und haben erstmal nichts mit dem eigentlichen Programm zu tun. ...da kann man ja gleich das ganze Betriebssystem mitzählen. ...oder man baut sich ne GUI und rechnet bei C++ irgendeine Grafikbibliothek dazu. sollte nicht kleiner als bei Java sein. Wenn man nur die kompilierten Programme betrachtet, dann ist C++ für Java, was die Größe betrifft kein Gegner. Bei C# weiß ich das nicht. Aber beim benötigten Arbeitsspeicher hat C++ einen deutlichen Vorteil. Bei der Gesamtlaufzeit kannst du beim Java-Programm noch maximal eine Sekunde draufrechnen. Länger dauert das nicht.

    ...ich bin ja froh, dass ihr nicht nen fiesen Test vorgeschlagen habt, wie :
    "Wir schreiben 25.000.000 ints in eine Hashtabelle!" ...da hätte Java bei weitem keine Chance! ...würde wahrscheinlich sogar nen Faktor 100 oder so ausmachen, weil ich für das Java-Programm nicht genug Arbeitsspeicher gehabt hätte.



  • Und was sagt einem das Ergebnis? Das so ein Test nichtmal annähernd auf Real-World Situationen übertragbar ist war ja schließlich hoffentlich vorher allen beteiligten klar.

    [Edit: der Fhelerteufel hat ein Wort geklaut]
    [PS: Nebenbei gesagt ist das ein ziemlich armer Test. Wer Programmiersprachen mittels Fortran-Programmen vergleicht muß sich nicht wundern, wenn Sprachen, die sich am Geist von Fortran orientieren, am besten abschneiden]

    [ Dieser Beitrag wurde am 25.10.2002 um 23:35 Uhr von Bashar editiert. ]



  • Original erstellt von <->:
    dimah: schonmal was davon gehört das der stack nicht unendlich groß ist? 😃

    hab zwar nich den ganzen thread glesen, aber: static ?



  • Original erstellt von Bashar:
    Und was sagt einem das Ergebnis? Das so ein Test nichtmal annähernd auf Real-World Situationen übertragbar ist war ja schließlich hoffentlich vorher beteiligten klar.

    Logo.

    Aber wenn jemand behauptet Java ist schneller als C++, dann setz ich mich hin und schreib ein C++ programm das schneller ist - egal unter welchen bedingungen 🙂



  • Original erstellt von Shade Of Mine:
    [quote]Original erstellt von Bashar:
    [qb]
    Aber wenn jemand behauptet Java ist schneller als C++, dann setz ich mich hin und schreib ein C++ programm das schneller ist - egal unter welchen bedingungen 🙂

    Dann bist du ja noch nicht fertig! :p 🙂 ...du vergißt die Speicherperformance, und die richtige Dateigröße. 🙂

    Die String-Geschichte hat sicherlich nichts mit der realen Welt zu tun, aber 5000000 Wurzeln hintereinander berechnen kann durchaus vorkommen.

    EDIT : Ich habe aber nicht behauptet, dass Java schneller als C++ ist. Zumindest wollte ich das nicht, falls es so rübergekommen ist. Aber Java ist nicht sooo viel langsamer.

    [ Dieser Beitrag wurde am 25.10.2002 um 23:35 Uhr von Gregor editiert. ]



  • wie wärs mit einem programm das ein mandelbrot approximiert und in ne .bmp datei schreibt dann gibt es auch mit der grösse kaum ein problem...



  • Original erstellt von japro:
    wie wärs mit einem programm das ein mandelbrot approximiert und in ne .bmp datei schreibt dann gibt es auch mit der grösse kaum ein problem...

    Bitmap finde ich doof! ...aber gegen eine PNG Datei hätte ich nichts einzuwenden. Ich würde das Java-Programm aber nichtmehr heute schreiben.



  • Original erstellt von Bashar:
    **
    PS: Nebenbei gesagt ist das ein ziemlich armer Test.
    **

    Jo! Stimmt! Ich habe mich, als ich das Programm geschrieben habe, mal ne Viertelstunde hingesetzt und halt irgendeinen Unsinn programmiert. Ich habe mir dabei nichts gedacht! Trotzdem finde ich das Ergebnis bisher schon recht interessant.



  • Ich habe jetzt übrigens mal etwas anderes bei den Zufallszahlen gemacht. Bei mir steht da jetzt :

    array[i]=(rand() << 16)+rand();

    Das Ergebnis ist eine Datei, die etwa 3,5 MB zu groß ist, ich weiß aber nicht, warum.

    Die Ergebnisse sehen etwa wie folgt aus :

    1,2 GHz
    Sortieren : 1,5s
    String : 4s
    Speichern : 12s
    Wurzel : 0,2s

    1,6 GHz
    Sortieren : 1,1s
    String : 3s
    Speichern : 8s
    Wurzel : 0,15s



  • also was braucht man für ein C++ Programm welches Java weit hinter sich läst,

    • Variablen auf den Stack
    • wenig Hot Spots (also bitte nicht 10000000 mal das gleiche hinter einander)
    • ein paar Klassen im Container (Java muss da immer dynamisch casten so weit ich weiß)
    • ein test der die komplette Zeit berücksichtigt (obwohl mir das egal ist wenn ein Java Programm 3 mal so lange brauchen würde um zu Starten)
    • eine gute STL Implementierung

    bitte ergänzt weiter



  • @Gregor kein wunder das da unterschiedliche Größen rauskommen, rand in Java gibt andern zahlen aus (mehr Ziffern wie es scheint)



    • Ein Programm, bei dem man primitive Datentypen in Containern speichern muss. Java ist da normalerweise auf die Wrapperklassen angewiesen, da muss also gecastet werden, dazu kommt ein deutlich erhöhter Speicherplatzbedarf,...

    BTW : Ich glaube, das mit den Hotspots bringt nicht so viel.



  • Original erstellt von Dimah:
    **also was braucht man für ein C++ Programm welches Java weit hinter sich läst,
    **

    BTW : Bei der Fragestellung sage ich dir jetzt schon einen nicht objektiven Test voraus, falls du anhand der Antworten einen machen willst! 🙂 😃



  • Original erstellt von Gregor:
    BTW : Ich glaube, das mit den Hotspots bringt nicht so viel.

    ist Problematisch, wie kann ich die Hot Spots rausmachen und dann noch im Ms messen :(,
    Kanns du vielleicht Hot Spot aus machen und dan noch mal testen bitte 🙂

    Original erstellt von Gregor:
    BTW : Bei der Fragestellung sage ich dir jetzt schon einen nicht objektiven Test voraus, falls du anhand der Antworten einen machen willst! 🙂 😃

    😃

    [ Dieser Beitrag wurde am 26.10.2002 um 01:22 Uhr von Dimah editiert. ]



  • Ich wüßte nicht, wie das geht, aber ich habe mal folgendes gemacht :

    java -Xprof -Xmx192m Benchmark2 > Ergebnis.txt

    (Das ist die handgeschriebene Version)

    Ergebnis (bei 1,2 GHz):

    Array erzeugen : 200ms
    Zufallszahlen erzeugen : 4657ms
    Sortieren : 2664ms
    String (anhängen) : 2814ms
    Speichern : 4466ms
    Wurzeln berechnen : 170ms
    
    Flat profile of 15.25 secs (1518 total ticks): main
    
      Interpreted + native   Method                        
     28.9%     0  +   439    java.io.FileOutputStream.writeBytes
      1.3%     1  +    18    Benchmark2.main
      0.5%     0  +     8    java.io.FileInputStream.open
      0.5%     0  +     7    java.io.FileOutputStream.open
      0.3%     0  +     5    java.util.zip.ZipFile.open
      0.2%     0  +     3    java.io.WinNTFileSystem.getBooleanAttributes
      0.1%     0  +     1    java.lang.String.indexOf
      0.1%     0  +     1    Benchmark2.addIntegerToString
      0.1%     0  +     1    java.io.WinNTFileSystem.canonicalize
      0.1%     0  +     1    java.util.zip.ZipFile.getEntry
      0.1%     0  +     1    Benchmark2.quickSort
      0.1%     0  +     1    sun.nio.cs.StreamEncoder$CharsetSE.writeBytes
     32.1%     1  +   486    Total interpreted
    
         Compiled + native   Method                        
     26.2%   397  +     0    java.util.Random.next
     16.2%   246  +     0    Benchmark2.addIntegerToString
     15.1%   229  +     0    Benchmark2.quickSort
      6.8%    84  +    19    Benchmark2.main
      2.4%    36  +     0    Benchmark2.insertionSort
     66.6%   992  +    19    Total compiled
    
      Runtime stub + native  Method                        
      0.1%     2  +     0    interpreter_entries Runtime1 stub
      0.1%     2  +     0    Total runtime stubs
    
      Thread-local ticks:
      0.4%     6             Class loader
      0.6%     9             Interpreter
      0.2%     3             Compilation
    
    Flat profile of 0.00 secs (1 total ticks): DestroyJavaVM
    
      Thread-local ticks:
    100.0%     1             Blocked (of total)
    
    Global summary of 15.28 seconds:
    100.0%  1527             Received ticks
      0.3%     5             Received GC ticks
      0.9%    13             Compilation
      0.4%     6             Class loader
      0.6%     9             Interpreter
    


  • Original erstellt von Bashar:
    **Und was sagt einem das Ergebnis? Das so ein Test nichtmal annähernd auf Real-World Situationen übertragbar ist war ja schließlich hoffentlich vorher allen beteiligten klar.

    [Edit: der Fhelerteufel hat ein Wort geklaut]
    [PS: Nebenbei gesagt ist das ein ziemlich armer Test. Wer Programmiersprachen mittels Fortran-Programmen vergleicht muß sich nicht wundern, wenn Sprachen, die sich am Geist von Fortran orientieren, am besten abschneiden]
    **

    Ich halte es eh nicht für Sinnvoll, die Sprachen so zu vergleichen. Mir fallen aber keine vernünftigen Tests ein, die die beiden Sprachen in wirklichen Situationen vergleichen könnten. Mir ging es eigentlich um ein C# vs. Java Test (im ursprünglichen Thread) und das C++ Programm als Referenz.

    Vielleicht sollten wir eine Server Applikation schreiben und damit Testen, so wie das in Programmieren von UNIX Netzwerken gemacht wird. Aber da hat man bei C++ das Problem, dass man eher die OS API testet, als C++ an und für sich 🙂



  • @ King : Stimmt! Wir sind da vom ursprünglichen Thema abgekommen. Wir hätten die C++-Referenz vielleicht weglassen sollen. Für den C# vs. Java Vergleich hat das C++-Programm nicht so viel gebracht. Ich hatte eigentlich gehofft, dass man anhand dieses Programms sehen kann, um welchen Faktor in etwa C# und Java programme generell langsamer sind als C++-Programme. Aber es sind wohl immernoch nicht alle Möglichleiten ausgereizt worden.

    BTW : Hat denn jemand Linux mit Mono und einer JVM 1.4 bei sich installiert?



  • @Gregor
    wir sollten ein Rechner aussuchen, auf dem Windows und Linux (am besten frisch) installiert sind und dann folgendes testen

    Windows:
    -dotNET:
    MS dotNET Implementation
    Mono

    -Java:
    JVM 1.4.1 (1.4.1 ist doch das neueste oder irre ich da?)
    (MS hat doch auch ne eigene Java VM Implementierung (oder?), die sollten wir nach Möglichkeit auch testen)

    Linux:
    -dotNET:
    dotGNU
    Mono
    Rotor Portierung

    -Java
    JVM 1.4.1 (1.4.1 ist doch das neueste oder irre ich da?)
    Kaffee

    (vielleicht sollten wir für den Java Test nebenbei auch mal den GNU Java Compiler testen, natürlich nicht als Konkurenz zu C#)



  • Vielleicht sollte man das Refernz-Programm erst in C+++ verfassen und dann in den restlichen Sprache. Ich verspreche euch, da werdet ihr es viel leichter haben!


Anmelden zum Antworten