Okay, als jemand, der C eigentlich möglichst nicht benutzt bin ich wohl der Falsche für so viel Kritik, aber die Geschwindigkeit-vor-Alles-Ideologie ist ja gerade einer der Punkte, die ich an GCC nicht mag. Ich muss aber gestehen, dass ich das als Ehemaliger Gentooler auch einmal anders gesehen habe.
Eigentlich sind es zwei Kritiken. Die Eine betrifft den Performancegewinn und die Andere, dass man damit viel Manpower verliert.
Zunächst einmal hoffe ich, dass bald auf Alternativen, wie LLVM umgeschwenkt wird, nicht nur BSDler, sonder auch viele Linuxer gern hätten.
Doch bleiben wir bei GCC. Der Compiler ist grundsätzlich nicht wirklich schlecht. Er kompiliert C, C++ und vieles Andere und unterstützt diverse Standards ähnlich gut, wie andere Compiler auch. Allerdings liegt hier auch schon das Problem. Es wäre schön einen Open Source Compiler zu haben, auf dem jeder standardkompatibler C-Code einfach läuft. Ich weiß, dass das Wichtigste funktioniert, aber eben nicht alles. Ich sehe die höchste Priorität bei Compilern, Interpretern darin, dass sie nach oben und nach unten hin möglichst kompatibel sind. Nach unten zur Plattform und nach oben zur Sprache und zu Dialekten. Dann kommen noch Dinge, wie Debugging hinzu und eben Dinge, die dem Entwickler das Leben erleichtern. Also gute Warningmessages oder, dass gleich darauf aufgepasst wird, dass das Ergebnis stabil und sicher ist.
Wie gesagt... GCC ist im Grunde kein schlechter Compiler, könnte alllerings besser sein. Immerhin ist er Open Source, wird breit verwendet, hat einige große Firmen und eine große Community hinter sich.
Wozu setzt man das ein? Performance um Jeden Preis.
Man verzichtet auf eine gute Geschwindigkeit beim Kompilieren selbst.
Man verzichtet darauf, dass das Ergebnis gut lesbar/zu debuggen ist.
Man verzichtet Standardmäßig sogar darauf Geschwindigkeit durch kleinere Ausgabedateien zu gewinnen.
Das ist jetzt nicht die riesige Kritik, aber manchmal denke ich, was wäre, wenn man darauf geachtet hätte. All das trägt doch zu einer schnelleren Entwicklung bei. Klar kann man sagen, dass ein Programm ja nicht so oft kompiliert wird. Ja, aus Usersicht vielleicht, aber der programmiert das auch nicht, regt sich aber sehrwohl bei Bugs auf.
Aber überlegen wir doch mal, was die Resultate sind. Zuerst mal große Kompilate. Das führt zu mehr Platz und Trafficverschwendung, aber vor allem dauert der Start bzw. das verschieben in die RAM länger. Vergesst auch nicht die Bibliotheken. Vergesst auch nicht das ganze System zu beachten, das davon betroffen ist.
Wie ist das denn mit der Geschwindigkeit? Ist sie spürbar? Ist die sie messbar? Ist sie wirklich da?
Wäre es nicht besser, den Computer um zwei oder drei Herz zu übertakten, neue Hardware zu kaufen, das Programm oder das System anständig zu konfigurieren? Wäre es nicht besser, wenn der Programmierer mehr Zeit hätte um sich einen besseren Algorithmus auszudenken oder die Warnings ihn aufmerksam machen würden, dass er da einen ressourcenverbrauchenden Bug oder Flaschenhals hat und ihm sogar Vorschläge zur Lösung des Problems geben würde oder wie wäre es, wenn der Compiler das alles gleich selbst macht. Klar, einiges macht der GCC, aber soweit ich das mit meinen nicht sehr großen Kenntnissen sehe geht das alles in die Richtung "Überlassen wir das dem Programmierer und machen da noch eine Funktion, die auf dem Prozessor, wenn durch 42 dividiert wird und Vollmond ist die Performance um 0.0002 Prozent verbessert wird. Das schaut dann zwar blöd aus, wenn man da mit dem Debugger drüber geht, aber das ist ja in der Commitmessage im Code und irgendwo in der aus allen Nähten platzenden Manual dokumentiert"
Ich weiß, das ist sehr überspitzt und wie gesagt bin ich sicher nicht der Richtige, um darüber zu schreiben. Wahrscheinlich liegt es auch daran, dass noch immer viel zu viel auf C(++) gesetzt wird und das bei Programmen, bei denen Performance keine/kaum eine Rolle spielt. Es ist nur traurig, dass es seit GCC und C nichts neues gibt, das die beiden ablöst. Klar, Ruby, Python, Perl, ... aber keines vermag es C abzulösen, wobei es mit schon recht wäre, wenn man sich mal auf Eine einigen könnte. Das heißt nicht, weg mit dem Rest, aber dann hat mal man sowas wie eine Referenzsprache und kommt mir jetzt nicht mit UML und Co. Es geht ja auch darum was zu haben, das viele Bibliotheken hat, in diversen IDEs ist, etc.
Aber das wird zu OT und zu lang...
Gruß,
Athaba