Nachdem ich ein bisschen gelernt habe, wie LLVM funktioniert, bin ich wirklich gespannt, wie portierbarer Low-Level-Code generiert werden kann und wie modular dieses „Ding“ aufgebaut ist.
Aber ich habe heute die Existenz von C entdeckt, das einige Konzepte mit LLVM zu teilen scheint.
Also suche ich nach Informationen, die mir helfen, die Hauptunterschiede zwischen diesen beiden Projekten zu verstehen … und warum beide existieren.
Für mich sieht LLVM ein bisschen wie das ultimative Schweizer Taschenmesser für die Compiler-Infrastruktur aus, und C– sieht viel weniger fortgeschritten aus.
Sie unterscheiden sich darin, wie ausdrucksstark das Maschinentypsystem auf niedriger Ebene ist.
Das LLVM Maschine ist ziemlich ausdrucksstark. Das C– Maschine hingegen überträgt viel Verantwortung auf das Sprach-Frontend. Zitat aus der C–Häufig gestellte Fragen: “einfach, C– hat keine High-Level-Typen – es unterscheidet nicht einmal Gleitkommavariablen von Integer-Variablen. Dieses Modell gibt dem Frontend die vollständige Kontrolle über die Darstellung und das Typsystem.
Auch optisch sehen sie ganz anders aus. C– sieht sehr nach C aus, LLVM sieht sehr nach Assembler aus.
Pragmatisch gesehen hat LLVM derzeit viel mehr Dynamik. Es hat einen JIT-Compiler, für den Apple ihn verwendet 3D-Pipeline-Dinge und die Leute benutzen es dazu mit GCC verbinden und allerlei seltsam und wunderbar Dinge. Jemand hat es genannt “fast absurd einfach zu handhaben“.
Auf der anderen Seite C– ist viel kleiner und wahrscheinlich leichter vollständig zu verstehen. (Ich kann mir vorstellen, dass ein normaler Mensch mit etwas Hingabe das voll und ganz verstehen kann alle Aspekte davon.)
Anscheinend kannst du es haben
-
in einem Etikett. cminusminus ist es.– Aaronasterling
8. Oktober 2010 um 14:29 Uhr
Ich weiß nichts über die Qualität der Implementierung, aber LLVM scheint viel mehr Action auf seinen Mailinglisten zu haben.
– Bill Lynch
8. Oktober 2010 um 14:31 Uhr
Die Verwendung von “mm” ist eine übliche Art, Minus Minus auszudrücken. Ich glaube, es wird als Witz für viele C++-Bindungen verwendet, wie z. B. glibmm. ‘glib–‘. Ich kann mir nicht vorstellen, dass Neuankömmlinge wissen werden, wie man nach cmm sucht.
– Matt Tischler
8. Oktober 2010 um 14:32 Uhr
@matt auch, cmm existiert bereits als eine ganz andere Sprache als c–.
– Thomas M. DuBuisson
11. Oktober 2010 um 16:10 Uhr
@ThomasM.DuBuisson: Warum sagst du “ganz anders”? Aus Ihrem ersten Link: “Cmm ist die GHC-Implementierung der C–Sprache.” Obwohl ich nicht weiß, ob das wahr war, als Sie Ihren Kommentar vor 20 Monaten geschrieben haben.
– dubiosjim
2. Juni 2012 um 6:42 Uhr