Odpowiedzi:
LLVM to biblioteka używana do konstruowania, optymalizacji i produkcji pośredniego i / lub binarnego kodu maszynowego.
LLVM może być używany jako środowisko kompilatora, w którym udostępnia się „front end” (parser i lexer) oraz „back end” (kod, który konwertuje reprezentację LLVM na rzeczywisty kod maszynowy).
LLVM może również działać jako kompilator JIT - obsługuje generowanie zestawów x86 / x86_64 i PPC / PPC64 z szybkimi optymalizacjami kodu w celu zwiększenia prędkości kompilacji.
Jeśli jesteś zainteresowany, możesz grać z kodem maszynowym LLVM, który jest generowany z kodu C lub C ++ na ich stronie demonstracyjnej , ale strona demonstracyjna jest obecnie wyłączona od 2013 roku.
Dobre podsumowanie LLVM jest następujące:
Na froncie masz Perla i wiele innych języków wysokiego poziomu. W backendie masz kod tubylczy, który działa bezpośrednio na maszynie.
W centrum znajduje się twoja pośrednia reprezentacja kodu. Jeśli każdy język wysokiego poziomu może być reprezentowany w tym formacie IR LLVM, narzędzia analityczne oparte na tym IR mogą być łatwo ponownie użyte - to podstawowa racja.
LLVM (kiedyś oznacza „maszynę wirtualną niskiego poziomu”, ale już nie jest) to infrastruktura kompilatora napisana w C ++, która została zaprojektowana do optymalizacji kompilacji, czasu łącza, czasu działania i „bezczynności” napisanych programów w dowolnych językach programowania. Pierwotnie zaimplementowany dla C / C ++, niezależny od języka projekt (i sukces) LLVM od tego czasu stworzył szeroką gamę front-endów, w tym Objective C, Fortran, Ada, Haskell, kod bajtowy Java, Python, Ruby, ActionScript, GLSL , i inni.
Przeczytaj to, aby uzyskać więcej wyjaśnień. Zobacz
także Unladen Swallow
Zgodnie z książką „Pierwsze kroki z podstawowymi bibliotekami LLVM” (c):
W rzeczywistości nazwa LLVM może odnosić się do jednego z poniższych:
Projekt / infrastruktura LLVM: Jest to parasol dla kilku projektów, które razem tworzą kompletny kompilator: frontendy, backendy, optymalizatory, asemblery, linkery, libc ++, compiler-rt i silnik JIT. Słowo „LLVM” ma takie znaczenie, na przykład w następującym zdaniu: „LLVM składa się z kilku projektów”.
Kompilator oparty na LLVM: jest to kompilator zbudowany częściowo lub całkowicie z infrastrukturą LLVM. Na przykład kompilator może używać LLVM jako interfejsu użytkownika i zaplecza, ale do wykonania końcowego łącza używa bibliotek systemowych GCC i GNU. LLVM ma to znaczenie w następującym zdaniu, na przykład: „Użyłem LLVM do kompilacji programów C na platformie MIPS”.
Biblioteki LLVM: jest to część kodu infrastruktury LLVM do wielokrotnego użytku. Na przykład LLVM ma następujące znaczenie w zdaniu: „Mój projekt używa LLVM do generowania kodu za pomocą struktury kompilacji Just-in-Time”.
Rdzeń LLVM: Optymalizacje zachodzące na poziomie języka pośredniego i algorytmy zaplecza tworzą rdzeń LLVM, w którym rozpoczął się projekt. LLVM ma to znaczenie w następującym zdaniu: „LLVM i Clang to dwa różne projekty”.
LLVM IR: Jest to reprezentacja pośrednia kompilatora LLVM. LLVM ma to znaczenie, gdy jest używane w zdaniach takich jak „Zbudowałem interfejs, który tłumaczy mój własny język na LLVM”.
LLVM to w zasadzie biblioteka używana do budowy kompilatorów i / lub oprogramowania zorientowanego na język. Podstawową istotą jest to, że chociaż masz gcc, który jest prawdopodobnie najpowszechniejszym pakietem kompilatorów, nie jest zbudowany tak, aby można go było ponownie używać, tj. trudno jest pobrać komponenty z gcc i użyć go do zbudowania własnej aplikacji. LLVM rozwiązuje ten problem dobrze, budując zestaw „modułowych i wielokrotnego użytku technologii kompilatora i łańcucha narzędzi”, których każdy mógłby użyć do budowy kompilatorów i oprogramowania zorientowanego na język.
Infrastruktura kompilatora LLVM jest szczególnie przydatna do przeprowadzania optymalizacji i transformacji kodu. Składa się również z szeregu narzędzi służących do różnych zastosowań. llvm-prof to narzędzie do profilowania, które umożliwia profilowanie wykonania w celu zidentyfikowania hotspotów programu. Opt to narzędzie do optymalizacji, które oferuje różne przebiegi optymalizacji (na przykład eliminacja martwego kodu).
Co ważne, LLVM zapewnia biblioteki do pisania własnych haseł. Na przykład, jeśli chcesz dodać kontrolę zakresu dla niektórych argumentów przekazywanych do niektórych funkcji Programu, wystarczy napisanie prostej LLVM Pass.
Aby uzyskać więcej informacji na temat pisania własnej przepustki, sprawdź to http://llvm.org/docs/WritingAnLLVMPass.html