Compiler
-
Ich denke, dass das nicht zwingend notwendig ist, da die heutigen Prozessoren viele Instruktionen teilen.
Aber:
Natürlich gibt es spezialisierte Compiler, die auch Instruktionen nutzen, die eben nicht jeder Prozessor bietet. Dadurch kann dann das erstellte Programm auf dem Prozessor noch effizienter laufen - auf einem anderen Prozessor würde es aber abstürzen, da dieser die Instruktionen nicht kennt.Es gibt teilweise auch in den Compilern Flags, um gewisse Prozessorerweiterungen an- bzw. abzuschalten.
-
blurry333 schrieb:
Und es muß auch für jeden Prozessor ein eigener Compiler her oder ??
Eigentlich nicht, aber je nach dem. Kann schon sein, daß für irgendeine embedded Gurke nur ein C-Compiler gebaut wird, der meilenweit vom Standard abweicht, das ist halt mal so.
Aber nehmen wir mal die größeren.
gcc - klar
icc - Intel muss ja zeigen, wie schnell Intel-Prozessoren rennen können. Er optimiert für AMD halt nicht so gut.
msvc - klar, MS muss einen eigene haben
clang - unklar, Java-Begeisterung?
comeau - Ja, war wichtig, einen zu haben, der ein wenig dichter am Standard war.
borland - Schon langelange tot, sie merken es nur nicht. War in den 80-er großartig.
digital mars - unklar. Um D zu pushen?
open watcom - ist wohl der letze, der gut DOS-Programme baut.
-
volkard schrieb:
clang - unklar, Java-Begeisterung?
Clang - Schön aufgesplittet in Parser/Compiler etc., damit z.B. statische Analyse-Tools darauf aufbauen können. (Scheint mit GCC nicht so wirklich möglich zu sein.)
-
Aber der Compiler erzeugt doch Assemlber Code. Und jeder Prozessor hat seinen eigenen Assembler Code ??
-
blurry333 schrieb:
Aber der Compiler erzeugt doch Assemlber Code. Und jeder Prozessor hat seinen eigenen Assembler Code ??
Gewissermaßen ist das so, aber die Prozessoren haben auch Instruktionen, die sie alle gemeinsam haben. Das sind sozusagen die Grundbefehle, die jeder Prozessor kann.
Darüber hinaus gibt es dann noch Erweiterungen, die aber nicht jeder Prozessor können muss.
-
volkard schrieb:
borland - Schon langelange tot, sie merken es nur nicht. War in den 80-er großartig.
Ja, und dann hatten die Borland-Leute die Preise drastisch nach oben getrieben und waren irgendwie weg vom Fenster.
Schade drumm!Aber der kostenlose CBuilder1 (1997) läuft für viele Dinge immer noch prima. Ist nur nicht mehr sehr aktuell.
-
fghfgh schrieb:
die Prozessoren haben auch Instruktionen, die sie alle gemeinsam haben. Das sind sozusagen die Grundbefehle, die jeder Prozessor kann.
Unsinn.
-
Bashar schrieb:
fghfgh schrieb:
die Prozessoren haben auch Instruktionen, die sie alle gemeinsam haben. Das sind sozusagen die Grundbefehle, die jeder Prozessor kann.
Unsinn.
Gut, das war etwas zu sehr verallgemeinert, aber letztendlich läuft es darauf hinaus, dass es verschiedene Prozessortypen gibt, die einen Befehlssatz teilen. Hier wäre z.B. der x86 Befehlssatz zu nennen.
-
volkard schrieb:
blurry333 schrieb:
Und es muß auch für jeden Prozessor ein eigener Compiler her oder ??
Eigentlich nicht, aber je nach dem. Kann schon sein, daß für irgendeine embedded Gurke nur ein C-Compiler gebaut wird, der meilenweit vom Standard abweicht, das ist halt mal so.
Aber nehmen wir mal die größeren.
gcc - klar
icc - Intel muss ja zeigen, wie schnell Intel-Prozessoren rennen können. Er optimiert für AMD halt nicht so gut.
msvc - klar, MS muss einen eigene haben
clang - unklar, Java-Begeisterung?
comeau - Ja, war wichtig, einen zu haben, der ein wenig dichter am Standard war.
borland - Schon langelange tot, sie merken es nur nicht. War in den 80-er großartig.
digital mars - unklar. Um D zu pushen?
open watcom - ist wohl der letze, der gut DOS-Programme baut.
Ich arbeite mit IBM xlC. Und dann wäre noch der SunStudio compiler von Sun/Oracle zu nennen. Und HP hat auch einen für HP-UX.
Die Codebasis von gcc ist ziemlich historisch gewachsen und schwer wartbar. Das ist einer der Gründe von clang. Und Lizenztechnisch ist gcc LGPL, was nicht jedem passt (vor allen Dingen passt es nicht in die BSD-Welt).
Das Feature von icc ist nicht, dass es für AMD nicht gut optimiert, sondern dass es für Intel eben gut optimiert.
Und die Frage, warum es mehrere Compiler gibt führt zu der Frage, warum es verschiedene Autos gibt. Nicht nur Autos für verschiedene Anwendungsbereiche (PKW, LKW, Busse... - bei Compiler Betriebssysteme) sondern für einen Anwendungsbereich sogar mehrere Varianten (Opel Astra, VW Golf, ...) und jedes noch mal in verschiedenen Farben (da nenne ich jetzt keine Beispiele).
-
Ach ja - es gab schon versuche, das zu vereinheitlichen um es effizienter zu gestalten. Das mit den Autos meine ich. Der Versuch war nicht so erfolgreich, so dass man eine Mauer bauen musste, auch wenn man nicht die Absicht hatte. Die ist dann irgendwann gefallen und die Leute haben dann seine kleinen einheitlichen 2-Takter dann gegen ganz unterschiedliche 4-Takter eingetauscht.