Welche Programmiersprache für das internet



  • @Gregor
    entweder hast du den Kern meiner Aussage nicht verstanden oder du versuchst dich einfach nur dumm rumzuschiffen.

    Java ist Plattform abhängig und zwar von der JVM. Fertig aus, mehr will ich nicht sagen. Entweder du verstehst es nun, siehst es ein oder lebst weiter mit deiner Phantasie.



  • OK! Das kann man natürlich so sagen. ...trotzdem würde ich die JVM nur als "virtuelle" Plattform bezeichnen. Der Unterschied zu einer "echten" Plattform ist folgender :

    Die JVM kannst du in küzester Zeit auf den unterschiedlichsten Plattformen installieren. Man kann die darunterliegenden Plattformen aber nicht mal eben so auswechseln, nach dem Motto : Ich habe ein Windows-Programm geschrieben, habe hier aber leider nen Mac zur Verfügung, aber das macht ja nichts, da ich mir jetzt einfach mal nen neuen Windows-Rechner kaufe und den Mac wegschmeiße.

    Hmmm... vielleicht kann man sagen : Java-Programme laufen auf einer größtenteils plattformunabhängigen (Zwischen-)Plattform, da es die JVM für die verschiedensten Plattformen gibt.

    ...und bitte erzähl mir nichts von irgendwelchen Phantasien : Ich erzähl dir auch nicht, wie lächerlich die Portabilität von C++-Programmen ist, was man ja an dem einen Programm aus dem anderen Thread gesehen hat : Man nimmt nen anderen Compiler und schon geht garnichts mehr. Da müssen sogar Funktionen umbenannt werden, weil irgendein Compiler wohl mal wieder nicht standardkonform genug war. Ich stelle ja noch nichtmal die Geschwindigkeit von C++-Programmen in Frage, obwohl das C++-Vergleichsprogramm in dem anderen Thread mehr als die 5-fache Laufzeit des Java-Programms hatte. Ich stelle auch nicht die Fehleranfälligkeit von C++-Programmen in Frage, obwohl selbst bei diesem 50-Zeilen Programm diverse male ein Programm mit falschem Output kam. :p SCNR 🙂



  • Original erstellt von Gregor:
    Hmmm... vielleicht kann man sagen : Java-Programme laufen auf einer (Zwischen-)Plattform

    So kann ich es akzeptieren und bin gluecklich 🙂

    wie lächerlich die Portabilität von C++-Programmen ist

    Unterschied zu Java:
    In C++ muss man selber denken. ka welchen Thread du meinst, aber kingruedis ESELC haben king und ich gestern auf windows portiert und mussten nur 1 Fehler beheben (welcher vom Standard her auch als Fehler angesehen wird) und ein kleiner Bug in VC++ musste umgegangen werden.

    Es lohnt sich einfach den Standard konsequent zu verwenden, wenn ein Programmierer das nicht kann, dann soll er halt nochmal den Stroustrup lesen.

    Ich stelle ja noch nichtmal die Geschwindigkeit von C++-Programmen in Frage

    Angebot: Du schreibst mir ein Java Programm und ich die das passende C++ Programm -> ich bin schneller, wetten?

    Ich stelle auch nicht die Fehleranfälligkeit von C++-Programmen in Frage

    Tja, Java wurde nunmal fuer Anfaenger entworfen - sollte ja urspruenglich auf Toastern und so laufen. Da ists ja klar dass man da volle Deppen hinsetzt - somit wurde Java einfach 'Anfaeger sicher' gemacht.

    Die Nachteile von Java kann dir volkard sicher gerne alle aufzaehlen, ich kenne mich dazu nicht gut genug mit Java aus.



  • Es ist dieser Thread gemeint. ...wo du auch gleich das Java-Programm hast, was du in C++ schneller schreiben sollst. Düfte eigentlich nicht so schwer sein. Wie gesagt : Ich zweifel die Geschwindigkeit nicht an, ich finde es nur komisch, dass die Leute, die da C++-Programme geschrieben haben weder mit dem C#-Programm, noch mit dem Java-Programm mithalten.



  • Tja, Java wurde nunmal fuer Anfaenger entworfen - sollte ja urspruenglich auf Toastern und so laufen. Da ists ja klar dass man da volle Deppen hinsetzt - somit wurde Java einfach 'Anfaeger sicher' gemacht.

    Dir ist klar, dass du hier die Kompetenz von einigen Leuten anzweifelst, die das C++-Programm geschrieben haben, oder? Kingruedi ist z.B. dabei.



  • Tja, Java wurde nunmal fuer Anfaenger entworfen - sollte ja urspruenglich auf Toastern und so laufen. Da ists ja klar dass man da volle Deppen hinsetzt - somit wurde Java einfach 'Anfaeger sicher' gemacht.

    Die Nachteile von Java kann dir volkard sicher gerne alle aufzaehlen, ich kenne mich dazu nicht gut genug mit Java aus.

    Du kennst dich nicht gut genug mit Java aus?
    Dann bist du wohl ein Anfänger oder du hast noch nie einen Toaster bedient!

    Schon mal ein MFC-Programm auf Linux portiert?

    [ Dieser Beitrag wurde am 24.10.2002 um 16:14 Uhr von ms editiert. ]



  • Die Nachteile von Java kann dir volkard sicher gerne alle aufzaehlen, ich kenne mich dazu nicht gut genug mit Java aus.

    Dafür brauchst du nicht Volkard. Die Kritikpunkte sind ja immer die gleichen :

    • "C++ ist aber viel schneller!"
    • "Damit kann man kein Betriebssystem und auch keine Treiber für ne Grafikkarte programmieren!"
    • "Da gibt es ja garkeine exe-Dateien und die JVM ist doch scheiße!"
    • "Das ist nur was für Anfänger, ich bin aber schon Profi!"
    • "Da gibt es keine Operator-Overloading, keine Mehrfachvererbung und keine Templates!"
    • "Ich finde, die Java-GUI sieht scheiße aus!"
    • "Das ist ja nur für OOP gedacht, ich will aber lieber c-Style-Code schreiben! OOP ist doch was für Idioten!"
    • "Das ist ja nichtmal standardisiert!"
    • "Wo sind denn Programme, die in Java geschrieben wurden. Ich kenne keine und wenn es da nur so wenige gibt, dann muss das ja nen Grund haben, also ist Java wohl Mist!"
      ...

    [ Dieser Beitrag wurde am 24.10.2002 um 16:21 Uhr von Gregor editiert. ]

    [ Dieser Beitrag wurde am 24.10.2002 um 16:25 Uhr von Gregor editiert. ]



  • Original erstellt von Shade Of Mine:
    [quote]Original erstellt von Gregor:
    Hmmm... vielleicht kann man sagen : Java-Programme laufen auf einer (Zwischen-)Plattform

    **
    So kann ich es akzeptieren und bin gluecklich 🙂
    **[/QUOTE]
    Bitte zitiere nicht falsch. Wenn du meinen Namen dadrüber stehen läßt, dann lass den Text auch unverändert.



  • Original erstellt von Gregor:
    Bitte zitiere nicht falsch. Wenn du meinen Namen dadrüber stehen läßt, dann lass den Text auch unverändert.

    Sorry, den Namen habe ich vergessen. Wollt ihn eh wegmachen (hab aber vergessen) Tut leid.

    Was die Kritikpunkte angeht: sind wir im Kindergarten? Ich glaube doch wohl eher nicht. Wir koennen ordentlich diskutieren, oder willst du nicht?



  • Original erstellt von ms:
    Du kennst dich nicht gut genug mit Java aus?

    Ne, wozu sollte ich mich mit Java beschaeftigen? Volkard hats mir ausgeredet...

    Dann bist du wohl ein Anfänger oder du hast noch nie einen Toaster bedient!

    Verstehe den Zusammenhang nicht...
    Toaster kann ich bedienen, aber Java nicht programmieren - wo ist der Zusammenhang?

    Schon mal ein MFC-Programm auf Linux portiert?

    Nein.
    Hast du schon mal ne Java VM geschrieben?



  • Original erstellt von Shade Of Mine:
    **
    Was die Kritikpunkte angeht: sind wir im Kindergarten? Ich glaube doch wohl eher nicht. Wir koennen ordentlich diskutieren, oder willst du nicht?**

    Öhmmm... Diese Kritikpunkte wurden so oder so ähnlich alle schonmal in diesem Forum genannt. Andere sind mir nicht eingefallen. Sorry! ...ich habe die nur reproduziert. Die sind nicht von mir. Wenn sie dir zu wenig begründet erscheinen, dann kann ich da nichts für. Die meiste Kritik, die gegen Java kommt ist nunmal unbegründet.

    Abgesehen davon ist der Thread sowieso ziemlich OT inzwischen. Ursprünglich ging es nicht um Java vs. C++, oder? Ich schlage vor, damit aufzuhören. ...an dem neuen C++-Programm habe ich aber trotzdem noch Interesse. Du kannst das Programm ja in dem anderen Thread posten, wenn du es fertig hast.



  • @ Shade : Öhmmm... Wo ist denn jetzt das Programm? Dürfte doch nicht so schwer sein, soetwas zu schreiben. Das ist doch ganz kurz.

    EDIT : BTW : Ich habe gerade einen neuen Kritikpunkt von Volkard gehört :

    • Das Fehlen des Operatorüberladens führt zu unlesbarem Code!
      🙂

    [ Dieser Beitrag wurde am 25.10.2002 um 20:36 Uhr von Gregor editiert. ]



  • Original erstellt von Gregor:
    @ Shade : Öhmmm... Wo ist denn jetzt das Programm? Dürfte doch nicht so schwer sein, soetwas zu schreiben. Das ist doch ganz kurz.

    ich schau mal, was sich machen laesst, ok? 😉

    [ Dieser Beitrag wurde am 25.10.2002 um 20:38 Uhr von Shade Of Mine editiert. ]



  • Ich kopiere das Programm einfach mal hier herein. Ich habe noch eine schnellere Version, bei der ich etwas mit Hand optimiert habe. Die C++-Programme, die zu dem Java-Programm bisher geschrieben wurden, waren beim String-aneinanderhängen bzw. erzeugen lahm. Beim Rest waren sie größtenteils schneller, aber die String-Sache hat im Prinzip alles versaut. Die bessere der beiden Java-Versionen hat den riesigen String bei mir in 2 Sekunden erzeugt. Die beste C++-Version hat über 70 Sekunden gebraucht,

    Programm :
    [java]
    import java.util.;
    import java.io.
    ;

    public class Benchmark
    {
    public Benchmark ()
    {
    }

    public static void main (String[] args)
    {
    long [] times = new long [7];
    int i;
    int arrayLength = 5000000;
    times [0] = System.currentTimeMillis ();
    // Array erzeugen
    int [] array = new int [arrayLength];
    double [] doubleArray = new double [arrayLength];
    times [1] = System.currentTimeMillis ();
    // Zufallszahlen erzeugen
    Random rand = new Random();
    for (i = 0 ; i < arrayLength ; ++i)
    {
    array[i] = rand.nextInt ();
    doubleArray[i] = Math.abs(rand.nextDouble ());
    }
    times [2] = System.currentTimeMillis ();
    // Array sortieren
    Arrays.sort(array);
    times [3] = System.currentTimeMillis ();
    // Zahlen des Arrays in einen großen String verwandeln (jede Zeile eine Zahl)
    StringBuffer stringBuffer = new StringBuffer (arrayLength * 12);
    for (i = 0 ; i < array.length ; ++i)
    {
    stringBuffer.append(array[i]);
    stringBuffer.append('\n');
    }
    String string = stringBuffer.toString ();
    times [4] = System.currentTimeMillis ();
    // String in eine Datei abspeichern
    BufferedWriter writer;
    try
    {
    writer = new BufferedWriter (new FileWriter ("test.txt"));
    writer.write (string);
    writer.close ();
    }
    catch (IOException e)
    {
    System.out.println ("FEHLER FEHLER FEHLER FEHLER FEHLER");
    }
    times [5] = System.currentTimeMillis ();
    // Wurzeln berechnen
    for (i = 0 ; i < doubleArray.length ; ++i)
    {
    doubleArray[i] = Math.sqrt(doubleArray[i]);
    }
    times [6] = System.currentTimeMillis ();
    // Ausgabe der Zeiten
    System.out.println ("Array erzeugen : " + String.valueOf (times[1]-times[0]) + "ms");
    System.out.println ("Zufallszahlen erzeugen : " + String.valueOf (times[2]-times[1]) + "ms");
    System.out.println ("Sortieren : " + String.valueOf (times[3]-times[2]) + "ms");
    System.out.println ("String (anhängen) : " + String.valueOf (times[4]-times[3]) + "ms");
    System.out.println ("Speichern : " + String.valueOf (times[5]-times[4]) + "ms");
    System.out.println ("Wurzeln berechnen : " + String.valueOf (times[6]-times[5]) + "ms");
    }
    }[/code]
    bitte Sourcecode, der mit MinGW (also letztendlich g++) kompiliert. (für Windows)



  • Original erstellt von Gregor:
    Ich habe noch eine schnellere Version, bei der ich etwas mit Hand optimiert habe.

    Und? Warum ist das net drin? Wolltes'te der erst ein Patent darauf anmelden, oder wie? 🙂

    O'Dog



  • Original erstellt von O'Dog:
    **Und? Warum ist das net drin? Wolltes'te der erst ein Patent darauf anmelden, oder wie? 🙂
    **

    Nein! An der anderen Version kann man nicht so gut sehen, was eigentlich gemacht wird. ...in dem anderen Thread ist der Source davon zu sehen.

    EDIT : Du kannst ja auch noch etwas dran rumoptimieren. ...beim Zufallszahlengenerator bin ich z.B. überfordert, ich denke aber, dass man den noch ganz gut beschleunigen kann. ...bzw. dass ein handgeschriebener, der das Gleiche macht, schneller ist.

    [ Dieser Beitrag wurde am 25.10.2002 um 22:03 Uhr von Gregor editiert. ]



  • Original erstellt von Gregor:
    Die C++-Programme, die zu dem Java-Programm bisher geschrieben wurden, waren beim String-aneinanderhängen bzw. erzeugen lahm.

    Jo, ist mir auch aufgefallen... Hab gerade mal meine eigene string klasse statt std::string verwendet, und siehe da, es geht statt in 20 sekunden in 0,6 sekunden geschafft...
    IMHO liegt es an dem miesen int2string konvertierer von strstring bzw. stringstream.

    Ich habe mit std::string aber einer eigenen int2string Funktion 1,3 sekunden geschafft...

    Ich habe ebenfalls einen 1,2GHzer - deswegen vergleiche ich die zeiten jetzt mal brutal mit deinen...



  • achja, source:

    #include <cstdlib>
    #include <ctime>
    #include <iostream>
    #include <fstream>
    #include <algorithm>
    #include "apistr.h"
    #include <string>
    #include <cmath>
    #include <strstream>
    
    using namespace std;
    const int arrayLength=5000000;
    
    void i2s(int num, char*& result) //converts num to char* and append it to result
    {
        if(num) i2s(num/10, result),*result++=num%10+'0';
    }
    
    void int2str(int num, char* buffer)
    {
        char* t=buffer;
        i2s(num,t);
        *t=0;
    }
    
    int main()
    {
        srand((unsigned)time(NULL));
    
        clock_t times[7];
    
        int i;
    
        times[0]=clock();
        cout<<"0"<<endl;
        //Array erzeugen
        int* array = new int[arrayLength];
        double* doubleArray = new double[arrayLength];
        times[1]=clock();
        cout<<"1"<<endl;
        //Zufallszahlen erzeugen
        for(i=0;i<arrayLength; ++i)
        {
            array[i]=rand();
            doubleArray[i]=rand();
        }
        times[2]=clock();
        cout<<"2"<<endl;
        //Array sortieren
        sort(array,array+arrayLength);
    
        times[3]=clock();
        cout<<"3"<<endl;
    
        //ts::apistring stringBuffer(arrayLength*12);
        //char* buffer=stringBuffer.AsBuffer(arrayLength*12);
        string stringBuffer;
        stringBuffer.reserve(arrayLength*12);
    
        char buffer[15];
        for(i=0;i<arrayLength;++i)
        {
            int2str(array[i],buffer);
            stringBuffer.append(buffer);
            stringBuffer.append("\n");
        }
        //*buffer=0;
    
        times[4]=clock();
        cout<<"4"<<endl;
        ofstream writer("test.txt");
    
        if(writer.is_open())
        {
            writer<<stringBuffer;
        }
        else
            cout<<"FEHLER FEHLER FEHLER\n";
    
        times[5]=clock();
        cout<<"5"<<endl;
    
        // Wurzeln berechnen
        for (i = 0 ; i < arrayLength ; ++i)
        {
            doubleArray[i] = sqrt(doubleArray[i]);
        }
    
        times[6]=clock();
        cout<<"6"<<endl;
    
        cout<<"Array erzeugen : " << times[1]-times[0] << "ms"<<endl;
        cout<<"Zufallszahlen erzeugen : " << times[2]-times[1] << "ms" << endl;
        cout<<"Sortieren : " << times[3]-times[2] << "ms" << endl;
        cout<<"String (anhängen) : " << times[4]-times[3] << "ms" << endl;
        cout<<"Speichern : " << times[5]-times[4] << "ms" << endl;
        cout<<"Wurzeln berechnen : " << times[6]-times[5] << "ms" << endl;
    
    }
    


  • Zeig am Besten mal den Code! ...kannst ja deine String-Klasse gleich mitzeigen!

    EDIT : ...warst wohl schneller! 🙂

    [ Dieser Beitrag wurde am 25.10.2002 um 22:05 Uhr von Gregor editiert. ]



  • int * array = new int[arrayLength];
    double * doubleArray = new double[arrayLength];
    

    muss das sein?

    es macht das gleiche nur schneller

    int array[arrayLength];
    double doubleArray[arrayLength];
    

Anmelden zum Antworten