Czytałem tu i tam o LVV, które mogą być używane do łagodzenia bólu kompilacji cross-platformy w C++, starałem się czytać dokumenty, ale zrobiłem nie rozumiem, w jaki sposób mogę go używać w rzeczywistych problemach z rozwojem, czy ktoś może mi wyjaśnić w prostych słowach, jak mogę go użyć?LLVM co to jest i jak mogę go używać do krzyżowania kompilacji platformy
Odpowiedz
Kluczową koncepcją LLVM jest niskopoziomowa "pośrednia" reprezentacja (IR) programu. To IR jest na poziomie zbliżonym do kodu asemblera, ale zawiera więcej informacji w celu ułatwienia optymalizacji.
Siła LLVM wynika z możliwości odroczenia kompilacji tej reprezentacji pośredniej do określonej maszyny docelowej, tuż przed rozpoczęciem kodu. Podejście kompilacyjne typu "just-in-time" (JIT) może być używane w aplikacji do tworzenia kodu, którego potrzebuje, zanim będzie on potrzebny.
W wielu przypadkach masz więcej informacji w czasie, gdy program jest uruchomiony, co robisz z powrotem w siedzibie głównej, dzięki czemu program może być zoptymalizowany.
Aby rozpocząć, można skompilować program w języku C++ do pojedynczej reprezentacji pośredniej, a następnie skompilować go do wielu platform z tej podczerwieni.
Możesz także wypróbować demo Kalejdoskop, które poprowadzi Cię przez tworzenie nowego języka bez konieczności pisania kompilatora, po prostu wpisz IR.
W aplikacjach o krytycznym działaniu aplikacja może napisać własny kod, który musi zostać uruchomiony, tuż przed uruchomieniem.
LLVM jest, jak sama nazwa wskazuje, maszyną wirtualną niskiego poziomu, która ma generator kodu. Jeśli chcesz się do niego skompilować, możesz użyć przedniego końca gcc lub clang, który jest kompilatorem c/C++ dla LLVM, który wciąż jest w toku.
Dlaczego nie pójdziesz do strony internetowej LLVM i sprawdź całą dokumentację tam. Wyjaśniają szczegółowo, czym jest LLVM i jak z niego korzystać. Na przykład mają stronę Getting Started.
Należy zauważyć, że garść informacji o celu pochodzi z plików nagłówkowych systemu używanych podczas kompilacji. LLVM nie odkłada rozwiązywania takich problemów, jak "rozmiar wskaźnika" czy "układ bajtów", więc jeśli kompilujesz z 64-bitowymi nagłówkami dla platformy Little-Endian, nie możesz użyć tego kodu źródłowego LLVM do kierowania na 32-bitowy zestaw big-endian pater wyjściowy.
Jest dobry rozdział w książce, wyjaśniając wszystko ładnie tutaj: www.aosabook.org/en/llvm.html
- 1. Co to jest CONNECTED_STRIPE_ACCOUNT_ID? Jak zdobyć go z platformy Android?
- 2. Co to jest pyximport i jak mam go używać?
- 3. Co to jest kontekst LLVM?
- 4. Co to jest NHibernate i dlaczego powinienem go używać?
- 5. Co to jest indeks pełnotekstowy i kiedy powinienem go używać?
- 6. co to jest MVVM i czy powinniśmy go używać?
- 7. Co to jest LLVM C++ API?
- 8. Jak zrobić clang kompilacji do llvm IR
- 9. Jak używać bitbake do krzyżowania tego prostego programu do beagleboard?
- 10. co to jest "tryb ścisły" i jak się go używa?
- 11. Co to jest package-info.java i jak mogę go dodać do mojego projektu?
- 12. Co to jest Manifest w Scali i kiedy go potrzebujesz?
- 13. co to jest Request.InputStream i kiedy go użyć?
- 14. co to jest błąd parsowania i jak go naprawić
- 15. Co to jest "najczęstszy subskrybent" i jak go obliczyć?
- 16. Co to jest el/element? Jak tego używać? I dlaczego?
- 17. Co to jest wyrażenie regularne MM/DD/RRRR i jak używać go w php?
- 18. Co to jest uint_fast32_t i dlaczego powinno się go używać zamiast zwykłych int i uint32_t?
- 19. Co to jest i jak używać par BIO OpenSSL?
- 20. Co to jest bajt datatype i kiedy powinienem go użyć?
- 21. Co to jest NPM i dlaczego go potrzebuję?
- 22. Co to jest folder EmbeddedAppDeltas w Xcode i czy mogę go bezpiecznie usunąć?
- 23. Co to jest identyfikator-danych-cip w ASP.NET MVC i jak mogę go usunąć?
- 24. Co to jest err. (* Os.PathError) w Go?
- 25. Co to jest Ninject i kiedy go używasz?
- 26. Co to jest "pułapka przerwania" i jak mogę ją debugować?
- 27. Co to jest SAPI i kiedy go użyjesz?
- 28. Co to jest wirtualna sekcja LLVM w kontekście plików obiektowych?
- 29. Co to są przejściowe atrybuty factory_girl? Dlaczego miałbym go używać?
- 30. Co to jest __declspec i kiedy należy go użyć?
Można również przygotować pliki binarne, jak również, że nie są zmuszeni do korzystania z metody wykonawcze JIT. Do tej pory ma on garstkę backendów, dopiero teraz zacząłem go używać i do tej pory jest on łatwy w użyciu jako kompilator cross ARM. Łatwo jest połączyć poszczególne moduły i zoptymalizować program jako całość. –