Programmiert ihr Compilerunabhängig?



  • vc++ und gcc sind vielleicht im mainstream bereich wichtig, es gibt aber so einige andere compiler die sehr viele nutzen. z.B. von Intel, snsystem, Codewarrior, IBM.

    compiler kompatiblen code zu schreiben heisst fuer mich meisstens durch assembler kriechen und compilerspecifische bugs zu suchend und zu umschiffen. kompatiblen code an sich zu schreiben ist dagegen relativ einfach. ein schmankerl von letzter woche war

    #define INDEX_XYZ 3
    .
    .
    .
    .
    
    MeinArray[INDEX_XYZ] = ...;
    

    der gcc hat bei -03 einfach nur

    MeinArray[0] = ...;
    

    rausoptimiert.
    der workaround war

    size_t Idx=INDEX_XYZ;
    MeinArray[Idx] = ...;
    


  • Hi,

    warum sollte ich das tun? Meine Programme laufen alle unter Windows, und meine Programmierumgebung wird solange es sie zu bezahlbaren Preisen gibt CodeGear RAD-Studio heißen.
    Was habe ich davon, wenn ich compilerunabhängig programmiere? Bei den meisten Sachen die ich derzeit mache ist die Interaktion mit dem Nutzer das primäre. Wenn ich da auf die VCL verzichten wollte würde es im Prinzip ein völlig neues Programm werden. So kann ich das alles mit den Mitteln der VCL und davon abgeleiteten eigenen Komponenten erledigen und alle sind zufrieden.

    Wenn sich daran irgendwann mal was ändern sollte, würde ich vermutlich nicht krampfhaft versuchen compilerunabhängig zu arbeiten sondern gleich Java nehmen.

    Gruß Mümmel



  • rapso schrieb:

    vc++ und gcc sind vielleicht im mainstream bereich wichtig, es gibt aber so einige andere compiler die sehr viele nutzen. z.B. von Intel, snsystem, Codewarrior, IBM.

    die meisten davon sind aber gcc oder mvc++ kompatibel.



  • Shade Of Mine schrieb:

    rapso schrieb:

    vc++ und gcc sind vielleicht im mainstream bereich wichtig, es gibt aber so einige andere compiler die sehr viele nutzen. z.B. von Intel, snsystem, Codewarrior, IBM.

    die meisten davon sind aber gcc oder mvc++ kompatibel.

    genau so wie gcc und msvc "c++ standard kompatibel" sind. was selbst bei 99.99% noch unmenge von code bedeutet der nicht geht.



  • hey rapso, wieso kompilierst du auch mit -O3, es ist doch allgemein bekannt, dass diese Optimierungsstufe mit Vorsicht zu genießen ist, da sie sehr aggressiv optimiert und das Programm verfälschen kann.
    Meist stellt man zwischen O2 und O3 eh keinen Unterschied fest und O2 sind nur sichere Optimierungen.



  • Was gibts eigentlich fuer compilerspezifische Erweiterungen, ohne die man nicht leben kann? Ich kenn das nur von frueher mit dem Borland Compiler und der VCL. Aber wozu haben die das ueberhaupt? Dann kenne ich noch __fastcall, was aber auch sinnlos ist.

    Welche Erweiterung vom gcc benutzt den der Linux-Kernel?

    IMHO werden doch fast alle compilerspezifische Erweiterungen von der API/IDE erzwungen, wie eben beim Borland-Compiler mit VCL und dem MS-Compiler mit __fastcall.



  • DEvent schrieb:

    Was gibts eigentlich fuer compilerspezifische Erweiterungen, ohne die man nicht leben kann? Ich kenn das nur von frueher mit dem Borland Compiler und der VCL. Aber wozu haben die das ueberhaupt? Dann kenne ich noch __fastcall, was aber auch sinnlos ist.

    Welche Erweiterung vom gcc benutzt den der Linux-Kernel?

    IMHO werden doch fast alle compilerspezifische Erweiterungen von der API/IDE erzwungen, wie eben beim Borland-Compiler mit VCL und dem MS-Compiler mit __fastcall.

    zB alignemnts definieren, non standard template verhalten mit etwaigen workarounds, calling conventions werden unterschiedlich angegeben, visibility über binary grenzen hinaus ist unterschiedlich, diverse compiler bugs, nette features wie zB __assume(0) vom vc++ oder typeof vom gcc,...



  • Hi,

    Borland muß da schon eigene Erweiterungen von C++ benutzen, weil die VCL ja nicht in C++ sondern in Delphi (Object-Pascal) geschrieben ist.
    Außerdem müssen die published-Angaben der VCL und die entsprechenden property-Eigenschaften sowie die try-finally-Blöcke dafür in C++ verwendbar sein.

    Das C++ unter Borland muß also problemlos auch Pascal-Funktionen und Klassen aufrufen können. Klappt ausgezeichnet, in meinem derzeitigen C++Builder nutze ich all die Komponenten die ich mir in Delphi erstellt habe ohne sie noch mal in C++ neu schreiben zu müssen.

    Gruß Mümmel



  • DEvent schrieb:

    Was gibts eigentlich fuer compilerspezifische Erweiterungen, ohne die man nicht leben kann? Ich kenn das nur von frueher mit dem Borland Compiler und der VCL. Aber wozu haben die das ueberhaupt? Dann kenne ich noch __fastcall, was aber auch sinnlos ist.

    Welche Erweiterung vom gcc benutzt den der Linux-Kernel?

    IMHO werden doch fast alle compilerspezifische Erweiterungen von der API/IDE erzwungen, wie eben beim Borland-Compiler mit VCL und dem MS-Compiler mit __fastcall.

    Der verwendet inline-Anweisungen, die Anweisungen likely und unlikely für die Branch-Prediction, das sind zumindest die drei Sachen die ich kenne.



  • Rapso du Spaßvogel _-P schrieb:

    hey rapso, wieso kompilierst du auch mit -O3, es ist doch allgemein bekannt, dass diese Optimierungsstufe mit Vorsicht zu genießen ist, da sie sehr aggressiv optimiert und das Programm verfälschen kann.
    Meist stellt man zwischen O2 und O3 eh keinen Unterschied fest und O2 sind nur sichere Optimierungen.

    weil es mein job ist dafuer zu sorgen dass unsere spiele/engine schnellst moeglich laufen, und da ist mir jedes 0.1ms wichtig 😉
    zudem merkt man auf manchen plattformen sehr ob 02 oder 03. O3 ist oft verunglimpft, weil es beim code von viel standardcoformitaet ausgeht, da sind dinge wie z.b. (int)&Sinus; nicht ok und entsprechend kommt nicht das raus was bei O2 geht. aber es gibt auch einige bugs in 03, aber auch bei 02. Jedoch hab ich das gefuehl dass ohne optimierungen es auch schlimmer ist als O1.

    was ich ein wenig scheisse finde ist dass man beim gcc nicht im file sagen kann dass bestimmte optimierungen aus/an sollen wie es beim msvc moeglich ist. das ist dann ne sehr bloede frickelei ne zweite datei zu machen und code hin und her zu kopieren um die kaputte stelle zu finden die in der 03 datei nicht geht.


Anmelden zum Antworten