2010-10-08 16 views
55

Po zapoznaniu się z działaniem LLVM jestem naprawdę podekscytowany tym, jak można generować przenośny kod niskiego poziomu i jak budować modułową "rzecz".Jak działa C-- w porównaniu do LLVM?

Ale odkryłem dzisiaj istnienie C--, które wydaje się dzielić pewne pojęcia z LLVM.

Poszukuję informacji pomagających mi zrozumieć główne różnice między tymi dwoma projektami ... i dlaczego oba istnieją.

Dla mnie LLVM wygląda trochę jak najlepszy szwajcarski scyzoryk dla infrastruktury kompilatora, a C-wygląda o wiele mniej zaawansowany.

+5

najwyraźniej możesz mieć "-'" w tagu. Cminusminus to jest. – aaronasterling

+0

dzięki za korektę :-) –

+0

Nie wiem o jakości wdrożenia, ale LLVM wydaje się mieć o wiele więcej akcji na swoich listach mailingowych. –

Odpowiedz

52

Różnią się tym, jak ekspresyjny jest system typu niskiego poziomu.

Maszyna LLVM jest dość ekspresyjna. Z drugiej strony, maszyna C-- nakłada dużą odpowiedzialność na front językowy. Cytując z C-- FAQ: „prosto, C-- ma typy wysokiego szczebla --- nawet nie odróżnić zmienne zmiennoprzecinkowe ze zmiennych całkowitych Model ten daje Czo całkowitą kontrolę reprezentacji i typu systemu”

Również wizualnie wyglądają zupełnie inaczej. C-- wygląda trochę jak C, LLVM wygląda jak asembler.

Pragmatycznie, LLVM ma teraz o wiele więcej rozpędu. Ma kompilator JIT, Apple używa go do 3D pipeline things i ludzie używają go do connect to GCC i wszelkiego rodzaju rzeczy weird i wonderful. Ktoś nazwał to "almost absurdly easy to work with".

Z drugiej strony C-- jest znacznie mniejsza i prawdopodobnie łatwiejsza do całkowitego zrozumienia. (Wyobrażam sobie, że normalna osoba z pewną dedykacją może w pełni zrozumieć jej aspekty).

+1

Tak więc, jeśli dobrze rozumiem, główną różnicą jest poziom abstrakcji reprezentacji pośredniej używanej przez ten kompilator, dzięki! –

+6

@ Alois Cochard, tak to mi się wydawało. Nie jestem ekspertem od kompilacji, po prostu gram na Stack Overflow. :-) –

+0

Twoje linki do cminusminus.org wydają się prowadzić do czegoś zupełnie niezwiązanego. – Ruslan