C++ und wikipedia



  • beitrag zum zweitenaml weg. kurzfassung:

    wikis sind falsch. beispiel http://de.wikipedia.org/wiki/Nimm-Spiel

    man kann schlicht über wissen per wiki abstimmen. natürlich kommt da nur schrott raus.

    So werden tiefe Klassenhierarchieen vermieden, und zu Gunsten der Effizienz und der Minimierung des Ressourcenverbrauchs verzichtet man in vielen Fällen auf Polymorphie, dem Kernmechanismus der objektorientierten Programmierung.

    was ein depp. polymorphie ist aber hallo! auf dem vormarsch. es ist nur so, daß man nicht mehr allein die laufzeitpolymorphie mit virtual (und scheiß-laufzeitfehlern!) benutzt, sondern noch mehr arten kennt.
    er meint, es gäme nur eine art der polymorphie und ist damit schwer auf dem holzweg.
    er meint, diese sei sogar kernmechanismus der oop und ist damit ebenso auf dem holzweg.
    er meint, man würde templates nur für die effizenz benutzen und hat nicht gerallt, daß sie fehlersicherheit bringen.



  • volkard schrieb:

    [quote="interpreter"](mal abgesehen davon, dass man in Java wirklich keinen Präprozessor braucht)[/quote]
    wie funtioniert assert() in jave? oder gibt es einen ersatz?
    [code]System.Tools.Debug.Assert.assert(i>=0 && i<max && i%2==0,"i>=0 && i<max && i%2==0","tst.java",341);
    

    oder ein anderer fall, wo man in c++ den präro benutzt:

    #define LOG(x) ofstream("log.txt",ios::app)<<__FUNCTION__<<' '<<#x<<": "<<x<<'\n';
    ...
    LOG(m_size);
    LOG(m_data);
    LOG(theOther.m_size);
    LOG(theOther.m_size);
    

    wie macht man das ohne präpro in java?[/code]

    assert ist in Java ein Keyword und damit direkt in die Sprache integriert und nicht wie bei meinem VC++ zunächst ein Makro auf _ASSERT() auf __ASSERTE() auf sonstirgendwas. 🙂

    assert keywordTest;
    

    Asserts lassen sich auch beliebig ein- und ausschalten. Ich kann beim Ausführen durch die VM angeben, für welche Klassen ich die asserts angeschaltet haben will. Der JIT-Compiler übersetzt das entsprechend, in den .class files stehen die assert-Aufrufe drin.

    Was macht __FUNCTION__ in deinem zweiten Code?



  • Warum geht ihr nicht hin und aendert den Text, indem ihr entsprechende Fehler
    korrigiert? Die Moeglichkeit ist gegeben.

    Was macht __FUNCTION__ in deinem zweiten Code?

    Das wird ersetzt mit dem Funktionsnamen, in welchem sich der Aufruf des Makros
    befindet.

    mfg
    v R



  • Gut, das braucht man in Java definitiv nicht. Da erstell ich mir ein neues Throwable-Objekt und hab den kompletten Stack Trace. Fast noch ein Stück mächtiger als __FUNCTION__. 😉

    Das ist mir jetzt allerdings nur auf schnell eingefallen. Ist zwar schon ziemlich einfach (ein Objekt erzeugen), aber vielleicht muss man das nicht mal so machen, um dem Stack Trace zu bekommen.
    http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Throwable.html

    Also, wofür braucht man einen Präprozessor? Die Frage steht immer noch im Raum. 🙂

    Edit: Link



  • virtuell Realisticer schrieb:

    Warum geht ihr nicht hin und aendert den Text, indem ihr entsprechende Fehler korrigiert?

    Weil dann der nächste Schlauberger herkommt, und es wieder überarbeitet. Dann muß man die Leute davon überzeugen, daß seine Version richtig ist (Quellen, Textverweise, Aufzeigen, warum die andere Ansicht weit verbreitet, aber trotzdem falsch ist, ...), was mühsam ist. Irgendwann kommt eine Kompromißlösung, man möchte ja, daß alle Ansichten repräsentiert sind: "Der Wasserstrudel in der Badewanne dreht sich auf der Südhalbkugel andersrum. Es gibt allerdings auch die Ansicht, daß dem nicht so sei." Das wäre doch mal was...



  • Daniel E. schrieb:

    virtuell Realisticer schrieb:

    Warum geht ihr nicht hin und aendert den Text, indem ihr entsprechende Fehler korrigiert?

    Weil dann der nächste Schlauberger herkommt, und es wieder überarbeitet. Dann muß man die Leute davon überzeugen, daß seine Version richtig ist (Quellen, Textverweise, Aufzeigen, warum die andere Ansicht weit verbreitet, aber trotzdem falsch ist, ...), was mühsam ist. Irgendwann kommt eine Kompromißlösung, man möchte ja, daß alle Ansichten repräsentiert sind: "Der Wasserstrudel in der Badewanne dreht sich auf der Südhalbkugel andersrum. Es gibt allerdings auch die Ansicht, daß dem nicht so sei." Das wäre doch mal was...

    Ja, da hast du auch wieder war. Kommt allerdings letztlich auch darauf an, wie
    gut man mit den Leuten reden kann und wie einsichtig sie sind.

    mfg
    v R



  • virtuell Realisticer schrieb:

    Warum geht ihr nicht hin und aendert den Text, indem ihr entsprechende Fehler
    korrigiert? Die Moeglichkeit ist gegeben.

    das glaube ich dir erst, wenn du es schaffst, den namen des spiels vom falschen "Nimm" aufs richtige "Nim" zu ändern.



  • Optimizer schrieb:

    Also, wofür braucht man einen Präprozessor? Die Frage steht immer noch im Raum. 🙂

    willst du mich veralbern?



  • Jeder kann Texte ändern und wenn man seine Version sachlich begründen kann, dann spricht doch nichts dagegen 😕

    Hab den Inhalt mal geändert vom Nimm-Spiel, aber den Titel darf man nicht bearbeiten nur den Inhalt.



  • volkard schrieb:

    Optimizer schrieb:

    Also, wofür braucht man einen Präprozessor? Die Frage steht immer noch im Raum. 🙂

    willst du mich veralbern?

    Nein. Ich habe deine Frage, wie man obiges in Java löst, beantwortet. Der Ausgangspunkt war, dass anscheinend jemand in Java einen Präprozessor vermisst. Ich frage mich, wofür?



  • Optimizer schrieb:

    Der Ausgangspunkt war, dass anscheinend jemand in Java einen Präprozessor vermisst. Ich frage mich, wofür?

    ok. für java braucht man keinen.



  • SirLant schrieb:

    Hab den Inhalt mal geändert vom Nimm-Spiel, aber den Titel darf man nicht bearbeiten nur den Inhalt.

    sehe keine änderung. naja, vielleicht kommt das ja noch.



  • @SirLant
    du kannst Artikel aber verschieben (dh. umbennen). Und die Diskussions Seite nicht vergessen, dass hilft sehr, wenn man Leuten zeigen muss, dass man selber recht hat.



  • Also ich sehe die änderungen, wie gesagt nur im Text selbst kann ich als unangemeldeter was ändern, die Option "umbenennen" gibt es bei mir nicht.



  • die heisst ja auch "verschieben" 🙄



  • Deshalb hab ich das umbenennen ja auch in "" geschrieben, weil es verschieben heißt, laut dir, aber wie gesagt das verschieben find ich nicht, wo steht das



  • In der Leiste wo du auch zwischen Diskussion, Versionen und Bearbeiten hin und her klicken kannst. Ist vielleicht wirklich nur da, wenn man angemeldet ist.



  • volkard schrieb:

    ok. für java braucht man keinen.

    Was hat das mit Java zu tun?
    Z.B. geringe Änderungen für verschiedene Kunden lassen sich
    sehr elegant mit einem Präprozessor lösen.

    Jockel



  • Da jeder Compiler und jedes OS so sein eigenes Süppchen kocht gibt es auch genug Situationen, wo der Präprozessor einfach notwendig ist:

    Verschiedene Betriebssysteme - verschiedne Schlaf-Funktionen:

    #if defined(WIN32) || defined(__WIN32__) || defined(__NT__)
      #define WIN32_LEAN_AND_MEAN
      #define __MS__WINDOWS__
      #include<windows.h>
    #elif defined(__OS2__) || defined(OS2) // 32Bit only
      #define INCL_DOS
      #include<os2.h>
      #define Sleep(a) DosSleep(a)
    #elif defined(__DOS__) || defined(DOS) // 32Bit only
      #include<dos.h>
     #define Sleep(a) sleep(a)
    #elif defined(__unix) // Linux, *BSD, Solaris, QNX, ...
      #include<unistd.h>
      #define Sleep(a) sleep((a)/1000)
    #else
      #error Unsupported OS
    #endif
    

    Verschiedene Compiler - verschiedene Inline-ASM-Implementierungen:

    #if defined(__GNUC__)
      #define CPUID(p1,p2,p3,p4,p5) \
        asm volatile("push %%ebx ; cpuid ; mov %%ebx, %%esi ; pop %%ebx" \
          : "=a"(p1), "=S"(p2), "=c"(p3), "=d"(p4) : "a"(p5));
      #define RDTSC(v1,v2) asm volatile("rdtsc" : "=a"(v1), "=d"(v2));
    #elif defined(__BORLANDC__) || defined(__DMC__)
      #define CPUID(p1,p2,p3,p4,p5) \
        asm { mov eax, p5 ; cpuid ; mov p1, eax ; \
        mov p2, ebx ; mov p3, ecx ; mov p4, edx }
      #define RDTSC(v1,v2) asm { rdtsc ; mov v1,eax ; mov v2,edx }
    #elif defined(__WATCOMC__)
      void RDTSC(int &v1, int &v2);
      #pragma aux RDTSC = \
        ".586" \
        "push eax" \
        "push edx" \
        "rdtsc" \
        "mov esi, [esp]" \
        "mov [esi], edx" \
        "mov esi, [esp+4]" \
        "mov [esi], eax"  \
        "add esp, 8"  \
        parm [eax] [edx] \
        modify [eax edx];
      void CPUID (int &eax, int &ebx, int &ecx, int &edx, int val);
      #pragma aux CPUID = \
        ".586" \
        "push eax" \
        "push ebx" \
        "push ecx" \
        "push edx" \
        "mov eax, esi" \
        "cpuid" \
        "mov esi, [esp]" \
        "mov [esi], edx" \
        "mov esi, [esp+4]" \
        "mov [esi], ecx" \
        "mov esi, [esp+8]" \
        "mov [esi], ebx" \
        "mov esi, [esp+12]" \
        "mov [esi], eax" \
        "add esp, 16" \
        parm [eax] [ebx] [ecx] [edx] [esi] \
        modify [esi eax ebx ecx edx];
    #else
      #error unsupported compiler.
    #endif
    

    ...



  • @mastercpp
    Die Notwendigkeit eines Präprozessors für Kompiler die echten
    Maschinencode erzeugen hat auch niemand in Frage gestellt.


Anmelden zum Antworten