Logo - Dipl.Inf. Guido Draheim - Entwicklung, Schulung, Beratung, Dokumentation Portables C
Adr.:  Guido Draheim
Nipkowstr. 64
12489 Berlin
Tel.:  0179'467'5028
St.Nr.:  36/365/62133

Allgemein
  Freiberufler
  Universität
  SourceForge
  Programmierer
  Lebenslauf
  Interessengebiete
Projekte
 PFE VM
 XMLdb ast/ta
 Doku Compiler
 Makro Archive
Infos / Skills
 Asm , C , C++ , Java
 Perl , Python , PHP
 Shell , Scheme , Forth
 ... und vieles mehr
Querverweise
 Weblinks
 Software
 Sitemap
  (english)   (francais)  

printer / text mode version drucktext
(C) 2007-08-19 Guido Draheim @ web.de

generated by mksite.sh
2007-08-19

Das Gegenteil zur Beschäftigung einer Optimierung von Quellcode auf bestimmte Prozessorarchitekturen, notfalls mittels Assembler, ist die Formulierung von Quellcode, der maximal portabel ist. Gerade C++ hatte da lange Zeit große Schwierigkeiten, da jeder Compiler den C++ Standard anders verstand, und insbesondere die Stanard-Bibliothek immer leicht verschieden funktionierten.

Demgegenüber hat C schon eine lange stabile Phase hinter sich, und die Compilerhersteller sind sehr viel erfahrener mit der Tatsache, dass ihr Compiler mit Quellcode konfrontiert werden, der eigentlich für andere Systeme geschrieben wurde. Das Hauptproblem ist bei C oftmals nicht die mangelnde Standardkompatibilität des Compilers, sondern die aggressive Optimierung - da wird alles gemacht, was irgendwie noch nach dem C Standard legal ist.

Das Ergebnis ist, dass beliebiger C Code meist portabel ist, wenn man alle Optimierungen des Compilers abschaltet. Die Kunst besteht jetzt darin, alle Legalitäten der Sprache C zu kennen, und Code so zu schreiben, dass man auf die höchste Optimierungsstufe schalten kann. Denn wenn man dieses macht, dann wird der Compiler gerade die Programmschleifen hoch optimieren, ja womöglich Parallelisieren, was die Ausführung dramatisch beschleunigen kann, - und ungenutzen oder wenig genutzten Code erkennen, sodass dieser verschoben oder gelöscht wird.

Wie man C Quellen portabel schreibt, dass gewinnt man vor allem durch Erfahrung - in dem man verschiedenste Projekte mit den unterschiedlichsten C Compilern auf den unterschiedlichsten Plattformen versucht zu übersetzen - und den Grund von auftretetenden Fehlern untersucht. Beim nächsten Quellcode weiss man schon beim Aufschreiben des Programms, worauf man achten muss, damit es keine bei späterer Portierung keine Probleme gibt.

Projekte

Ich habe die meisten meiner C/C++ Projekte tatsächlich in C geschrieben. Zum einen habe ich das objektorientierte Modell soweit verinnerlicht, dass ich Objekte auch in blankem C schreiben kann (das GTK Widget-Kit macht das übrigens auch). Dabei gewinnt man die Möglichkeit, dass die C Funktionen über Wrapper von anderen Hochsprachen genutzt werden können. Erst in jüngerer Zeit stabilisiert sich das C++ und die zugehörigen Wrappergeneratoren, dass diese auch solche Module hereinholen können.

Ich habe die meisten meiner C Funktionsbibliotheken auf verschiedensten Plattformen getestet - am meisten portiert worden ist sicher die ZZipLib, die auch von PHP zum Zip-Zugriff verwendet wird. Compiler, Systeme, Multithreaded, Largefile, und und und - von Unix, BSD, Windows bis Echtzeitsystemen wie VxWorks.

Aber auch das PFE, die Portable Forth Environment, habe ich auf die verschiedensten Plattformen gebracht - Unix, BSD, Windows, VxWorks - und dabei darüber hinaus noch einige optionale Optimierungen erlaubt, wenn man mit GCC arbeitet, wo sogar eine Reihe von Assember-Inlines auftreten.

Insbesondere das Verständnis von GCC reicht soweit, dass ich eigene Patches geschrieben habe, die den GCC für mein Zwecke modizieren - das Substruct-C Projekt ist so ein Steckenpferd von mir, da ich der Meinung bin, dass auch normales C eine vereinfachte Hilfestellung für objektorientierte Programmierung gut vertragen kann, und dabei keinerlei (oft rechte große) zusätzliche Laufzeitbibliotheken binden muss, wie das bei C++ der Fall ist.


Compilerbau / Generatoren / Adaptoren / Transformierung / Modularisierung / Modernisierung Datenbanken / Kommunikation / Schnittstellen / Programmquellen