Sollte man VC spezifisch proggen?

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
tori
Beiträge: 2
Registriert: 12.07.2011, 18:27

Sollte man VC spezifisch proggen?

Beitrag von tori »

Ich habe mich jetzt hier ein wenig im Forum eingelesen und hier wird in fast jedem Thread eine MSVC-spezifische Funktion erwähnt, zu erkennen an den beiden Unterstrichen (__) vor dem Funktionsnamen.

Ich empfinde ein derart compilerspezifisches Programmieren irgendwie als unsauber, so wie wenn ich meine Website mit Spezialfunktionen versehe die nur der IE6 kennt;)

Geht's hier sonst niemandem so oder sehe ich das einfach nur engstirnig? Bringt es so viele Vorteile die überhaupt zu verwenden?

gruß
waigie
Beiträge: 82
Registriert: 20.05.2009, 19:37

Re: Sollte man VC spezifisch proggen?

Beitrag von waigie »

Naja ich versuche das immer einigermaßen zu vermeiden. Hierbei muss man aber sicher etwas unterscheiden.

Bei einer Website/Webanwendung ist das ein totales no-go. Einfach weil man es nicht nur mit dem IE6 benutzen wird. Anders sieht das aus, wenn man ein Projekt umsetzt was z.B. auf DirectX basiert. Diese Projekte werden nur unter Windows für Windows kompiliert. Wenn es da eine Vereinfachung oder Verbesserung durch diese Funktionen gibt dann nutzt man sie.

Erst recht wenn es sich um ein Hobbyprojekt handelt. Meist schau ich bei Hobbyprojekten einfach nur darauf das es fertig wird und nicht das es sonderlich schön wird.
tori
Beiträge: 2
Registriert: 12.07.2011, 18:27

Re: Sollte man VC spezifisch proggen?

Beitrag von tori »

mir ist auch aufgefallen dass der vergleich mir der website etwas hinkt, einfach, weil man nicht sehr oft den compiler wechselt (quasi nie).

mir fallen spontan auch nur open source projekte ein die sich mit verschiedenen compilern kompilieren lassen. da beschweren sich manchmal leute wenn das nicht unter ihrem VC geht obwohl es mit gcc entwickelt wurde... das ist auch etwas seltsam.

vllt etwas zu meinem background: ich bin student und arbeite in den übungen je nach fach/modul mit verschiedenen compilern. Da ich noch nicht weis wo ich später lande finde ich es sinnvoll, nicht allzu Compiler-spezifisch zu werden.

gruß
Benutzeravatar
Krishty
Establishment
Beiträge: 8267
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Sollte man VC spezifisch proggen?

Beitrag von Krishty »

Hi und willkommen!

Bei Websites spürt es der Anwender, wenn du was nicht Portables benutzt. Bei C++-Anwendungen hingegen kommt beim Anwender nur Maschinentext an. Bei dessen Ausführung ist es egal, ob der durch VC-spezifische Makros erzeugt wurde oder nicht. Der Einzige, der jemals einen Unterschied spürt, bist du selber – oder alle, die deinen Quelltext verwenden wollen, falls er Open Source ist. Wenn du in großen Firmen programmierst ist es eh so gut wie egal, weil dort selbst Compiler-Einstellungen nur jedes zweite Weihnachten geändert werden, Compiler-Versionen nur in Schaltjahren und Compilertypen nie.

Ich würde auch liebend gern nur Standardfunktionen nutzen, allerdings deckt der C++-Standard nicht alles lückenlos ab. Theoretisch bekommt man fast alles mit purem C++ hin, allerdings manches nur sehr umständlich – das Runden von floats ist so ein Beispiel; da besteht zwischen der portablen C++-Version und einem VC-spezifischen Intrinsic (eine im Compiler fest eingebaute Funktion) ein Geschindigkeitsunterschied von 1:100, den man natürlich gern mitnehmen möchte, wenn man Multimediaanwendungen schreibt. Da muss man dann abwägen ob man lieber ein schnelles, einfaches oder ein überall kompilierbares Programm haben will.

Meistens ist das übrigens garkrein Problem, weil es eh nur eine Handvoll großer Compilertypen gibt und die alle ähnliche Funktionen anbieten, nur unter jeweils anderem Namen. Man kapselt das dann in einer Funktion; per #ifdef findet der Quelltext dann heraus, durch welchen Compiler er übersetzt wird, und wählt das passende Intrinsic aus. Der Rest des Quelltexts nutzt nur die kapselnde Funktion und merkt nichts, wenn die intern für jeden Compiler ein anderes Intrinsic wählt.

Gruß, Ky
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: Sollte man VC spezifisch proggen?

Beitrag von Aramis »

Die Kunst besteht eher darin, zu wissen was jetzt genau VC-spezifisch ist und was nicht :-/ Bei __declspec und Konsorten geht es ja noch einfacher, schwieriger wird es bei spontanen Spracherweiterungen oder Spaessen in der Standardbibliothek.

Wenn es um Portabilitaet geht, wuerde ich immer versuchen, selbst wenn du einstweilen nur mit einem Compiler arbeitest, dir moeglichst viele Optionen offen zu lassen. __declspec etc. kann man beispielsweise wunderbar hinter einem Makro verschwinden lassen, das dann auf einem anderen Compiler ins Leere zeigt.
Benutzeravatar
Krishty
Establishment
Beiträge: 8267
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Sollte man VC spezifisch proggen?

Beitrag von Krishty »

Ich glaube, so schlimm ist das Ganze nicht. Ehrlich gesagt ist heute eine goldene Zeit für die Portabilität. Nie waren die Compiler so nah am Standard, und mit jeder Aktualisierung rücken sie näher zusammen. Natürlich kann man beim Portieren erstmal einen Batzen Zeit einplanen um hundert unvorhergesehene Konflikte zu beseitigen — aber vor zehn Jahren konnte man seinen Quelltext schlicht und einfach wegschmeißen wenn man von Visual C++ 6.0 auf GCC 2.0 portieren wollte … noch dazu hat man m.E. nach heute eine höhere Funktionalität-pro-Quelltext-Ausbeute dadurch, dass sich so langsam endlich generische Programmierung und RAII durchsetzen …

D.h., man muss heute für das gleiche Programm weniger Quelltext schreiben, den man hinterher auf kompatiblere Compiler portiert. Und es wird immer besser werden.

(Ich hatte heute erst versucht, meinen über Jahre pur in VC geschriebenen Text auf GCC mit LLVM zu portieren und war positiv überrascht, wie wenig Probleme er gemacht hat.)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Schrompf
Moderator
Beiträge: 4878
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Sollte man VC spezifisch proggen?

Beitrag von Schrompf »

Sehe ich auch so. Die Zeiten selbst für uns unterbezeitete Hobbyentwickler werden eigentlich immer besser. Was ich aber hier konkret in diesem Forum als Verbesserung anerkenne, ist ein deutliches Hinweisen, falls man in einem Codebeispiel eine compilerspezifische Erweiterung benutzt. Das könnte ein paar Verwirrungen vermeiden.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Thoran
Establishment
Beiträge: 224
Registriert: 15.05.2009, 12:51
Wohnort: Stuttgart
Kontaktdaten:

Re: Sollte man VC spezifisch proggen?

Beitrag von Thoran »

Schrompf hat geschrieben:Sehe ich auch so. Die Zeiten selbst für uns unterbezeitete Hobbyentwickler werden eigentlich immer besser. Was ich aber hier konkret in diesem Forum als Verbesserung anerkenne, ist ein deutliches Hinweisen, falls man in einem Codebeispiel eine compilerspezifische Erweiterung benutzt. Das könnte ein paar Verwirrungen vermeiden.
Das setzt voraus, dass man sich dessen bewußt ist, ohne das ich das jetzt böse gemeint habe.

Thoran
Wer Rechtschreibfehler findet, darf diese gerne behalten.
Mein Entwicklertagebuch
Aktuelle Projekte: Universum: Domination (ehemalig AlphaOmega),Universum: Sternenjäger, PixelWars: Highscore-based Top-Down-Spaceshooter
Spieleengine Unreal 5
Benutzeravatar
Schrompf
Moderator
Beiträge: 4878
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Sollte man VC spezifisch proggen?

Beitrag von Schrompf »

Ja, auch das stimmt. Ich habe gelegentlich schon Dinge propagiert, zu denen mir erst andere Leute erklären mussten, dass das eine MSVC-spezifische Erweiterung ist. Meine peinlichste Diskussion dazu hatte ich vor langer Zeit zum Thema __super - ich kannte das von Java und hielt es für eine valide Option in C++.

Aber dafür ist das ja ein Forum, nicht wahr? Man kann ja auch einfach eine kurze freundliche Notiz hinzufügen, wenn jemand anders eine compiler-spezifische Erweiterung an Lösung anbietet, ohne sich dessen bewusst zu sein. Ist ja nichts Böses, so eine zu benutzen - man muss nur wissen, was man tut.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Jonathan
Establishment
Beiträge: 2389
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Sollte man VC spezifisch proggen?

Beitrag von Jonathan »

Ich hab es jetzt bei einem Uni Projekt gemerkt, dass VC2010 schon einige tolle C++0X Features unterstützt (auto, override) die auf anderen Compilern nicht funktionierten. Das Override konnte man mit einem Makro in den Griff kriegen, das auto musste ich leider weglassen.
Aber gerade diese Sachen, die heute noch nicht jeder Compiler kann, die aber toll sind und bald im Standard sein werden (oder schon sind?) werde ich auch weiterhin privat benutzen.
Ein bisschen anders sieht es z.B. damit aus, dass sit VC std::exceptions im CTor schon eine Fehlernachricht übernehmen können, obwohl das im Standard wohl nicht vorgesehen ist. An so Sachen merkt man dann, wie bestimmte Hersteller hier und da klammheimlich ein wenig abweichen. War ansich kein großes Ding, aber die Kollegen haben sich trotzdem nicht über die Fehlermeldungen gefreut.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
kaiserludi
Establishment
Beiträge: 467
Registriert: 18.04.2002, 15:31

Re: Sollte man VC spezifisch proggen?

Beitrag von kaiserludi »

Krishty hat geschrieben: Wenn du in großen Firmen programmierst ist es eh so gut wie egal, weil dort selbst Compiler-Einstellungen nur jedes zweite Weihnachten geändert werden, Compiler-Versionen nur in Schaltjahren und Compilertypen nie.
Man merkt, dass ich für eine kleine Firma arbeite:
Die C++ Variante des Codes kompiliert unter MSVC, GCC und MinGW, die Projekte gibt es für VS, XCode und QTCreator. Als Architektur werden X86 und ARM unterstützt, an OS mittlerweile 8 verschiede Plattformen und das ist nur die C++ Variante, es gibt ja noch Varianten in C, objC, C#, Java, Flash, Javascript :D
Da muss der Code schon recht multiplatform sein. Wir nutzen nicht mal die C++ std-lib, sondern eigene Datentypen für maximale Kompatibilität.
"Mir ist auch klar, dass der Tag, an dem ZFX und Developia zusammengehen werden der selbe Tag sein wird, an dem DirectGL rauskommt."
DirectGL, endlich ist es da
:)

"According to the C++ standard, it's "undefined". That's a technical term that means, in theory, anything can happen: the program can crash, or keep running but generate garbage results, or send Bjarne Stroustrup an e-mail saying how ugly you are and how funny your mother dresses you." :shock:[/size]
odenter
Establishment
Beiträge: 207
Registriert: 26.02.2009, 11:58

Re: Sollte man VC spezifisch proggen?

Beitrag von odenter »

Das hat ja nichts mit der Größe des Unternehmens zu tun, sondern mit den Anforderungen.

Wenn ich protablen Code brauche dann schreibe ich welchen, wenn ich nur eine Zielplatform habe, dann verwende ich auch Platformspezifische Libs, Funktionen/Whatever.
kaiserludi
Establishment
Beiträge: 467
Registriert: 18.04.2002, 15:31

Re: Sollte man VC spezifisch proggen?

Beitrag von kaiserludi »

odenter hat geschrieben:Das hat ja nichts mit der Größe des Unternehmens zu tun, sondern mit den Anforderungen.
Das war auch mit einem Augenzwinkern gemeint ;)
"Mir ist auch klar, dass der Tag, an dem ZFX und Developia zusammengehen werden der selbe Tag sein wird, an dem DirectGL rauskommt."
DirectGL, endlich ist es da
:)

"According to the C++ standard, it's "undefined". That's a technical term that means, in theory, anything can happen: the program can crash, or keep running but generate garbage results, or send Bjarne Stroustrup an e-mail saying how ugly you are and how funny your mother dresses you." :shock:[/size]
Benutzeravatar
Krishty
Establishment
Beiträge: 8267
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Sollte man VC spezifisch proggen?

Beitrag von Krishty »

Ja, ich hatte da ein wenig übertrieben; da hat kaiserludi schon korrekt augengezwinkert. Natürlich gibt es auch große Firmen mit flexibler Quelltextbasis. Aber ebenso gibt es die, deren Produkte (gewollt) seit jeher nur auf einer einzigen Plattform eingesetzt werden, und da ist alles sehr schwerfällig. Da wir bei VC sind ist Microsoft ein passendes Beispiel: Die setzen afaik noch großflächig VS 2005 ein und etablieren erst jetzt Link-Time Code Generation, obwohl es schon seit 2003 in ihren eigenen Compilern ist. Es hängt einfach ein riesiger Rattenschwanz dran (z.B. enthalten einige Windows-Versionen noch 16-Bit-Text, aber die aktuellen VC-Compiler können den nicht mehr erzeugen), es kann viel schiefgehen (weil jede Version neue Bugs enthält oder auch Features Entfernt werden) und je sicherheitskritischer die Anwendung ist, desto mehr setzt man auf etablierte Systeme (was ja nur rational ist). Als Compiler und Linker für Kernkomponenten wie Windows höchstselbst setzen die afaik auch Sonderanfertigungen ein, das verzögert eine mögliche Portierung natürlich erneut.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
odenter
Establishment
Beiträge: 207
Registriert: 26.02.2009, 11:58

Re: Sollte man VC spezifisch proggen?

Beitrag von odenter »

kaiserludi hat geschrieben:
odenter hat geschrieben:Das hat ja nichts mit der Größe des Unternehmens zu tun, sondern mit den Anforderungen.
Das war auch mit einem Augenzwinkern gemeint ;)
War auch nicht böse oder so gemeint. :)
Antworten