Yanıtlar:
LLVM, ara ve / veya ikili makine kodu oluşturmak, optimize etmek ve üretmek için kullanılan bir kütüphanedir.
LLVM, "ön uç" (ayrıştırıcı ve lexer) ve "arka uç" (LLVM'nin temsilini gerçek makine koduna dönüştüren kod) sağladığınız bir derleyici çerçevesi olarak kullanılabilir.
LLVM ayrıca bir JIT derleyicisi olarak da hareket edebilir - derleme hızına yönelik hızlı kod optimizasyonları ile x86 / x86_64 ve PPC / PPC64 montaj üretimi desteğine sahiptir.
İlgileniyorsanız, LLVM'nin demo sayfalarında C veya C ++ kodundan oluşturulan makine koduyla oynayabilirsiniz , ancak demo sayfası şu anda 2013 yılından beri devre dışıdır.
LLVM'nin iyi bir özeti şudur:
Ön uçta Perl ve diğer birçok üst düzey dil var. Arka uçta, doğrudan makinede çalışan yerel kodunuz vardır.
Merkezde ara kod temsili bulunur. Her üst düzey dil bu LLVM IR biçiminde temsil edilebilirse, bu IR'ye dayalı analiz araçları kolayca yeniden kullanılabilir - bu temel mantıktır.
LLVM ("Düşük Seviyeli Sanal Makine" anlamına gelir, ancak artık kullanılmaz), C ++ ile yazılmış, derlenen zaman, bağlantı zamanı, çalışma zamanı ve "boşta kalma süresi" optimizasyonu için tasarlanmış bir derleyici altyapısıdır. gelişigüzel programlama dillerinde. Başlangıçta C / C ++ için uygulanan LLVM'nin dilden bağımsız tasarımı (ve başarısı), o zamandan beri Objective C, Fortran, Ada, Haskell, Java bayt kodu, Python, Ruby, ActionScript, GLSL dahil olmak üzere çok çeşitli ön uçlar üretti. , ve diğerleri.
Daha fazla açıklama için bunu okuyun
Ayrıca Unladen Swallow'a da göz atın
Göre 'LLVM Çekirdek Kütüphanelerinin Başlarken' kitabında (c):
Aslında, LLVM adı aşağıdakilerden herhangi birini ifade edebilir:
LLVM projesi / altyapısı: Bu, birlikte tam bir derleyici oluşturan çeşitli projeler için bir şemsiye: ön uçlar, arka uçlar, optimize ediciler, montajcılar, bağlayıcılar, libc ++, derleyici-rt ve bir JIT motoru. "LLVM" kelimesi, örneğin şu cümlede bu anlama sahiptir: "LLVM birkaç projeden oluşur".
LLVM tabanlı bir derleyici: Bu, LLVM altyapısı ile kısmen veya tamamen oluşturulmuş bir derleyicidir. Örneğin, bir derleyici ön uç ve arka uç için LLVM kullanabilir, ancak son bağlantıyı gerçekleştirmek için GCC ve GNU sistem kitaplıklarını kullanabilir. LLVM şu cümle içinde bu anlama sahiptir, örneğin: "C programlarını bir MIPS platformuna derlemek için LLVM kullandım".
LLVM kütüphaneleri: Bu, LLVM altyapısının yeniden kullanılabilir kod kısmıdır. Örneğin, LLVM şu anlama gelir: "Projem, Tam Zamanında derleme çerçevesi aracılığıyla kod oluşturmak için LLVM kullanır".
LLVM çekirdeği: Ara dil düzeyinde ve arka uç algoritmalarında gerçekleşen optimizasyonlar, projenin başladığı LLVM çekirdeğini oluşturur. LLVM şu cümlede bu anlama sahiptir: "LLVM ve Clang iki farklı projedir".
LLVM IR: Bu LLVM derleyici ara gösterimidir. LLVM, "Kendi dilimi LLVM'ye çeviren bir ön uç oluşturdum" gibi cümlelerde kullanıldığında bu anlama sahiptir.
LLVM temel olarak derleyiciler ve / veya dil odaklı yazılımlar oluşturmak için kullanılan bir kütüphanedir. Temel gist muhtemelen en yaygın derleyici paketi olan gcc olmasına rağmen, yeniden kullanılabilir olması için inşa edilmemiştir. bileşenleri gcc'den almak ve kendi uygulamanızı oluşturmak için kullanmak zordur. LLVM, herkesin derleyiciler ve dil odaklı yazılımlar oluşturmak için kullanabileceği bir dizi "modüler ve yeniden kullanılabilir derleyici ve araç zinciri teknolojileri" oluşturarak bu sorunu giderir.
LLVM Derleyici Altyapısı özellikle kod üzerinde optimizasyon ve dönüşüm yapmak için kullanışlıdır. Ayrıca, farklı kullanımlara hizmet eden bir dizi araçtan oluşur. llvm-prof, program etkin noktalarını tanımlamak için yürütme profili oluşturmanızı sağlayan bir profil oluşturma aracıdır. Opt, çeşitli optimizasyon geçişleri (örneğin ölü kod ortadan kaldırması) sunan bir optimizasyon aracıdır.
Önemli olan LLVM size kendi Pass'larınızı yazmanız için kütüphaneler sağlar. Örneğin, bir Programın belirli işlevlerine geçirilen bazı bağımsız değişkenlere aralık denetimi eklemeniz gerekirse, basit bir LLVM Geçidi yazmak yeterli olacaktır.
Kendi Pass'inizi yazma hakkında daha fazla bilgi için bu http://llvm.org/docs/WritingAnLLVMPass.html adresine bakın.