Jedna rzecz, której naprawdę nie rozumiem, to funkcja clang, jeśli clang jest przednim końcem kompilatora, powinien po prostu wykonać pracę parsera dla kodu źródłowego, pozostała praca zostanie wykonana przez LLVM. Ale clang może również produkować plik wykonywalny. Jak to zrozumieć? Jaka jest relacja między klangiem a llvm?Jeśli clang jest przednim końcem kompilatora, to dlaczego może wytworzyć plik wykonywalny?
Odpowiedz
Jeśli jesteś bardzo konkretny: plik wykonywalny clang jest sterownikiem kompilatora. Wywołuje wszystkie części potrzebne do utworzenia pliku wykonywalnego. Wywołuje libclang, który wykonuje zadania front-end: parser/lexer, analizę semantyczną, budowanie AST i generowanie kodu. Kiedy AST jest obniżony do LLVM IR, zadania frontowe są wykonywane, a optymalizator i LLVM kopie. Po optmizowaniu kodu sterownik kompilatora wywoła back-end LLVM określony przez cel, a na końcu linker, który buduje plik wykonywalny. I dlatego sterownik kompilatora clang może budować pliki wykonywalne.
LLVM to kompilator, który został napisany przed klangiem, który pierwotnie używał przedniego końca gcc w narzędziu o nazwie "llvm-gcc". Clang to nazwa kodu front-end, ale clang to również nazwa narzędzia, które zawiera front-clang, ale także uruchomi dla ciebie całą kompilację. Późniejsze fazy kompilacji są wbudowane w narzędzie clang jako biblioteki, lub jeśli są oddzielnymi plikami wykonywalnymi, clang wie, jak je wywoływać. Z odpowiednimi argumentami wiersza polecenia, można dokonać zatrzymania dzyń część sposób thru
- -emit-ast po prostu robi to parse i sprawia Abstract Syntax drzewo
- sprawia LLVM Intermediate Representation -emit-LLVM, lecz nie zamień go na kod dla twojego komputera
Clang będzie działać jako sterownik dla całej kompilacji, ponieważ tego właśnie programiści zwykle chcą, skompresowany, wygenerowany obiekt, wykonany plik wykonywalny. Pragnienie, aby abstrakcyjne drzewo składniowe pluło do ciebie, jest dość rzadkie.
Oczywiście to jest sos dla wszystkich rzeczą LLVM http://llvm.org
Oto film z Chriss Lattner explaing co LLVM jest https://www.youtube.com/watch?v=029YXzHtRy0. Chandler Carruth ma kilka vids na temat wyjaśnienia części klangów, nad którymi pracował.
Istnieją 3 znaczenia Clang:
- Czołowy (libclang)
- Kompilator kierowca (dzyń wykonywalny)
- tradycyjny kompilator. Obejmuje to nie tylko front-end, ale także szeroko wykorzystuje middle-end i back-end, a nawet zintegrowany asembler, aby zakończyć etap kompilacji. (sterownik składa się głównie z kompilacji i łącza)
- 1. Czy jest to plik wykonywalny rdzenia głównego?
- 2. Dlaczego wykonywalny plik binarny zawiera ścieżki dołączonych plików nagłówkowych?
- 3. Plik wykonywalny, z którego uruchamiana jest aplikacja?
- 4. Plik wykonywalny zawierający dane
- 5. Czy jest to dobry sposób, aby ustalić, czy plik jest wykonywalny w Javie
- 6. Gdzie jest plik wykonywalny Cmake na Ubuntu
- 7. Dlaczego Tie :: Plik dodaje wiersz, jeśli plik jest posortowany?
- 8. Jaki jest najmniejszy możliwy plik wykonywalny systemu Windows (PE)?
- 9. Qt utworzyć plik wykonywalny
- 10. WebDriverException: Wiadomość: Plik wykonywalny "phantomjs" może mieć nieprawidłowe uprawnienia.
- 11. Jak zakodować plik wykonywalny na ścieżce Linux?
- 12. W jaki sposób program może usunąć własny plik wykonywalny?
- 13. Czy jest to błąd kompilatora VC++ 2010?
- 14. Dlaczego raport clang-dumpversion 4.2.1
- 15. Co to jest dobry kompilator kompilatora kompilatora C#/analizatora składni?
- 16. Dziedziczenie - dlaczego jest to nielegalne?
- 17. Uruchom plik wykonywalny z makefile
- 18. Dlaczego mój utworzony plik wykonywalny programu Pyinstall wymaga uprawnień administratora?
- 19. jeśli (NSOrderedAscending == result) może ktoś wytłumaczyć to
- 20. Skompiluj samodzielny statyczny plik wykonywalny
- 21. Dlaczego kompilator Clang ++ nie może skompilować następującego kodu szablonu variadic?
- 22. Dlaczego Clang warn: `&& 'within' || '`?
- 23. Czy plik wykonywalny w systemie Linux może wpływać na precyzję zmiennoprzecinkową w połączonej bibliotece dynamicznej?
- 24. Jak sprawdzić, czy plik jest wykonywalny w pliku node.js?
- 25. Co to jest plik jam?
- 26. Co to jest plik .h.gch?
- 27. Pakowanie programu Jython w plik wykonywalny
- 28. Magia kompilatora: dlaczego?
- 29. Jak znaleźć aktualnie działający plik wykonywalny PHP?
- 30. appjs - kompilacja w pojedynczy plik wykonywalny?
Jaka jest różnica między LLVM IR i LLVM? – storen
LLVM IR jest reprezentacją pośrednią, która produkuje front-end i przekształca back-end do odrębnego ISA. LLVM to tylko nazwa projektu. –