020
17.05.2004, 22:38 Uhr
Bruder Leif
dances with systems (Operator)
|
Ich denke, es ist auch wichtig, in C++ keine "Ich-schreib-jetzt-mal-was-und-dann-läuft-es-überall"-Sprache zu sehen. Den Ansatz verfolgen alte Pascal-Compiler, Smalltalk, Java, .NET und so weiter, jeweils mehr oder weniger erfolgreich. Selbst wenn eine solche 100%-Standardisierung möglich wäre, gäbe es immer noch zu viele Ungereimtheiten, was die zugrundeliegende Plattform angeht.
Das Programm läßt sich auf einer anderen Plattform compilieren oder der fertige Binärcode direkt ausführen, aber was ein Programm ausmacht, ist nicht nur die ausführbare Datei. Wenn ich mit wxWidgets die Möglichkeit habe, ein Programm unter Windows, Linux und dem Macintosh laufen zu lassen, werde ich mich hüten, das Programm auch für alle drei Plattformen zu verkaufen. Ich habe keine Ahnung von den Interna des Mac, und von Linux sind derart viele Versionen, Revisionen und Eigenbau-Kreationen im Umlauf, dass ich mir NIE sicher sein kann, ob mein Programm dort läuft. Computer sind kreativ, wenn es darum geht, nicht zu funktionieren... seufz...
Und den Kundensupport für mehrere Plattformen aufrecht zu halten, ist mehr als schwierig. Das Programm hat vielleicht überall den gleichen Quellcode, aber das eine Betriebssystem bringt ganz andere Oberflächen zustande als das andere. Siehe Mac: Es gibt sogar eine Richtlinie für Java-Programmierer, wie sie ihre Applikationen verpacken sollen, damit sie auch auf dem Mac "richtig" laufen und sich konsistent in die Umgebung einfügen.
C++ ist für mich DIE Sprache, wenn ich entweder eine portable Geschäftslogik aufstellen soll (Threads und sonstige "einfache" Probleme lassen sich mit Klassen schön kapseln - auf anderen Systemen passe ich die Thread-Klasse an und der Rest läuft wieder. Code Reusing wird nicht nur von Java propagiert...), oder von vornherein weiß, dass mein Programm garantiert für immer und ewig nur auf EINER Plattform laufen muss. Dann kümmere ich mich nicht mehr so start um die Portabilität, und spare mir einen Haufen Ärger mit Libs, die auf WORA aufbauen und mir für jeden Dateizugriff tausend Konvertierungen zwischen Zeichensätzen, Verzeichnistrennzeichen, Laufwerksbenennungen und was weiß ich noch alles aufzwingen. Dann nehme ich genau die Bibliothek, die am besten zum Problem passt, nicht zum Standard. Unter Windows wxWidgets, VCL oder, wenns nicht anders geht, die MFC, unter Linux wxWidgets, weil mir bekannt, und für andere Plattformen ist der Markt zur Zeit eh ziemlich dünn gesät.
Das Write-Once-Run-Anywhere-Prinzip ist praktisch, wenn es um kleine Tools oder Freeware geht. Wenn ich hobbymäßig ein Programm schreibe, das ich auch unter Linux laufen lassen will. Wenn ich davon ausgehen kann, dass ich keinen Kundensupport machen muss, und die Benutzer etwas von ihrer Kiste verstehen. Für Programme, die in den Verkauf gelangen sollen, lege ich mich lieber auf eine Plattform fest, und schreibe mir für allzu spezifisches (Threads etc.) wiederverwendbare Klassen. Dann ist der Umstieg auf andere Systeme auch nicht sooooo aufwendig.
Was speziell GUI-Klassen angeht, werde ich mir den SWT-Port nach .NET mal genauer ansehen. Mono ist reif genug, um SWT#-Programme unter Windows und Linux laufen zu lassen, allerdings bin ich dann wieder bei C#... weiß jemand, ob es einen SWT-Port für reines C++ gibt? Wäre SEEEEEHR interessiert ;-) -- Mit 40 Fieber sitzt man nicht mehr vor dem PC. Man liegt im Bett. Mit dem Notebook. |