Programmiert ihr Compilerunabhängig?
-
nochwas schrieb:
mit jedem weiteren zielsystem musst du deine testabteilung verdoppeln
Im Moment sind es nur CGI-Sachen und einige kleinere Windows-Programme. Das ist
noch überschaubar. Kommt halt drauf an wie sich Linux-Desktops und OSX so weiter
im Desktop-Bereich entwickeln.
-
Ich verwende hauptsaechlich den GCC, der ist auf allen (mir wichigen) Plattformen verfuegbar, somit muss ich mir da keine Sorgen machen. Ich verwende keine Compilerspezifischen Erweiterungen, halte mich an den C++ Standard und verwende in der Regel multiplattform-libraries. Demnach kann ich in der Regel relativ problemlos auf andere Compiler wechseln. Zumindest auf solche, die auch den C++ Standard halbwegs einhalten. Ich nehm bewusst in Kauf dass mein Code auf dem VC6 nicht kompilierbar ist, und das ist mir schnurzegal.
-
es gibt genau 2 compiler die interessant sind:
Microsoft C++ Compiler
GCCuU irgendwann noch clang
Mehr Compiler sind idR nicht interessant - wenn der code auf den beiden laeuft, ist er portabel genug um quasi ueberall kompiliert zu werden. wo es probleme gibt ist im embedded bereich, aber dort ist sowieso alles immer ganz speziell.
Scheppertreiber schrieb:
GCC ist prima. Ein Compiler für alle Zielsysteme - was will man mehr ?
Glaubst Du im Ernst, wenn jemand erstmal eine M$-Compiler verwendet und das
GCC ausprobiert hat, er wechsle zurück ? Warum ?GCC ist ein ziemlicher Schrott. Er laeuft ueberall, das ist super, aber er ist lahm, er ist fett und er ist ziemlich furchtbar programmiert.
zum glueck gibt es mit llvm ja jetzt ein besseres backend und irgendwann mit clang ein besseres frontend.
die gcc ist praktisch und enorm wichtig fuer alles abseits der windows welt, aber gut ist sie dennoch nicht.
Linux ist heute Standard, ich schätze den Marktanteil auf weit über 90%, ebenso
dürfte GCC das Feld auch abräumen (Ich rede nicht nur von Desktop-Kram).auf welchen bereich beziehst du dich? auf dem desktop bereich ist linux praktisch nicht vorhanden und im server bereich sind es nie und nimmer 90%, schon alleine wegen den ganzen BSDs. Und Windows hat auch hier einen starken marktanteil.
linux ist in der server welt sehr relevant, aber eine monopolstellung hat es bei weitem nicht.
-
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 warsize_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.